Как я могу динамически создать псевдоним в коллекции в XStream

У меня довольно сложное дерево объектов (в основном пытаюсь сериализовать объекты в XML). Объекты могут содержать другие объекты того же или другого типа и т. д.

В любом случае, я аннотировал псевдоним для каждого класса, и до определенной степени он работает хорошо. Когда уровень вложенности превышает 3, псевдонимы перестают работать.

Например, у меня есть

  private List<Object> values = new ArrayList<>();

Он содержит объекты с аннотированным псевдонимом. Но они здесь больше не работают, я получаю общее название класса.

Если я аннотирую что-то вроде этого

  @XStreamAlias(value = "value-date", impl = ValueDate.class)
  private List<Object> values = new ArrayList<>();

это работает, но я не могу использовать аннотацию несколько раз. В идеале я бы сделал следующее:

  @XStreamAlias(value = "value-text", impl = ValueText.class)
  @XStreamAlias(value = "value-boolean", impl = ValueBoolean.class)
  @XStreamAlias(value = "value-date", impl = ValueDate.class)
  private List<Object> values = new ArrayList<>();

я бы ожидал что-то вроде

  <values>
    <value-date>1999-08-31</value-date>
  </values>

Но я получаю

  <values>
    <sql-date>1999-08-31</sql-date>
  </values>

Мой класс выглядит так

@XStreamAlias("value-date")
@XStreamConverter(value = ToAttributedValueConverter.class, strings = { "date" })
public class ValueDate {

  private Date date;

Надеюсь, понятно, что я пытаюсь сказать :-)

Я только начал с XStream, потому что JAXB сводил меня с ума ;-)

Спасибо за любую подсказку!


person eerriicc    schedule 10.04.2015    source источник


Ответы (1)


ОК, я обнаружил ошибку: я пытался поместить java.sql.Date непосредственно в свой список, а не обернуть его в ValueDate.

Теперь все работает как положено.

person eerriicc    schedule 13.04.2015