Маршаллер JAXB для маршалинга суперкласса как корневого элемента и использования xsi:type

Я пытаюсь маршалировать подкласс как суперкласс с информацией xsi:type в качестве атрибутов корневого элемента XML.

В настоящее время это то, что у меня есть (скажем..):

  • XMLDOCUMENTTYPE является надклассом XMLINVOICETYPE.
  • сортировка XMLINVOICETYPE даст мне <xmlInvoiceType>
  • Приведение экземпляра XMLINVOICETYPE к экземпляру XMLDOCUMENTTYPE, а затем его упорядочение все равно даст мне <xmlInvoiceType>
  • Создание объекта-оболочки, аннотированного аннотацией JAXB, кажется, помогает, но теперь мне нужно захватить первый дочерний узел

e.g.:

jaxbWrapper.setXmlDocumentType(xmlInvoiceTypeInstance);

// сработает, но дополнительный корень

Я хотел бы получить следующее:

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

есть идеи как это сделать?


person xandross    schedule 08.06.2011    source источник


Ответы (2)


Попробуйте сортировать:

new JAXBElement(new QName("XMLDOCUMENTTYPE"), XMLDOCUMENTTYPE.class, xmlInfoiceTypeInstance)
person lexicore    schedule 08.06.2011

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);
person waffel    schedule 14.01.2015