)
我有一个 xmlelement 可以来自不同的类型。与类型无关,它具有相同的名称。它可以是一个对象,也可以只是通过 URI 对现有对象的引用。我认为 xmlElements 可能是解决方案。编组工作正常,但通过解组它,它每次都会选择最后一个给定的类类型。
包含元素的类 Flower
@XmlRootElement(name = "Flower")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "id", "name", "refName", "description", "created", "updated", "color",
"seed")
public class Flower extends CommonElements{
private string color;
@XmlElements({
@XmlElement(name="seed", type=Seed.class),
@XmlElement(name="seed", type=Reference.class)
})
public Object seed;
}
作为元素可以包含的类型之一的类种子
@XmlRootElement(name = "Seed")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "id", "name", "refName", "description", "created", "updated",
"category", "country"})
public class Seed extends CommonElements{
protected String category = "";
protected String country = "";
}
以及元素可以包含的其他类
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Reference {
@XmlAttribute(name="href")
protected URI href;
}
在 CommonElements 中只是一些通用元素,如 id、refName、description 等。XML 看起来像
<Flower>
<id>http://localhost/test/flowers/1</id>
<refName>redRose</refName>
<description>classical red rose </description>
<color>red</color>
<seed href="http://localhost/test/seeds/1" />
</Flower>
或者喜欢
<Flower>
<id>http://localhost/test/flowers/1</id>
<refName>redRose</refName>
<description>classical red rose </description>
<color>red</color>
<seed>
<id>http://localhost/test/seeds/1</id>
<refName>wildrose</refName>
<description>Special Seed for beautiful wild roses</description>
<category>wildrose</category>
<country>china</country>
</seed>
</Flower>
我假设类的不同结构足以让 jaxb 区分对象。恐怕我必须使用适配器,但我希望有人有另一个好主意。
我知道有一个与我相似的主题。但是主题中的类型看起来很相似,所以 jaxb 无法区分它们。(JAXB @XmlElements,不同类型但名称相同?)
感谢和抱歉我的英语不好。
编辑:有没有办法通过编组添加类型,jaxb 确切地知道它是用于解组的类型?