Rien de spécial
Le blog de Régis

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 instead of

marshaller.setRootElement(« settings »);

marshaller.marshal(obj);

return w.toString();

}

[/java]

Cepedant, j’aimerais bien comprendre ce qui se passe. À suivre…;