[ http://issues.apache.org/jira/browse/XERCESJ-1163?page=all ]
     
Michael Glavassevich resolved XERCESJ-1163:
-------------------------------------------

    Resolution: Won't Fix

There is a warning in the Javadoc for DOMSource [1] which says: "Note that XSLT 
requires namespace support. Attempting to transform a DOM that was not 
constructed with a namespace-aware parser may result in errors. Parsers can be 
made namespace aware by calling 
DocumentBuilderFactory.setNamespaceAware(boolean awareness)." The same applies 
to XML schema validation which also requires namespace support.  Schema 
validation is only defined for XML documents which have an infoset [2][3].  
This implies both well-formedness and namespace conformance, the second of 
which is not checked by a non-namespace-aware parser. 

Each of the element/attribute nodes in a DOM built from a non-namespace-aware 
parser will have a null [4] local name. Note that [local name] is a required 
[2] property for both element and attribute information items. Validation of an 
input which is missing required infoset properties is undefined. This only 
"works" with Java 5.0 because it is attempting to fix-up the input, quite 
likely trying to make sense of documents which are not conformant [5] to the 
namespaces specification. I don't think this is something Xerces should be 
doing. You wouldn't want a compiler to try fixing syntax errors in source code 
by guessing what you meant. What happens when it's wrong? In order for the 
validator to behave predictably, you must provide it with an input constructed 
by a namespace-aware parser (i.e. factory.setNamespaceAware(true)).

[1] 
http://xerces.apache.org/xerces2-j/javadocs/api/javax/xml/transform/dom/DOMSource.html
[2] http://www.w3.org/TR/xmlschema-1/#infoset
[3] http://www.w3.org/TR/xmlschema-1/#concepts-data-model
[4] 
http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407/core.html#ID-2141741547
[5] http://www.w3.org/TR/REC-xml-names/#Conformance

> javax.xml.validation.Validator#validate implementation does not support a 
> DOMSource argument
> --------------------------------------------------------------------------------------------
>
>          Key: XERCESJ-1163
>          URL: http://issues.apache.org/jira/browse/XERCESJ-1163
>      Project: Xerces2-J
>         Type: Bug

>   Components: JAXP (javax.xml.validation)
>     Versions: 2.8.0
>     Reporter: Steven Grossman

>
> Validator#validate implementation does not support a DOMSource argument.  The 
> following SAXParseException is always thrown: 
> Exception in thread "main" org.xml.sax.SAXParseException: cvc-elt.1: Cannot 
> find the declaration of element 'xxx'.  
> The problem is not seen in the 1.5 jdk.
> I've supplied a test class that succesfully validates an xml instance 
> document using a StreamSource and subsequently fails to perform the 
> validation against a DOMSource representation of the same xml.
> import java.io.StringReader;
> import java.io.IOException;
> import javax.xml.XMLConstants;
> import javax.xml.parsers.DocumentBuilder;
> import javax.xml.parsers.DocumentBuilderFactory;
> import javax.xml.parsers.ParserConfigurationException;
> import javax.xml.transform.stream.StreamSource;
> import javax.xml.transform.dom.DOMSource;
> import javax.xml.validation.Schema;
> import javax.xml.validation.SchemaFactory;
> import javax.xml.validation.Validator;
> import org.xml.sax.SAXException;
> import org.xml.sax.InputSource;
> import org.w3c.dom.Document;
> public final class ValidatorBug {
>     private static final String SCHEMA =
>         "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
>         "<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"; 
> elementFormDefault=\"qualified\" attributeFormDefault=\"unqualified\">\n" +
>         "    <xs:element name=\"root\"/>\n" +
>         "</xs:schema>";
>     private static final String XML = "<?xml version=\"1.0\" 
> encoding=\"UTF-8\"?><root/>";
>     public static void main(String[] args) throws SAXException, IOException, 
> ParserConfigurationException {
>         SchemaFactory schemaFactory =
>                 SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
>         Schema schema = schemaFactory.newSchema(new StreamSource(new 
> StringReader(SCHEMA)));
>         Validator validator = schema.newValidator();
>         System.out.println("\nvalidating stream source");
>         validator.validate(new StreamSource(new StringReader(XML)));  // <--- 
> WORKS
>         System.out.println("valid");
>         DocumentBuilderFactory documentBuilderFactory = 
> DocumentBuilderFactory.newInstance();
>         DocumentBuilder documentBuilder = 
> documentBuilderFactory.newDocumentBuilder();
>         Document document = documentBuilder.parse(new InputSource(new 
> StringReader(XML)));
>         System.out.println("\nvalidating DOM source");
>         validator.validate(new DOMSource(document));   // <--- PROBLEM
>         System.out.println("valid");
>     }
> }
> The exception:
> Exception in thread "main" org.xml.sax.SAXParseException: cvc-elt.1: Cannot 
> find the declaration of element 'root'.
>       at 
> org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown 
> Source)
>       at org.apache.xerces.util.ErrorHandlerWrapper.error(Unknown Source)
>       at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
>       at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
>       at 
> org.apache.xerces.impl.xs.XMLSchemaValidator.handleStartElement(Unknown 
> Source)
>       at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement(Unknown 
> Source)
>       at 
> org.apache.xerces.jaxp.validation.DOMValidatorHelper.beginNode(Unknown Source)
>       at 
> org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
>       at 
> org.apache.xerces.jaxp.validation.DOMValidatorHelper.validate(Unknown Source)
>       at org.apache.xerces.jaxp.validation.ValidatorImpl.validate(Unknown 
> Source)
>       at javax.xml.validation.Validator.validate(Validator.java:82)
>       at ValidatorBug.main(ValidatorBug.java:42)
> (This bug is represented by XERCESJ-1132 and XERCESJ-1161, but they were in 
> the wrong component)

-- 
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
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to