You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Chris Bowman <ch...@phoros.co.uk> on 2009/01/07 16:15:50 UTC

[Axis2] CData elements losing text

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

Re: [Axis2] CData elements losing text

Posted by Andreas Veithen <an...@gmail.com>.
Chris,

It is indeed incorrect to pass a null factory into the constructors.
However, I am surprised you didn't get an exception, and I would like
to check that with the latest Axiom version. Can you post the exact
code that shows this behavior?

Andreas

On Thu, Jan 8, 2009 at 00:00, Chris Bowman <ch...@phoros.co.uk> wrote:
> 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 <ch...@phoros.co.uk> 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
>
>
>
>
>

Re: [Axis2] CData elements losing text

Posted by Chris Bowman <ch...@phoros.co.uk>.
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 <ch...@phoros.co.uk> 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






Re: [Axis2] CData elements losing text

Posted by Andreas Veithen <an...@gmail.com>.
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 <ch...@phoros.co.uk> 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