web-dev-qa-db-fra.com

Comment valider un XML par rapport à un schéma à l'aide de JAXB?

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"));
14
AKIWEB

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:

22
bdoughan