我有一个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。
答案 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文件中删除了它的映射),它就像一个魅力!我希望这个答案可以帮助那些遇到同样问题的人。