Comment ignorer JAXB annoté propriétés d'une classe parent?
Nous avons une classe avec un JAXB annotation sur une propriété. Nous avons ensuite plusieurs sous-classes qui annoter le reste des données importantes. Nous avons une sous-classe, cependant, où nous voulons ignorer la classe parent d'annotation, de sorte qu'il n'obtient pas muselé. Voici un exemple de code.
Classe Parent:
@XmlType(name="Request")
@XmlAccessorType(XmlAccessorType.NONE)
public abstract class Request {
@XmlElement(required=true)
private UUID uuid;
... setter/getter
}
Maintenant, pour la sous-classe:
@Xsd(name="concreteRequest")
@XmlRootElement("ConcreteRequest")
@XmlType(name="ConcreteRequest")
@XmlAccessorType(XmlAccessorType.FIELD)
public class ConcreteClass {
@XmlElement(required=true)
private String data1;
@XmlElement(required=true)
private String data1;
... setters/getters ...
}
Quand je masrhall une instance de ConcreteClass-je obtenir le code XML suivant:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<uuid>uuid</uuid>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
Où je veux XML comme ceci:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConcreteRequest>
<data1>data</data1>
<data2>data</data3>
</ConcreteRequest>
Nous avons d'autres implémentations de la Demande, mais qui ne requièrent l'UUID, c'est juste un cas particulier. Est-il possible d'ignorer l'UUID de champ dans ma ConcreteRequest?
OriginalL'auteur prozaak | 2012-10-01
Vous devez vous connecter pour publier un commentaire.
Je l'espère, j'ai compris votre problème. Voici la solution.
JAXB fournit
@XmlTransient(javax.xml.bind.annotation.XmlTransient)
(javadoc) à ignorer le terrain lors de la sérialisation.De remplacer le champ "uuid" comme @XmlTransient dans votre classe dérivée (ConcreteRequest.class), ainsi que ses correspoding de lecture/définition de la méthode. Il est nécessaire de remplacer les Getter/Setter aussi, être invoquée au cours de la sérialisation.
Cela va remplacer votre Base de l'attribut de Classe.
De revenir vers moi pour plus d'informations.
À partir de mon analyse, JAXB ne fournit pas une solution appropriée pour vos besoins, Ce que je suggère, c'est d'utiliser le JAXB comportement - "les valeurs Null élément sera ignorée lors de l' @XmlElement(nillable=false)". De sorte que, au moment de la composition des trains, la valeur "uuid" explicitement nulle, de sorte qu'il ne va pas construire la propriété lors de la Sérialisation. J'ai un exemple de morceau de code, mais ne pouvaient pas partager ici.
Cela ne fonctionne tout simplement pas.
OriginalL'auteur omega
Vous pouvez utiliser
sur la classe parent, et
sur la classe dérivée.
OriginalL'auteur Roberto