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
Code : Sélectionner tout - Visualiser dans une fenêtre à part
@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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.