2009-04-30 15 views
19

Apparentemente nella versione 2 di JAXB - la classe di validatore è stata deprecata - questo significa che il marshaller sta automaticamente convalidando il tuo XML? Se è così, non sembra che si stia lamentando di qualche XML errato che sto formando! Qualcuno può darmi qualche consiglio su come posso convalidare l'XML marshalled per assicurarmi che sia conforme allo schema XSD.Si può convalidare un XML marshalled con JAXB 2.0?

Molte grazie.

risposta

27

funzionalità di convalida sono stati ampliati in JAXB 2.0 attraverso l'uso del JAXP 1.3 Schema Validation Framework.

Dove prima di te:

unmarshaller.setValidating(true); 

Ora è necessario fare:

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

Se si passa null in setSchema, disabilita la convalida.

Si prega di verificare this reference.

+1

si fa a mettere lo stesso codice per un marshaller - questo codice sembra che sia per un ... unmarshaller – Vidar

+1

Sì. Puoi fare esattamente la stessa cosa per marshaller e unmarshaller. –

2

Se siete alla ricerca di verificare gli oggetti Java generano XML valido secondo uno schema, guarda il progetto JAXB-verifica:

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

Si tratta di un plugin JAXB RI XJC che genererà un Implementazione ObjectVerifier per lo schema XML. Questo evita di dover effettuare il marshalling degli oggetti Java per convalidare l'XML.

Problemi correlati