Je ne sais pas si ma solution est très élégante mais je crois que cela fonctionne comme vous le souhaitez.
Tenir compte classe Test
avec une propriété p
de type java.awt.Point
:
@XmlRootElement
public class Test {
@XmlElement
@XmlJavaTypeAdapter(PointAdapter.class)
public Point p;
}
La classe PointAdapter
est la suivante:
class PointAdapter extends XmlAdapter<String, Point> {
@Override
public String marshal(Point v) throws Exception {
return String.format("%d;%d", v.x, v.y);
}
@Override
public Point unmarshal(String v) throws Exception {
String[] coords = v.split(";");
return new Point(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]));
}
}
Si vous ne créez pas vos classes Java à la main, mais laissez-les générer par xjc
il est possible de spécifier le XmlAdapter
dans le schéma aussi; soit via un fichier de liaison séparé que vous pouvez spécifier avec l'option -b
de xjc
ou incorporé dans votre XSD. Personnellement je préfère la première solution car cela garde le schéma propre. Depuis un certain temps depuis que j'ai joué avec ce que je vous renvoie à la JAXB documentation (chercher MyDatatypeConverter, ce devrait être la partie la plus pertinente).
Merci! Je vais essayer. – fli