Andreas,

I wrote a stand alone, using the factory methods to create an OMElement as opposed to using the OMElementImpl.

Code here:

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace ns = OMAbstractFactory.getOMFactory().createOMNamespace("http://xxx/WS/ v0.1", "ao");

        //create parent node
OMElement fieldNode = factory.createOMElement("fieldNode", ns, null);

        //create node I want to add CData text to
OMElement displayNameNode = factory.createOMElement("displayNameNode", ns, null);

        //create text element and set type to CData
OMTextImpl text = (OMTextImpl)factory.createOMText("test", OMTextImpl.CDATA_SECTION_NODE);

        //add text element and print it
        displayNameNode.addChild(text);
        System.out.println(displayNameNode);

        fieldNode.addChild(displayNameNode);
        System.out.println(fieldNode);
    }

}

This worked!

I then changed the real code to use factory methods, and this also works. It's been a long and frustrating day (UK time here), but thanks for asking me to rewrite this.

Out of interest I changed it to use OMElementImpl again:

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace ns = OMAbstractFactory.getOMFactory().createOMNamespace("http://xxx/WS/ v0.1", "ao");

        //create parent node
OMElementImpl fieldNode = new OMElementImpl("fieldNode", ns, factory);

        //create node I want to add CData text to
OMElementImpl displayNameNode = new OMElementImpl("displayName", ns, factory);

        //create text element and set type to CData
OMTextImpl text = (OMTextImpl)factory.createOMText("test", OMTextImpl.CDATA_SECTION_NODE);

        //add text element and print it
        displayNameNode.addChild(text);
        System.out.println(displayNameNode);

        fieldNode.addChild(displayNameNode);
        System.out.println(fieldNode);
    }

}

This also works. The error was in setting the factory to null. Very foolish, I admit.

Thanks again for the prod to think my way out of a blonde moment.

Chris



On 7 Jan 2009, at 21:09, Andreas Veithen wrote:

Can you please post a Java program (with no dependencies other than
Axiom) that reproduces this problem?

Andreas

On Wed, Jan 7, 2009 at 16:15, Chris Bowman <[email protected]> wrote:
Hi,
I am trying to add text to an OMElement so it is surrounded by CData
tags. However, when I add my created OMElement as a child to another
element, the wrapped text is lost.
As far as I can see this should work:
OMElementImpl displayNameNode = new OMElementImpl("displayName", ns, null);
       if(cf.getDisplayName() != null){
           OMTextImpl text = (OMTextImpl)factory.createOMText("test",
OMTextImpl.CDATA_SECTION_NODE);
           logger.debug(text.getText());
           displayNameNode.addChild(text);
           logger.debug(displayNameNode);
       }
       fieldNode.addChild(displayNameNode);
       logger.debug(fieldNode);
Checking the logs, I can see the correct text coming out from the debug:
07 Jan 2009 14:32:56,168 DEBUG [CampaignDataAccessWS:398]  test
Again, when I check that the displayNameNode has been created properly I can
see the text fine:
<ao:displayName
xmlns:ao="http://xxx/WS/v0.1";><![CDATA[test]]></ao:displayName>
When I add this node as a child I get the problem:
<ao:field xmlns:ao="http://xxx/WS/v0.1"; ao:columnName="Mod_Date" ao:type="8"
ao:order="5"><ao:displayName><![CDATA[]]></ao:displayName></ao:field>
I am assuming I am doing something wrong here, but I cannot see what it is.
Any help would be much appreciated.
Chris





Reply via email to