XML Schema validation corrupts CDATA sections
---------------------------------------------
Key: XERCESJ-1052
URL: http://issues.apache.org/jira/browse/XERCESJ-1052
Project: Xerces2-J
Type: Bug
Versions: 2.6.2
Environment: Tested with Sun JDK 1.5.0.02 on x86 Linux.
Xerces was built using 'jar-dom3' target.
Reporter: Bas de Bakker
Parsing a document with XML Schema validation messes up CDATA sections. Below
is a self-contained test case.
The output of the test is:
Child 1 = 'foo'
Child 2 = ' bar'
Notice that the space has become part of the CDATA section.
import java.io.StringReader;
import org.apache.xerces.parsers.DOMParser;
import org.apache.xerces.parsers.XML11Configuration;
import org.apache.xerces.xni.XMLResourceIdentifier;
import org.apache.xerces.xni.parser.XMLEntityResolver;
import org.apache.xerces.xni.parser.XMLInputSource;
import org.apache.xerces.xni.parser.XMLParserConfiguration;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
public class XercesTest {
public static void main(String[] args) {
try {
doTest();
} catch (Exception e) {
e.printStackTrace();
}
}
private static void doTest() throws Exception {
XMLParserConfiguration config = new XML11Configuration();
config.setFeature("http://apache.org/xml/features/validation/schema", true);
config.setEntityResolver(new MyEntityResolver());
DOMParser parser = new DOMParser(config);
XMLInputSource input = new XMLInputSource(null, null, null);
String doctext = "<root
xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' "
+ "xsi:noNamespaceSchemaLocation='root.xsd'>foo <![CDATA[bar]]></root>";
input.setCharacterStream(new StringReader(doctext));
parser.parse(input);
Document document = parser.getDocument();
Element docelem = document.getDocumentElement();
Text child1 = (Text)docelem.getFirstChild();
CDATASection child2 = (CDATASection)child1.getNextSibling();
System.out.println("Child 1 = '" + child1.getNodeValue() + '\'');
System.out.println("Child 2 = '" + child2.getNodeValue() + '\'');
}
private static class MyEntityResolver implements XMLEntityResolver {
public XMLInputSource resolveEntity(XMLResourceIdentifier resource) {
String doctext = "<xsd:schema
xmlns:xsd='http://www.w3.org/2001/XMLSchema'>"
+ "<xsd:element name='root'>"
+ "<xsd:simpleType>"
+ "<xsd:list itemType='xsd:string'/>"
+ "</xsd:simpleType>"
+ "</xsd:element>"
+ "</xsd:schema>";
XMLInputSource input = new XMLInputSource(resource);
input.setCharacterStream(new StringReader(doctext));
return input;
}
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]