2010-02-20 2 views
10

Использование @XStreamOmitField в моем POJO, похоже, не имеет никакого эффекта. аннотированное поле по-прежнему отображается в представлении xml или json.с использованием RESTlet, аннотации XStream, похоже, не имеют эффекта

@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; 
    } 
} 

и в ServerResource

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

получает меня

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

Любые идеи, почему аннотации игнорируются?

+0

Хорошо, это, похоже, не единственная проблема при совместном использовании GAE, RESTlet и XStream. Сейчас я ищу другое решение. – chaos0815

ответ

14

Вы должны сказать XStream явно обрабатывать аннотации:

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

Или, вы должны добавить этот код, чтобы сказать XStream обрабатывать все аннотации:

xstream.autodetectAnnotations(true); 
+1

Просто примечание для других искателей: автоматическое обнаружение аннотаций работает только для сериализации, * не * десериализации. Вы должны обрабатывать каждый класс (или массив из них) для анализа XML. –

2

Две вещи приходят на ум:

1.) Вы сказали XStream для разбора аннотаций?

2.) Может ли ваша веб-среда использовать прокси для доступа к pojos, и те, кто не делегируют аннотации? (Случился с другом с помощью Apache Гобелен)

+0

Отличные выводы. Начнется копать в этом направлении. Спасибо – chaos0815

Смежные вопросы