Je travaille avec XML
et JAXB
car je désarchive et rassemble le XML en Java objets et vice versa. Maintenant j'essaie de valider notre XML contre notre schéma (test.xsd). Supposons que s'il manque un champ obligatoire dans mon XML, je voudrais savoir quel champ est manquant après avoir validé le XML par rapport au schéma test.xsd.
public void unmarshal(final InputStream is) {
final XMLInputFactory factory = XMLInputFactory.newInstance();
final XMLStreamReader reader = factory.createXMLStreamReader(is);
Object req = unmarshaller.unmarshal(reader);
// how would I validate here?
}
Comment valider mon XML par rapport au schéma test.xsd. Mon chemin de schéma test.xsd est -
C:\workspace\one\two\three\src\main\Java\com\package\serv\ap\versionOne\test.xsd
MISE À JOUR: chargement de test.xsd comme:
Schema schema = factorySchema.newSchema(new File("C:\\workspace\\one\\two\\three\\src\\main\\Java\\com\\package\\serv\\ap\\versionOne\\test.xsd"));
Il vous suffit de définir une instance de javax.xml.validation.Schema
sur le Unmarshaller
avant de faire le démarshal. Vous pouvez spécifier une implémentation de ValidationEventHandler
sur le Unmarshaller
pour détecter tous les problèmes qui surviennent pendant le processus de démarshal.
Pour plus d'informations
J'ai écrit plus sur ce cas d'utilisation sur mon blog: