[ 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]