0

XMLルート要素属性としてxsi:type情報を使用して、サブクラスをスーパークラスとしてマーシャリングしようとしています。

現在、これは私が持っているものです(たとえば..):

  • XMLDOCUMENTTYPEは、XMLINVOICETYPEのスーパークラスです。
  • XMLINVOICETYPEをマーシャリングすると<xmlInvoiceType>
  • XMLINVOICETYPEインスタンスをXMLDOCUMENTTYPEインスタンスにキャストし、それをマーシャリングすると、それでも私は得られます<xmlInvoiceType>
  • JAXBアノテーションが付けられたラッパーオブジェクトを作成することでうまくいくようですが、最初の子ノードを取得する必要があります

例えば:

jaxbWrapper.setXmlDocumentType(xmlInvoiceTypeInstance);

//トリックを行いますが、余分なルート

私が入手したいのは次のとおりです。

<XMLDOCUMENTTYPE ... ... xsi:type="XML_INVOICE_TYPE">
</XMLDOCUMENTTYPE>

これを行う方法はありますか?

4

2 に答える 2

2

マーシャリングを試してください:

new JAXBElement(new QName("XMLDOCUMENTTYPE"), XMLDOCUMENTTYPE.class, xmlInfoiceTypeInstance)
于 2011-06-08T18:25:48.440 に答える
0

xsi:type は、タイプがクラスと一致しない場合にのみレンダリングされます。

これを試して:

// create the type and add childs and attributes ...
XmlInVoiceType xmlInVoice = new XmlInVoiceType();
// map the element to object to force xsi:type 
final JAXBElement<?> object = new JAXBElement<>(new QName("http://your/namespace/xmlinvoice", "xmlinvoice"), Object.class, xmlInVoice);
于 2015-01-14T09:32:29.330 に答える