2011-08-02 2 views
1

Je convertis un POJO existant pour qu'il soit compatible avec JAXB. Tout fonctionne bien sauf pour l'une des méthodes getter du pojo où j'ai besoin d'une logique supplémentaire spécifique au rendu XML. Cependant, ce getter est déjà appelé quelque part dans l'application et je ne peux pas modifier le comportement de cette méthode. Comment traiter normalement de telles collisions de noms de méthodes? Existe-t-il un moyen de créer une méthode séparée juste pour le but de JAXB et de marquer le currentmethod comme XMlTransient?Collision de méthode entre JAXB et le reste de l'application

Merci

Répondre

2

Oui, exactement ce que vous avez dit fonctionnerait. Faites une méthode @XmlTransient, puis écrivez une autre méthode et faites-en un @XmlElement (name = "quel que soit le nom de l'élément").

+0

Je reçois maintenant une erreur liée au changement: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 2 chefs de IllegalAnnotationExceptions propriété element1 (qui JAXB dérive de ma nouvelle méthode de lecture) est présent mais non spécifié dans @ XmlType.propOrder – phewataal

+0

vient de réaliser que je devais utiliser la propriété dérivée du getter comme nom de propriété dans la liste propOrder. – phewataal

2

Vous pouvez mettre XmlAccessorType (XmlAccessType.FIELD) sur la classe. Ensuite, les annotations JAXB seront récupérées à partir des noms de champs, et non des noms de méthodes. Par exemple:

@XmlAccessorType(XmlAccessType.FIELD) 
public class MyType { 
    @XmlElement String f1; 
    @XmlElement Integer f2; 

    // JAXB doesn't care about these: 
    public String getF1() {return f1;} 
    public String getF2() {return f2;} 
    public void setF1(String f1) {this.f1 = f1;} 
    public void setF2(Integer f2) {this.f2 = f2;} 
} 
+0

Je voulais seulement que le comportement de champ pour le champ f1 et pas le reste des propriétés. Y a-t-il un moyen de définir XmlAccessType.FIELD au niveau du champ plutôt qu'au niveau de la classe? – phewataal

+0

Merci Blaise. Oui, j'ai fini par faire ce que tu as suggéré. – phewataal

Questions connexes