Comment valider l'encontre de schéma dans JAXB 2.0 sans triage?
J'ai besoin de valider mon JAXB objets avant le regroupement pour un fichier XML. Avant JAXB 2.0, on peut utiliser un javax.xml.bind.Programme de validation. Mais qui a été abandonné, donc je suis à essayer de comprendre la bonne façon de le faire. Je suis familier avec la validation de marshall temps, mais dans mon cas, je veux juste savoir si la validité de son. Je suppose que je pourrais marshall à un fichier temporaire ou de la mémoire et de la jeter, mais vous demandez si il y a une solution plus élégante.
Vous devez vous connecter pour publier un commentaire.
Tout d'abord,
javax.xml.bind.Validator
a été dépréciée en faveur dejavax.xml.validation.Schema
(javadoc). L'idée est que vous analysez votre schéma via unjavax.xml.validation.SchemaFactory
(javadoc), et de les injecter dans le marshaller/unmarshaller.Comme pour votre question concernant la validation sans triage, le problème ici est que JAXB réalité des délégués de la validation de Xerces (ou n'importe quel SAX processeur que vous utilisez), et Xerces valide votre document sous forme d'un flux d'événements SAX. Donc, afin de les valider, vous avez besoin pour effectuer certains genre de regroupement.
Le plus faible impact de la mise en œuvre de ce qui serait d'utiliser un "/dev/null" la mise en œuvre d'un SAX processeur. Le regroupement pour un null OutputStream nécessiterait quand même génération XML, ce qui est un gaspillage. Donc, je vous suggère:
DefaultHandler
va rejeter tous les événements, et lamarshal()
opération de jeter un JAXBException si la validation par rapport au schéma échoue.DefaultHandler
à partir de? C'est à partir deorg.xml.sax.helpers
?Vous pouvez utiliser un
javax.xml.bind.util.JAXBSource
(javadoc) et unjavax.xml.validation.Validator
(javadoc), de lancer la mise en œuvre deorg.xml.sax.ErrorHandler
(javadoc) et effectuez les opérations suivantes:Pour Plus D'Informations, Voir Mon Blog
Ce comment nous l'avons fait. J'ai dû trouver un moyen de valider le fichier xml par rapport à un xsd correspondant à la version du xml depuis, nous avons de nombreuses applications en utilisant différentes versions du contenu xml.
Je ne trouve pas vraiment de bons exemples sur le net et enfin fini avec cette. Espérons que cela aidera.