2009-04-30 4 views
19

Offenbar in der Version 2 von JAXB - die Validator-Klasse ist veraltet - heißt das, der Marshaller validiert automatisch Ihre XML? Wenn es so ist, scheint es sich nicht über einige der falschen XML zu beschweren, die ich formiere! Kann mir jemand einen Rat geben, wie ich Marshalled-XML validieren kann, um sicherzustellen, dass es dem XSD-Schema entspricht?Kann man Marshall-XML mit JAXB 2.0 validieren?

Vielen Dank.

Antwort

27

Die Validierungsfunktionen wurden in JAXB 2.0 durch die Verwendung des JAXP 1.3 Schema Validation Framework erweitert.

Wo, bevor Sie tat:

unmarshaller.setValidating(true); 

jetzt müssen Sie tun:

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

Wenn Sie in setSchema null übergeben, es Validierung deaktiviert.

Bitte überprüfen Sie this reference.

+1

Haben Sie den gleichen Code für einen MARSHALLER - dieser Code sieht aus wie für einen UNMARSHALLER ... – Vidar

+1

Ja. Sie können das gleiche für Marshaller und Unmarshaller tun. –

2

Wenn Sie schauen, die Java-Objekte erzeugen gültige XML gemäß einem Schema, Blick auf die JAXB-Verification-Projekt zu überprüfen:

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

Es ist ein JAXB RI Plugin xjc das wird ein generieren ObjectVerifier-Implementierung für das XML-Schema. Dies vermeidet, dass die Java-Objekte marshale werden müssen, um das XML zu validieren.