【问题标题】:JAXB marshaller to marshal super-class as root-element and use xsi:typeJAXB 编组器将超类编组为根元素并使用 xsi:type
【发布时间】:2011-06-08 17:55:29
【问题描述】:

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

目前这就是我所拥有的(比如说..):

  • XMLDOCUMENTTYPE 是 XMLINVOICETYPE 的超类
  • 编组 XMLINVOICETYPE 会给我<xmlInvoiceType>
  • 将 XMLINVOICETYPE 实例转换为 XMLDOCUMENTTYPE 实例,然后编组它仍然会给我<xmlInvoiceType>
  • 创建一个带有 JAXB 注释的包装器对象似乎可以解决问题,但现在我必须获取第一个子节点

例如:

jaxbWrapper.setXmlDocumentType(xmlInvoiceTypeInstance);

// 会做的伎俩,但额外的根

我想得到如下:

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

知道怎么做吗?

【问题讨论】:

    标签: java xml jaxb xsi


    【解决方案1】:

    尝试编组:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多