JAXB маршал jdom.element - PullRequest
       35

JAXB маршал jdom.element

0 голосов
/ 12 октября 2018

Я столкнулся с проблемой, когда мне нужно сериализовать объект groovy в xml.

Вот код, который я использую для сериализации:

static <T> Element serializeGenericObjectToXmlTypeElement(T object, boolean removeDeclaration = false) {
        JAXBContext jc = JAXBContext.newInstance(object.getClass())
        Marshaller marshaller = jc.createMarshaller()

        if (removeDeclaration) {
            marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true)
        }

        Writer writer = new StringWriter()
        marshaller.marshal(object, writer)
        def xmlString = writer.toString()
        def stringReader = new StringReader(xmlString)
        def builder = new SAXBuilder()
        def doc = builder.build(stringReader)
        def elem = doc.getRootElement()
        MyXMLFormatter xmlFormatter = new MyXMLFormatter(elem)
        Element element2 = xmlFormatter.formatXml(elem)
        return element2
    }

Сбой на marhsaller.маршал (объект, писатель)

Я отправляю большой вложенный объект и думаю, что он не работает со следующим объектом (где элемент org.jdom.element, версия 1.13):

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RapportIndholdType", propOrder = [
    "any"
])
class RapportIndholdType {

    @XmlAnyElement
    Element any
}

Поскольку я получаю следующее сообщение об ошибке:

[com.sun.istack.internal.SAXException2: class org.jdom.Element nor any of its super class is known to this context.
javax.xml.bind.JAXBException: class org.jdom.Element nor any of its super class is known to this context.]

И когда я смотрю на xml, получается последняя часть:

<ns5:RapportIndhold

Проблема заключается в том, что элементany, может буквально быть любым xml (преобразованным в элемент jdom), поэтому мне нужно иметь возможность упорядочить элемент jdom.

Я пробовал с @XmlAnyElement (lax = true), но это не такне работает.

Кто-нибудь знает решение, как я могу заставить это работать?

...