)
さまざまなタイプの 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;
}
要素が含むことができるタイプの 1 つであるクラス シード
@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 がオブジェクトを区別するには、クラスの構造が異なるだけで十分だと思いました。残念ながらアダプターを使用する必要がありますが、誰かが別の素晴らしいアイデアを持っていることを願っています.
私に似たトピックが 1 つあります。しかし、トピック内のタイプは似ているため、jaxb はそれらを区別できません。( JAXB @XmlElements、タイプは違うが名前は同じ? )
私の悪い英語に感謝し、申し訳ありません。
編集:マーシャリングによってタイプを追加する方法はありますか?jaxbは、アンマーシャリングのタイプを正確に認識していますか?