views:

3030

answers:

2

Apparently in version 2 of JAXB - the validator class has been deprecated - does this mean the marshaller is automatically validating your XML? If so it doesn't seem to be complaining about some of the incorrect XML I am forming! Can anyone give me some advice on how I can validate marshalled XML to make sure it conforms to the XSD schema.

Many thanks.

+8  A: 

Validation capabilities have been expanded in JAXB 2.0 through the use of the JAXP 1.3 Schema Validation Framework.

Where before you did:

unmarshaller.setValidating(true);

now you need to do:

SchemaFactory sf = SchemaFactory.newInstance(
 javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File("myschema.xsd"));
unmarshaller.setSchema(schema);

If you pass null into setSchema, it disables validation.

Please check this reference.

bruno conde
Do you put the same code for a MARSHALLER - this code looks like it's for an UNMARSHALLER...
Vidar
Yes. You can do the exact same thing for marshaller and unmarshaller.
bruno conde
A: 

If you are looking to verify the Java objects generate valid XML according to a schema, look at the JAXB-Verification project:

https://jaxb-verification.dev.java.net/

It is a JAXB RI plugin to xjc that will generate an ObjectVerifier implementation for the XML schema. This avoids having to marshal the Java objects in order to validate the XML.

Eric Bronnimann