似乎可以解组两个不同的 jaxb
具有相同的对象name.
有一个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;
}
最后我想解组一个列表Bar
来自 XML 的文档类似于以下内容
<bars>
<bar>
<val>1</val>
</bar>
<bar>
<val>1</val>
<type>2</type>
</bar>
</bars>
该列表被包装在一个类中,使用@XmlAnyElement http://docs.oracle.com/javaee/5/api/javax/xml/bind/annotation/XmlAnyElement.html
@XmlRootElement
public class Bars {
@XmlMixed
@XmlAnyElement(lax = true)
@XmlElementRefs({@XmlElementRef(BarA.class), @XmlElementRef(BarB.class)})
private List<Bar> bars;
}
然而我似乎only获取实例either BarA
or BarB
,以last中的元素@XmlElementRefs
chain.
测试代码:
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());
}
我不认为XmlAdapter
建议在JAXB @XmlElements,不同类型但名称相同? https://stackoverflow.com/questions/5007516/jaxb-xmlelements-different-types-but-same-name也必然是唯一的方法。