JAXB marshaller将超类编组为root-element并使用xsi:type

时间:2011-06-08 17:55:30

标签: java xml jaxb xsi

我正在尝试将子类编组为超类,并将xsi:type信息作为XML Root元素属性。

目前这就是我所拥有的(让我们说..):

  • XMLDOCUMENTTYPE是XMLINVOICETYPE的超类
  • 编组XMLINVOICETYPE会给我<xmlInvoiceType>
  • 将XMLINVOICETYPE实例强制转换为XMLDOCUMENTTYPE实例,然后对其进行编组仍然会给我<xmlInvoiceType>
  • 创建一个使用JAXB注释注释的包装器对象似乎可以解决问题,但现在我必须抓住第一个子节点

e.g:

jaxbWrapper.setXmlDocumentType(xmlInvoiceTypeInstance);

//会做的但是额外的根

我想得到的是:

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

知道怎么做吗?

2 个答案:

答案 0 :(得分:2)

尝试编组:

new JAXBElement(new QName("XMLDOCUMENTTYPE"), XMLDOCUMENTTYPE.class, xmlInfoiceTypeInstance)

答案 1 :(得分:0)

xsi:仅当类型与类匹配时才会呈现类型。

试试这个:

// 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);