2010-01-04 3 views
2

Как сообщить Xstream о сериализации только полей, которые явно аннотируются и игнорировать остальные?Xstream: неявное игнорирование всех полей

Я пытаюсь сериализовать постоянный объект hibernate, и все поля, связанные с прокси, становятся сериализованными, что мне не нужно в моем xml.
, например.

<createdBy class="com..domain.Users " reference="../../values/createdBy"/> 

Это не то, что я хочу в своем xml.

Редактировать: Не думаю, что я поставил этот вопрос ясным. Класс может наследовать от базового класса, на котором у меня нет контроля (как в случае спящего режима) в свойствах базового класса.

public class A { 
    private String ShouldNotBeSerialized; 
} 

public class B extends A { 
    @XStreamAlias("1") 
    private String ThisShouldbeSerialized; 
} 

В этом случае, когда я сериализации класса B, поле базового класса ShouldNotBeSerialized также получить сериализации. Это не то, что я хочу. В большинстве случаев я не буду иметь контроль над классом А.

Поэтому я хочу опускают все поля по умолчанию и сериализовать только те поля, для которых я явно указать аннотации. Я хочу избежать того, что делает GaryF, где мне нужно явно указать поля, которые мне нужно опустить.

+0

Вы достигли этого? Если да, можете ли вы отправить ответ. У меня такая же проблема –

ответ

3

Вы можете omit fields с аннотацией @XstreamOmitField. Прямо из руководства:

@XStreamAlias("message") 
class RendezvousMessage { 

    @XStreamOmitField 
    private int messageType; 

    @XStreamImplicit(itemFieldName="part") 
    private List<String> content; 

    @XStreamConverter(SingleValueCalendarConverter.class) 
    private Calendar created = new GregorianCalendar(); 

    public RendezvousMessage(int messageType, String... content) { 
     this.messageType = messageType; 
     this.content = Arrays.asList(content); 
    } 
} 
+0

Не забудьте вызвать autodetectAnnotations (true) в вашем экземпляре XStream, если вы используете аннотации. – Sly

+0

Я не думаю, что это отвечает на вопрос ОП. Он хочет «неявно» опускать без явного аннотирования каждого поля. См. Мой ответ ниже для другого варианта. –

1

Я думаю, единственный прямой путь, чтобы погрузиться в написание MapperWrapper и исключить все поля, которые вы не аннотированные. Звучит как запрос функции для XStream.

2

Был уже билет на людей XSTREAM:

Опять же, это дизайн. XStream - это инструмент сериализации, а не инструмент привязки данных . Это делается для сериализации объектов Java в XML и обратно. Он напишет что-нибудь в XML, что необходимо для воссоздания равного графа объектов. Сгенерированный XML может быть изменен до некоторой степени на конфигурацию для удобства, но это уже дополнение. То, что вы делаете , может быть сделано путем реализации пользовательского сопоставления, но это вопрос для списка пользователей и не может быть обработан здесь.

http://jira.codehaus.org/browse/XSTR-569

2

Я не могу принять никакого кредита за этот ответ, просто делюсь, что я нашел. Вы можете переопределить метод wrapMapper класса XStream для достижения того, что вам нужно.

Эта ссылка подробно объясняет: http://pvoss.wordpress.com/2009/01/08/xstream/

Вот код, вам нужно, если вы не хотите объяснения:

Вы могли бы хотеть сделать все ваши испытания, прежде чем применять этот код потому что исключения, вызванные объектом XStream по умолчанию, полезны для поиска орфографических ошибок.

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