我目前在我的项目中有这个环境:
public abstract class Foo {
private List<Thing> things;
public List<Thing> getThings() { return this.things; }
}
public abstract class Bar extends Foo {
@XmlElements({@XmlElement(name = "first", type = First.class)})
public List<Thing> getThings() { return super.getThings(); }
}
public class Bobar extends Bar {
@XmlElements({@XmlElement(name = "second", type = Second.class)})
public List<Thing> getThings() { return super.getThings(); }
}
对于以下 XML 文档
<bobar>
<first>blablabla</first>
<second>blublublu</second>
</bobar>
当我做
context = JAXBContext.newInstance("the.package.structure");
unmarshaller = context.createUnmarshaller();
Bar object = (Bar) unmarshaller.unmarshal("path-to-xml-document");
Barobject
在集合中只有一个元素,而不是 2。该First
元素完全丢失,当我尝试这样做时object.getThings()
,它的大小为 1,集合中唯一的对象是Second
. 有人可以帮助我如何获得集合中的两个对象吗?如果那不可能,我怎样才能实现类似的目标?
我这样做的原因是(在我的项目逻辑中)每个Bobar
s things 集合First
在它的集合中都有一个,但不是每个在它的集合中Bar
都有一个Second
,并且Foo
是一个泛型类。
编辑:
当我更改 XML 文档中的顺序时,输出会有所不同。
<bobar>
<second>blablabla</second>
<first>blublublu</first>
</bobar>
在这种情况下,我只得到First
集合中的一个实例,并且Second
丢失了。并且更多地改变场景,我得到了有趣的结果:
public abstract class Foo {
private List<Thing> things;
public List<Thing> getThings() { return this.things; }
}
public abstract class Bar extends Foo {
@XmlElements({@XmlElement(name = "first", type = First.class), @XmlElement(name = "third, type = Third.class)})
public List<Thing> getThings() { return super.getThings(); }
}
public class Bobar extends Bar {
@XmlElements({@XmlElement(name = "second", type = Second.class)})
public List<Thing> getThings() { return super.getThings(); }
}
如果我做
<bobar>
<third>bliblibli</third>
<second>blablabla</second>
<first>blublublu</first>
</bobar>
理论上,我认为这不应该针对由此生成的 XML Schema 进行验证,因为这里的顺序不正确。但除此之外,在这种情况下,我得到Second
and First
,Third
丢失了。