Как мога да създам динамично псевдоним в колекция в 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