Hi Jorg,

I created a simple test as you recommended, and the results were as I
expected. The CDATA contents were not read.  Here is the test:

@Test
Public void testReadCdata(){
  Xstream xstream = new Xstream(new StaxDriver());
  String contents = "<tag>my data conents</tag>";
  String xml = "<string><![CDATA[" + contents + "]]></string>";
  String results = (String) xstream.fromXML(xml);
  assertEquals(contents, results);
}

"results" is always empty.
I'm using Oracle Java 1.6_033.

I also wrote a test to write "CDATA" and it is always encoding "<" & ">"
characters like "lt&;", etc.

What am I doing wrong?

Keith




On 2/26/13 5:46 PM, "Jörg Schaible" <joerg.schai...@gmx.de> wrote:

>Hi Keith,
>
>Wire, Keith C wrote:
>
>> Hi All,
>> 
>> I'm using the StaxDriver to gain support of namespaces in Xstream.
>
>Do you have an idea, which StaX implementation is selected? The
>StaXDriver 
>itself will only use the default implementation of your environment and
>that 
>might change with the Java libraries on your classpath.
>
>> Really, I care that it ignores them when unmarshalling xml.  Anyhow,
>>when
>> unmarshalling XML using the StaxDriver / StaxReader I discovered it
>> ignored CDATA tags.
>
>This is strange in so far as XStream contains unit tests with CDATA and
>there all directly supported StAX implementations (BEA RI, Woodstox, Java
>6 
>Runtime) run these tests successfully.
>
>> Upon investigation I tracked down the issue to the
>> following method on the StaxReader:
>> 
>> protected int pullNextEvent() {
>>        try {
>>            switch(in.next()) {
>>                case XMLStreamConstants.START_DOCUMENT:
>>                case XMLStreamConstants.START_ELEMENT:
>>                    return START_NODE;
>>                case XMLStreamConstants.END_DOCUMENT:
>>                case XMLStreamConstants.END_ELEMENT:
>>                    return END_NODE;
>>                case XMLStreamConstants.CHARACTERS:
>>                    return TEXT;
>>                case XMLStreamConstants.COMMENT:
>>                    return COMMENT;
>>                default:
>>                    return OTHER;
>>            }
>>        } catch (XMLStreamException e) {
>>            throw new StreamException(e);
>>        }
>>    }
>> 
>> The easy fix is to add "case XMLStreamConstants.CDATA" to also return
>> "TEXT".  Due to the constructor of the StaxReader calling moveDown() I
>>am
>> unable to Override the "pullNextEvent()" method to solve this on my own.
>
>There's no need. See Javadoc to javax.xml.stream.events.Characters. It
>handles also CDATA.
>
>> I attempted to create a JIRA ticket for this issue but was unable to
>> request an account.
>
>Alas, you're right, the description to create an account no longer works
>:-/
>You'll have to create now an account at xircles.codehaus.org.
>
>> Please let me know if there is an alternative Driver to use that will
>> allow me to ignore/drop namespaces while unmarshalling that also
>>supports
>> unmarshalling and marshaling CDATA.
>
>Maybe you can create a little unit test that describes your behavior. A
>short xstream.fromXML("<string><![CDATA[ ... ]]>") should be enough to
>reveal a problem.
>
>Regards,
>Jörg
>
>
>---------------------------------------------------------------------
>To unsubscribe from this list, please visit:
>
>    http://xircles.codehaus.org/manage_email
>
>


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to