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 = tagmy 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