首页 文章

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

提问于
浏览
0

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

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

  • XMLDOCUMENTTYPE是XMLINVOICETYPE的超类

  • 编组XMLINVOICETYPE会给我 <xmlInvoiceType>

  • 将XMLINVOICETYPE实例转换为XMLDOCUMENTTYPE实例然后编组它仍然会给我 <xmlInvoiceType>

  • 创建一个用JAXB注释注释的包装器对象似乎可以解决问题,但现在我必须 grab 第一个子节点

例如 . :

jaxbWrapper.setXmlDocumentType(xmlInvoiceTypeInstance);

//会做的但是额外的根

我想得到的是如下:

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

知道怎么做吗?

2 回答

  • 2

    尝试编组:

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

    xsi:type仅在类型与 not 匹配的情况下呈现 .

    试试这个:

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

相关问题