JaxB,Eclipse Moxy,多重映射

时间:2014-04-25 18:43:42

标签: jaxb moxy

我有一个Parent和一个Child类。

House类有一个Parent类型的字段,可以引用Child个对象。我需要使用Eclipse Moxy将它映射到XML。

它的xsd类似于:

<xs:complexType name="Parent" abstract="true"> ...other fields...

<xs:complexType name="Child" > <xs:extension base="Parent"> ...other fields...

<xs:element name="child" type="Child" substitutionGroup="parent" /> <xs:element name="parent" type="Parent" abstract="true" />

<xs:complexType name="House"> <xs:element ref="parent"/>

House类包含一个指向Parent的JAXBElement: @XmlElementRef(name = "parent", namespace = "abc", type = JAXBElement.class) protected JAXBElement<? extends Parent> parent;

如何通过House.oxm.xml文件映射House类,以便这种多态映射正常工作?

<java-type name="House" xml-accessor-type="NONE"> <java-attributes> <xml-element-ref java-attribute="?????????"/>

我尝试使用&#39; @&#39;在映射中但它不起作用 - 它只是将对象的引用String(@Parent)添加到XML。

1 个答案:

答案 0 :(得分:1)

整个问题是因为:

@XmlElementRef(name = "parent", namespace = "abc", type = JAXBElement.class) protected JAXBElement<? extends Parent> parent;

在尝试修复它之后,我遇到了这个缺陷:https://bugs.eclipse.org/bugs/show_bug.cgi?id=327811

在参考其代码之后,我看到它解决了与我非常相似的情况,但在超类型上只使用了@XmlElementRef注释,而没有使用任何其他类似JAXBElement或向@XmlElementRef提供任何其他参数。

我尝试过(并从oxm文件中删除了它的映射),它就像一个魅力!我希望这个答案可以帮助那些遇到同样问题的人。