2010-11-24 8 views
2

Ist es möglich, eine mit JAXB annotierte Klasseninstanz als Oberklasse zu marshallen (die auch eine JAXB-Klasse mit Anmerkungen ist)?So ordnen Sie eine JAXB-Klasseninstanz als Oberklasse an

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "BenamningTYPE", propOrder = {"benamningId"}) 
@XmlSeeAlso({MoreDetailedBenamningTYPE.class}) 
public class BenamningTYPE { 
    ... 
    @XmlElement(name = "BenamningId", required = true) 
    protected IdentifierTYPE benamningId; 
    ... 
} 

Und der erweiterte Typ:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "MoreDetailedBenamningTYPE", propOrder = {"modifyDetails"}) 
public class MoreDetailedBenamningTYPE extends BenamningTYPE { 
    ... 
    @XmlElement(name = "ModifyDetails", required = true) 
    protected ModifyDetailsTYPE modifyDetails; 
    ... 
} 

Also, wenn dieses Szenario:

BenamningTYPE b = new MoreDetailedBenamningTYPE(); 
... 

Dann würde Ich mag die Instanz b als BenmaningTYPE Marschall zu bekommen

<BenmaningTYPE> 
    ... 
</BenmaningTYPE> 

Und NICHT:

<MoreDetailedBenamningTYPE> 
    ... 
</MoreDetailedBenamningTYPE> 

Wie würde diese Marschall Blick aufrufen wie, wenn möglich?

Antwort

1

Ich habe es nicht überprüft, aber ich würde zuerst versuchen:

new JAXBElement(new QName("BenmaningType"), 
    BenManingTYPE.class, moreDetailedBenmaningTYPEInstance) 

Wenn Sie Klassen aus einem XML-Schema sind zu erzeugen, überprüft auch die copyable plugin. Sie könnten die Daten von einer Instanz von MoreDetailedBenamningTYPE in die Instanz BenmaningTYPE kopieren und diese verwalten.

Es gibt mehr Möglichkeiten, aber sie sind ein bisschen komplexer.

+0

Das kopierfähige Plugin aus dem jaxb2-commons-Projekt war genau das, was ich wollte! Ich habe die JAXBCopyStrategy erweitert und instanceof checks für jede Unterklasse hinzugefügt und eine Kopie als Oberklasse erstellt, danke! – Axel

+0

BTW, ich bin der Autor. Ich bin froh, dass du es hilfreich gefunden hast. – lexicore