我有一個xmlelement,它可以來自不同的類型。獨立於類型,它具有相同的名稱。它可以是一個對象,或者是一個通過URI指向現有對象的引用。我認爲xmlElements可能是解決方案。編組工作正常,但通過解組,它每次選擇最後一個給定的類類型。
的Class花含有元素
@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,de scription等。 的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, different types but same name?)
感謝和抱歉我的英語不好。
編輯:有沒有一種方法可以通過編組來添加類型,jaxb確切知道它是用於解組的類型?
MHM ..編譯相同的名稱設置類的類型和整理完善。但你的解決方案工作正常。就像你說xmlseealso是爲了別的東西..所以它似乎有點骯髒..但只要它的作品,它對我來說很好。 :) – nsrlady 2013-04-29 14:01:07
很奇怪。對於我在日食juno與JDK6它給編譯錯誤。 – Chandru 2013-05-07 06:36:54
mhm ..現在我得到[com.sun.istack.internal.SAXException2:「Seed」的實例將替換爲「java.lang.Object」,但「Seed」綁定到一個匿名類型。] – nsrlady 2013-05-14 08:57:49