You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "Ortwin Glück (JIRA)" <xe...@xml.apache.org> on 2006/05/23 11:10:30 UTC
[jira] Commented: (XERCESJ-1163)
javax.xml.validation.Validator#validate implementation does not support a
DOMSource argument
[ http://issues.apache.org/jira/browse/XERCESJ-1163?page=comments#action_12412895 ]
Ortwin Glück commented on XERCESJ-1163:
---------------------------------------
Thanks Michael for this excellent explanation. I have a use case that is a bit special and I am not sure if this is a Xerces or a JDOM problem.
I create a JDOM with all nodes in NO_NAMESPACE (structure is defined by customer). This JDOM is subsequently converted to a Xerces DOM with the JDOM's DOMOutputter. This would use Document.createElement instead of Document.createElementNS to create the Elements for example as I use NO_NAMESPACE. This way I always get a DOM without namespace support. Now I want to validate this DOM against a schema (provided by the customer). The schema does not declare a target namespace. And the XML files reference it with noNamespaceSchemaLocation. This seems legal to me. But with no namespace support in the DOM I can not use the schema validation due to this issue.
Would it be possible to use createElementNS instead here, even though I have no namespace? Then it can be solved in JDOM's DOMOutputter.
If not, then you should think about how to validate a DOM with no namespace :-)
> 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: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org