Как маршалировать экземпляр класса JAXB как его суперкласс - PullRequest
2 голосов
/ 24 ноября 2010

Можно ли маршалировать экземпляр аннотированного класса JAXB в качестве его суперкласса (который также является аннотированным классом JAXB)?

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

И расширенный тип:

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

Итак, если этот сценарий:

BenamningTYPE b = new MoreDetailedBenamningTYPE();
...

Тогда я бы хотел упорядочить экземпляр b как BenmaningTYPE , чтобы получить

<BenmaningTYPE>
    ...
</BenmaningTYPE>

И НЕ :

<MoreDetailedBenamningTYPE>
    ...
</MoreDetailedBenamningTYPE>

Как будет выглядеть этот призыв маршала, если это возможно?

1 Ответ

2 голосов
/ 24 ноября 2010

Я не проверял, но сначала попробую:

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

Если вы генерируете классы из схемы XML, проверьте также копируемый плагин . Вы можете скопировать данные из экземпляра MoreDetailedBenamningTYPE в экземпляр BenmaningTYPE и выполнить маршалинг.

Есть больше возможностей, но они немного сложнее.

...