2010-11-24 11 views
2

JAXBアノテーション付きクラスインスタンスをスーパークラス(これも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(); 
... 

その後、私は取得するBenmaningTYPEとしてインスタンスBをマーシャリングしたいと思います

<BenmaningTYPE> 
    ... 
</BenmaningTYPE> 

そしてませ:可能であれば

<MoreDetailedBenamningTYPE> 
    ... 
</MoreDetailedBenamningTYPE> 

どのようにこのマーシャルは、のような表情を呼び出すでしょうか?

答えて

1

私はそれをチェックしていないが、私が最初に試してみた:

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

あなたがXMLスキーマからクラスを生成している場合、またcopyable plugin確認してください。 MoreDetailedBenamningTYPEのインスタンスからBenmaningTYPEというインスタンスにデータをコピーし、マーシャルすることができます。

さらに多くの可能性がありますが、もう少し複雑です。

+0

jaxb2-commonsプロジェクトのCopyable Pluginは、私が欲しがっていたものでした!私はJAXBCopyStrategyを拡張し、各サブクラスごとにinstanceofチェックを追加し、そのスーパークラスとしてコピーを作成しました。ありがとうございます! – Axel

+0

ところで、私は著者です。うれしいことがわかってうれしいです。 – lexicore

関連する問題