How should I use Stax2 Validation API against a W3 Schema

1.7k views Asked by At

I am using com.ctc.wstx.stax.WstxOutputFactory to generate XML. I am running wstx-asl-3.2.4

I need to start validating the generated XML against a W3 Schema.

When I create an instance of org.codehaus.stax2.validation.XMLValidationSchemaFactory like this

private final static XMLValidationSchemaFactory xsdFact= XMLValidationSchemaFactory.newInstance(XMLValidationSchema.SCHEMA_ID_W3C_SCHEMA);

I get the error

javax.xml.stream.FactoryConfigurationError: No XMLValidationSchemaFactory implementation class specified or accessible (via system property 'org.codehaus.stax2.validation.XMLValidationSchemaFactory.w3c', or service definition under 'META-INF/services/org.codehaus.stax2.validation.XMLValidationSchemaFactory.w3c') at org.codehaus.stax2.validation.XMLValidationSchemaFactory.newInstance(XMLValidationSchemaFactory.java:208) at org.codehaus.stax2.validation.XMLValidationSchemaFactory.newInstance(XMLValidationSchemaFactory.java:98)

I can see that woodstox is bundled with a DTD parser only. I found this article which contains the unhelpful instruction

  1. Get an instance of XMLValidationSchemaFactory that knows how to parse schemas of the type you need (RelaxNG == rng for this example).

I have been looking at the Sun Multi-Schema XML Validator which is supposed to contain the bits necessary to bolt on to the XMLSchemaValidation factory.

It looks like I might be able to use com.sun.msv.reader.xmlschema.XMLSchemaReader to write my own instance of XMLValidationSchemaFactory and get it to work this way.

My question is; do I really have to do this, or is there a pre-existing w3c schema factory that I have failed to find?

Perhaps it would be simpler just to validate the XML after I have generated it.

What are the views on this ?

1

There are 1 answers

1
Ben Hammond On BEST ANSWER

I've upgraded to Woodstox 4.0.8, W3CSchemaFactory comes bundled and its all good.