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]

Reply via email to