Skip to Main Content

Java EE (Java Enterprise Edition) General Discussion

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

XML validation with StAX

User755122-OracleMay 19 2011 — edited Jul 15 2011
Hi,

I have a requirement to validate XMLs during JAXB unmarshalling and during StAX parsing. The schema is packaged in a jar. I am able to successfully read the schema, and validate the XML during unmarshalling by setting the schema in the unmarshaller (through setSchema()).

However, I am not able to validate it with StAX using the same schema and same XML.

Here is the code snippet for StAX:

StringReader stringReader = new StringReader(inputXMLStr);
XMLEventReader xmlEventReader = XMLInputFactory.newInstance().createXMLEventReader(stringReader);
EventFilter filter = new EventFilter() {
public boolean accept(XMLEvent event) {
return event.isStartElement();
}
};
XMLEventReader xmlFilteredEventReader = xmlif.createFilteredReader(xmlEventReader, filter);

Schema mySchema = getSchema(); // this method retrieves the schema by reading the schema files as
stream source and calling schemaFactory.newSchema(...)

Validator validator = mySchema.newValidator();
validator.setErrorHandler(new SchemaErrorHandler());
Source xmlSource = new StAXSource(xmlFilteredEventReader);
validator.validate(xmlSource);


I get a SAX Parse exception saying "cvc-elt.1: Cannot find the declaration of element 'myElement'"

And I also see the following exception:
Caused by: java.lang.NullPointerException
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXEvent2SAX.bridge(StAXEvent2SAX.java:171)
at com.sun.org.apache.xalan.internal.xsltc.trax.StAXEvent2SAX.parse(StAXEvent2SAX.java:118)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:651)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)
at com.sun.org.apache.xerces.internal.jaxp.validation.StAXValidatorHelper.validate(StAXValidatorHelper.java:89)
at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(ValidatorImpl.java:114)
at javax.xml.validation.Validator.validate(Validator.java:127)


I am not able to figure out why the validation would work with UnMarshaller but not with StAX.
Any help appreciated.

Thanks
Meera
Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on Aug 12 2011
Added on May 19 2011
2 comments
3,560 views