2014-04-25 3 views
1

J'ai une Parent et une classe Child.JaxB, Eclipse Moxy, mappage polymorhpique

Une classe House a un champ de type Parent pouvant faire référence à un objet Child. J'ai besoin de le mapper en XML en utilisant Eclipse Moxy.

Son xsd serait quelque chose comme:

<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"/>

classe Maison contient un JAXBElement au point au parent: @XmlElementRef(name = "parent", namespace = "abc", type = JAXBElement.class) protected JAXBElement<? extends Parent> parent;

Comment mapper la classe House via le fichier House.oxm.xml pour que cette correspondance polymorphique fonctionne correctement?

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

J'ai essayé avec « @ » dans la cartographie, mais il ne fonctionne pas - il ajoute que la chaîne de référence (@Parent) de l'objet XML.

Répondre

1

Toute la question était à cause de:

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

Après plusieurs vaines tentatives de le réparer, je suis tombé sur ce défaut: https://bugs.eclipse.org/bugs/show_bug.cgi?id=327811

Après avoir fait référence à son code, j'ai vu qu'il adresse une situation très similaire à la mienne, mais qui utilise simplement l'annotation @XmlElementRef sur le supertype, sans utiliser d'autre chose que JAXBElement ou en fournissant d'autres paramètres à @XmlElementRef.

J'ai essayé cela (et retiré son mapping du fichier oxm) et cela a fonctionné comme un charme! J'espère que cette réponse aide quelqu'un d'autre qui est coincé avec le même problème.

Questions connexes