【发布时间】:2012-01-20 15:09:58
【问题描述】:
似乎可以解组两个不同具有相同名称的jaxb对象。
有一个Bar 类...
public abstract Bar {
private @XmlElement String val;
}
.. 有两个实现(构造函数等被省略):
@XmlRootElement(name="bar")
public class BarA extends Bar { }
@XmlRootElement(name="bar")
public class BarB extends Bar {
private @XmlElement(required=true) String type;
}
最后,我想从 XML 中解组 Bar 文档列表,类似于以下内容
<bars>
<bar>
<val>1</val>
</bar>
<bar>
<val>1</val>
<type>2</type>
</bar>
</bars>
列表被包装在一个使用@XmlAnyElement的类中
@XmlRootElement
public class Bars {
@XmlMixed
@XmlAnyElement(lax = true)
@XmlElementRefs({@XmlElementRef(BarA.class), @XmlElementRef(BarB.class)})
private List<Bar> bars;
}
但我似乎仅获得了 either BarA 或 BarB 的实例,以 @987654333 中的 last 元素为准@ 链。
测试代码:
String xml = ...
JAXBContext jc = JAXBContext.newInstance(Bars.class);
ByteArrayInputStream in = new ByteArrayInputStream(xml.getBytes());
Bars bars = (Bars) jc.createUnmarshaller().unmarshal(in);
for (Bar bar : bars.getBars()) {
System.out.println(bar.getClass());
}
我认为JAXB @XmlElements, different types but same name? 中建议的XmlAdapter 也不一定是唯一的方法。
【问题讨论】: