2017-08-17 2 views
8

Wenn Sie ganze XML mit JAXB entpacken, können Sie XML-Schema festgelegt Validierung während Parsing zu aktivieren:JAXB Schema-Validierung, wenn unmarshalling Nicht-Root-Element

//javax.xml.validation.Schema schema = ... 
jaxbUnmarshaller = JAXBContext.newInstance(SomeRootType.class).createUnmarshaller(); 
jaxbUnmarshaller.setSchema(schema); 

Auf der anderen Seite, wenn Sie Abstellungs Liste der NestedObjest s von XML, einer nach dem anderen versagt diese Methode (. zB Speicherverbrauch verringern) mit einer Ausnahme (als Schema root akzeptiert nur):

org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 22; cvc-elt.1: Cannot find the declaration of element 'NestedObject' 
in der XSD

Es schlägt fehl, auch wenn NestedObjectType ist gut definiert. Gibt es eine Option zum Aktivieren der Validierung geschachtelter Objekte? Bitte beachten Sie, dass das Definieren eines neuen Schemas eine miserable Option ist, da das XSD extern für meine Anwendung ist, die von jemand anderem verwaltet wird.

+3

könnten Sie einige Beispiel-Eingabe, wo dieser Fehler auftritt? –

Antwort

0

Haben Sie versucht, unmarshal Methode die Klasse der gebundenen Bohne zu übergeben? Wie erklärt in Example 65. Unmarshalling into a known type

+0

tat ich. Funktioniert nicht. – jaskmar

+0

Können Sie die Quell-XML ändern? zB: add xsi: type Attribut –

+0

Ich kann XML/Schema nicht ändern. In dem von Ihnen verlinkten Beispiel ist keine Validierung aktiviert. – jaskmar

Verwandte Themen