2010-02-20 4 views
10

L'utilisation de @XStreamOmitField dans mon POJO semble n'avoir aucun effet. le champ annoté est toujours exposé dans la représentation xml ou json.en utilisant RESTlet, les annotations XStream semblent n'avoir aucun effet

@XStreamAlias("Pojo") 
@Entity 
public class Pojo { 
    private String name; 

    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Long key; 

    @XStreamOmitField 
    private String hidden; 

    public Pojo(String name, String hidden) { 
     this.name = name; 
     this.hidden = hidden; 
    } 
} 

et dans le ServerResource

@Get 
public Pojo test() { 
    Pojo pj= new Pojo("hansi","hinter"); 
    return pj; 
} 

moi obtient

<com.myComp.ORMTest.Pojo> 
    <name>hansi</name> 
    <hidden>hinter</hidden> 
</com.myComp.ORMTest.Pojo> 

Toutes les idées pourquoi les annotations sont ignorées?

+0

Ok, cela ne semble pas être le seul problème pour faire fonctionner GAE, RESTlet et XStream. Je cherche une autre solution maintenant. – chaos0815

Répondre

14

Vous devez dire XStream pour traiter explicitement annotations:

XStream xstream = new XStream(); 
xstream.processAnnotations(MyClass.class); 

Ou, vous devez ajouter ce code à dire XStream pour traiter toutes les annotations:

xstream.autodetectAnnotations(true); 
+1

Juste une note pour les autres demandeurs: la détection automatique des annotations ne fonctionne que pour la sérialisation, * pas * la désérialisation. Vous devez traiter chaque classe (ou un tableau d'entre eux) afin d'analyser XML. –

2

Deux choses viennent à l'esprit:

1.) Avez-vous dit XStream pour analyser les annotations? 2. Votre site web utilise-t-il des proxies pour accéder aux pojos et ceux-ci ne délèguent pas les annotations? (Qui est arrivé à un ami avec Apache Tapestry)

+0

De bonnes pistes. Va commencer à creuser dans cette direction. Merci – chaos0815

Questions connexes