Pourquoi ne pas JAXB permettre les annotations sur les méthodes de lecture qui tirent tous de la même variable de membre?
Pourquoi ne exemple Un travail, bien que l'exemple B lance un "JAXB annotation est placé sur une méthode qui n'est pas un JAXB propriété" exception?
Je suis à l'aide de JAX-WS avec Spring MVC.
Exemple Un
package com.casanosa2.permissions;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(name = "FooXMLMapper")
public class FooXMLMapper implements IFoo {
@XmlElement
private final boolean propA;
@XmlElement
private final boolean propB;
public FooMapper(IFoo foo) {
propA = foo.getPropA()
propB = foo.getPropB()
}
public FooMapper() {
propA = false;
propB = false;
}
@Override
public boolean getPropA() {
return propA;
}
@Override
public boolean getPropB() {
return propB;
}
}
Exemple B
@XmlAccessorType(XmlAccessType.PROPERTY)
@XmlType(name = "FooXMLMapper")
public class FooXMLMapper {
private final IFoo foo;
public FooMapper() {
foo = new IFoo() {
@Override
public boolean getPropA() {
return false;
}
@Override
public boolean getPropB() {
return false;
}
};
}
public FooXMLMapper(IFoo foo) {
this.foo = foo;
}
@XmlElement
public boolean getPropA() {
return foo.getPropA();
}
@XmlElement
public boolean getPropB() {
return foo.getPropB();
}
}
OriginalL'auteur Bernard Igiri | 2010-12-15
Vous devez vous connecter pour publier un commentaire.
Je crois que les accesseurs sont ignorés si elle est en train de regarder directement les variables d'instance et dans votre exemple B, il n'existe pas de variables d'instance de la droite nom. Vous devez indiquer explicitement à utiliser @XmlAccessorType(XmlAccessType.AUCUN) sur la classe et @XmlElement et @XmlAttribute sur les méthodes get/set. Au moins, c'est ce que j'ai fait avec mon JAXB cartographie.
Vous avez eu raison, en ajoutant XmlAccessType.AUCUN fixe. Maintenant, je n'ai pas à avoir idiot variables de membre de la duplication de données que j'ai déjà. 🙂
XmlAccessType.AUCUN ne fonctionne, mais il n'est pas correct. AUCUN signifie seulement la carte ce qui est explicitement annoté. Si vous utilisez le CHAMP ou une PROPRIÉTÉ, alors vous pouvez prendre avantage de défaut de paiement. Je crois toujours que votre question concerne la spécification de l'accès à la PROPRIÉTÉ, mais l'annotation des champs.
Je suis heureux, il a travaillé, bien que Blaise est juste que ce que vous aviez doit avoir travaillé avec les accesseurs et je me suis trompé. J'ai fini par utiliser XmlAccessType.AUCUN car j'ai eu beaucoup de propriétés (accesseurs) je ne voulais pas apparaître dans le fichier XML et certains je l'ai fait. Il était plus facile pour moi de dire AUCUN, puis spécifier explicitement celles que je voulais.
Blaise je ne suis pas sûr de suivre. Exemple B est celui qui a échoué et là, j'ai annoté les getters. Je n'ai pas d'annoter la variable membre depuis je ne voulais pas que dans le XML comme il n'est qu'une interface, et ne serait pas compris de toute façon.
OriginalL'auteur Chris Kessel
Je n'ai pas essayé ton code, mais c'est Un exemple qui semble mauvais, pas de B. Dans l'exemple que vous avez spécifié les accesseurs de propriété (méthodes get/set), mais vous avez annoté les champs de la classe à la place (variables d'instance).
OriginalL'auteur bdoughan
Je crois que pour être un bon JAXB de la propriété, vous devez les setters pour eux ainsi que les accesseurs. (vous auriez probablement besoin d'un constructeur par défaut).
De manière inverse, sûrement? (JAXB, fondamentalement, ne sait que sur annoté méthodes...).
Seulement getter = propriété d'écriture au format XML que comme il n'y a pas de setter à lire à partir de XML. Seulement setter = propriété de lecture à partir de XML que comme il n'y a pas de getter pour obtenir les données à écrire du XML.
J'ai constructeurs par défaut, il n'ajoute pas du genre à le WSDL du service web si vous n'en avez pas.
OriginalL'auteur Daniel Kulp