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
@XmlElement(required = true)
, mais tout fonctionne bien si je les omets. Sauf que le XML produit n'est pas valide.
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:
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); |
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).
Merci.
Partager