Hello,
do you think this is a problem of dom4j? Try to save XML document from dom4j
to file and parse it and validate with SAX parser, without dom4j - if the
problem remains, it is a problem with parser, validator or yours XSD.
Regards

Filip Jirsák


2011/2/22 Andy Newton <andy.c.new...@gmail.com>

> I'm finding the following problem quite intractable (OK, that's an
> understatement) - any insights will be appreciated.
>
> I've been validating in memory XML created from dom4j 'new
> DOMDocument()' - but this will not work with Java 6.
>
> The following call to validate(source) of a dom4j (1.6.1) DOMSource
> works with Java 1.5.x but fails with Java 1.6.x:
>
>        public void validate() throws Exception {
>                SchemaFactory schemaFactory =
> SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
>                schemaFactory.setErrorHandler(null);
>                Schema schemaXSD = schemaFactory.newSchema(new
> URL(getSchemaURLString()));
>                Validator validator = schemaXSD.newValidator();
>                DOMSource source = new DOMSource(getDocument());
>                validator.validate(source);
>        }
>
> getSchemaURLString() is also used to add the
> xsi:noNamespaceSchemaLocation attribute to the root node, i.e.:
> xsi:noNamespaceSchemaLocation="
> http://localhost:8080/integration/xsd/fqlResponseSchema-2.0.xsd";
>
> The exception follows:
>
> Exception:  org.xml.sax.SAXParseException: cvc-complex-type.3.2.2:
> Attribute 'xsi:noNamespaceSchemaLocation' is not allowed to appear in
> element 'specialfields'.; complex-type.3.2.2: Attribute
> 'xsi:noNamespaceSchemaLocation' is not allowed to appear in element
> 'specialfields'.
>        at
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:195)
>        at
> com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(ErrorHandlerWrapper.java:131)
>        at
> com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:384)
>        at
> com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:318)
>        at
> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator$XSIErrorReporter.reportError(XMLSchemaValidator.java:417)
>        at
> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.reportSchemaError(XMLSchemaValidator.java:3182)
>        at
> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.processAttributes(XMLSchemaValidator.java:2659)
>        at
> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(XMLSchemaValidator.java:2066)
>        at
> com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(XMLSchemaValidator.java:705)
>        at
> com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.beginNode(DOMValidatorHelper.java:273)
>        at
> com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.validate(DOMValidatorHelper.java:240)
>        at
> com.sun.org.apache.xerces.internal.jaxp.validation.DOMValidatorHelper.validate(DOMValidatorHelper.java:186)
>        at
> com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:104)
>        at javax.xml.validation.Validator.validate(Validator.java:127)
>
>
> Here's the start of the XML - generated after disabling the call to
> validator.validate(source):
>
> <?xml version="1.0" encoding="utf-8"?>
> <meetings xsi:noNamespaceSchemaLocation="
> http://localhost:8080/integration/xsd/fqlResponseSchema-2.0.xsd";
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> .............
> </meetings>
>
> And of the XSD:
>
> <?xml version="1.0" encoding="utf-8" ?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema";
> elementFormDefault="qualified">
>  <xs:element name="meetings">
>    <xs:complexType>
>      <xs:choice>
>            <xs:sequence>
>              <xs:element minOccurs="0" maxOccurs="1" ref="summary" />
>              <xs:element minOccurs="0" maxOccurs="unbounded" ref="meeting"
> />
>            </xs:sequence>
>        <xs:element ref="error" />
>      </xs:choice>
>    </xs:complexType>
>  </xs:element>
>  <xs:element name="summary">
> ................
>
>
> So my root element is being rejected because it contains a
> xsi:noNamespaceSchemaLocation attribute.  And the schema itself does
> not specify that as a valid attribute of my root element?
>
> At this point it seems to me that I need to give up on dom4j for this
> task and switch to one of the other solutions, for example as outlined
> here:
>
> But I'd like to know what I've done wrong at any rate!
>
> Thanks in advance.
>
> Andy Newton
>
>
> ------------------------------------------------------------------------------
> Index, Search & Analyze Logs and other IT data in Real-Time with Splunk
> Collect, index and harness all the fast moving IT data generated by your
> applications, servers and devices whether physical, virtual or in the
> cloud.
> Deliver compliance at lower cost and gain new business insights.
> Free Software Download: http://p.sf.net/sfu/splunk-dev2dev
> _______________________________________________
> dom4j-user mailing list
> dom4j-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/dom4j-user
>
------------------------------------------------------------------------------
Free Software Download: Index, Search & Analyze Logs and other IT data in 
Real-Time with Splunk. Collect, index and harness all the fast moving IT data 
generated by your applications, servers and devices whether physical, virtual
or in the cloud. Deliver compliance at lower cost and gain new business 
insights. http://p.sf.net/sfu/splunk-dev2dev 
_______________________________________________
dom4j-user mailing list
dom4j-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/dom4j-user

Reply via email to