Castor: de A à Z
Génération des beans
En suivant la convention de maven, j’ai placé mon XSD dans main/castor.
Ma fonction toXML() fait maintenant appel au Marshaller de Castor:
[java]
public String toXML(Object obj) throws IOException, MarshalException, ValidationException {
StringWriter w = new StringWriter();
Marshaller marshaller = new Marshaller(w);
marshaller.marshal(obj);
return w.toString();
}
[/java]
et le Unmarshaller aussi, qui pour l’occasion ne sait plus travailler qu’avec un objet ‘Settings’ (d’où son changement de nom)
[java]
public Settings loadSettings(Reader xmlSettingsReader) throws MarshalException, ValidationException {
Unmarshaller um=new Unmarshaller(Settings.class);
return (Settings) um.unmarshal(xmlSettingsReader);
}
[/java]
Petit problème avec Castor
Je relance mes tests unitaires (mvn test). Et bam, tout est cassé. Castor n’indente pas le xml comme XStream. Ce n’est rien: je change mes constantes de test.
Je relance mes tests et rebam. Mon problème c’est que Castor sérialise l’élément racine avec une majuscule.
Par exemple, au lieu d’avoir
[xml]
[/xml]
Castor génère à la place
[xml]
[/xml]
J’ai contourné le problème de la façon suivante
[java]
public String toXML(Object obj) throws IOException, MarshalException, ValidationException {
StringWriter w = new StringWriter();
Marshaller marshaller = new Marshaller(w);
//FIXME Castor generates
marshaller.setRootElement(« settings »);
marshaller.marshal(obj);
return w.toString();
}
[/java]
Cepedant, j’aimerais bien comprendre ce qui se passe. À suivre…;