2017-08-17 2 views
8

Lorsque vous unmarshal XML entier avec JAXB, vous pouvez définir le schéma XML pour permettre la validation lors de l'analyse syntaxique:JAXB validation de schéma lorsque unmarshalling élément non-root

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

D'autre part, lorsque vous liste unmarshal de NestedObjest s à partir de XML, un par un (. par exemple, pour diminuer l'utilisation de la mémoire), cette méthode échoue (comme le schéma accepte uniquement la racine) avec une exception:

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

Il échoue même si NestedObjectType est bien défini dans le XSD. Existe-t-il une option pour activer la validation d'objet imbriqué? S'il vous plaît noter que la définition de nouveau schéma est une option misérable que le XSD est externe pour mon application maintenue par quelqu'un d'autre.

+3

pourriez-vous fournir un exemple d'entrée, où cette erreur se produit? –

Répondre

0

Avez-vous essayé de passer à la méthode unmarshal la classe du haricot lié? Comme expliqué dans Example 65. Unmarshalling into a known type

+0

Je l'ai fait. Ne fonctionne pas – jaskmar

+0

Pouvez-vous modifier le fichier XML source? par exemple: add xsi: type attribute –

+0

Je ne peux pas modifier xml/schema. Dans l'exemple, vous n'avez pas de validation activée. – jaskmar