Bonjour,
partant de XSD, j'ai utilisé xjc/jaxb afin d'obtenir un ensemble de classes Java qui correspond au XML que je dois produire. Ces classes (générées par xjc/jaxb) sont bourrées d'annotations afin de savoir que tel attribut est obligatoire, que tel attribut se trouve avant tel autre, etc., afin de produire un fichier XML (presque) valide.
Je parviens à marshaller correctement mes objets, qui font de jolis XMLs pour pas cher.
Ce que je n'arrive pas à faire c'est que JAXB, d'une façon ou d'une autre, me valide le contenu de mes classes avant de générer le XML. Certains attributs sont annotés, mais tout fonctionne bien si je les omets. Sauf que le XML produit n'est pas valide.Code:@XmlElement(required = true)
Ma question: comment puis-je valider mes données avant/pendant la marshalisation?
Voici un code qui produit du XML mais ne valide rien du tout:
Je comprends bien que toutes les infos des XSD ne se retrouvent pas dans les classe générées par xjc/jaxb (par exemple les plages de valeurs).Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 final JAXBContext ctxt = JAXBContext.newInstance("mon.package.root.xml"); // create a Marshaller and marshal to System.out final Marshaller marshaller = ctxt.createMarshaller(); marshaller.setEventHandler(new ValidationEventHandler() { public boolean handleEvent(final ValidationEvent event) { System.out.println(event.getMessage()); return false; } }); // pour faire joli marshaller.setProperty("jaxb.formatted.output", Boolean.TRUE); // crée le XML. "msg" est l'objet qui deviendra l'élément racine du XML marshaller.marshal(msg, System.out);
Merci.