Управление @XStreamAlias ​​для ссылки на интерфейс - PullRequest
0 голосов
/ 26 ноября 2018

Я новичок в xstream и столкнулся с одной ситуацией, как показано ниже.

<root>
 <category>
   <car></car>
   <cloth></cloth>   
 </category>
</root>

Это мой демонстрационный XML.Здесь категория может иметь либо car, либо cloth в качестве подузла, но не оба одновременно.Мне нужна помощь о том, как определить класс POJO для этой ситуации.Я пробовал этот способ.

@XStreamAlias("root")
public class Root {

    @XStreamAlias("category")
    private Category category;

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }
}

Здесь Category - это интерфейс, который реализуется классами Car и Cloth.

Реализация для класса Cloth приведена ниже.

@XStreamAlias("cloth")
public class Cloth implements Category {

    @XStreamAlias("name")
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


Root r = new Root();
Cloth c = new Cloth();
c.setName("xyz");
r.setCategory(c);

String xmll = XStreamUtil.toXml(r);
System.out.println(xmll);

Что привело к следующему выводу.

<root>
  <category class="cloth">
    <name>xyz</name>
  </category>
</root>

желаемый вывод такой, как показано ниже

<root>
  <category>
    <cloth>
        <name>xyz</name>
    </cloth>    
  </category>
</root>
...