JAXB根元素在编组期间设置为type

时间:2018-10-17 05:42:41

标签: xml groovy jaxb marshalling

我问过一个关于编组jdom元素的问题。我从来没有那个工作,所以我改用Java对象。这使我几乎可以使我的程序正常工作。但是,我面临最后的障碍。

因此,在该课程中,我试图编组以下字段:

@XmlRootElement(name = "ReportElement")
class ReportElement{

    More fields....

    @XmlElement(name = "Content", namespace = "some:name:space:1")
    Object content
}

内容将设置为一个类,该类具有以下根元素:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ContentInfoType", propOrder = [
    order here
])
@XmlRootElement(name = "ContentInfo", namespace = "some:name:space:2")
class ContentInfoType implements ReportProperty {

它会按我想要的方式封送所有东西,除了以下内容:

<ns5:Content xsi:type="ns2:ContentInfoType" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

ContentInfoType的所有字段都已正确设置,但是我不明白为什么我的ContentInfoType的根元素未设置为xml节点,如下所示:

<ns2:ContentInfo></ContentInfo>

这是我的编组代码:

 static <T> Element serializeGenericObjectToXmlTypeElement(T object, boolean removeDeclaration = false, List<String> objectList = []) {
        JAXBContext jc
        if(objectList.size() != 0){
            String packageString = object.getClass().getPackage().getName()
            for(String s : objectList){
                packageString += ":" + s
            }
            jc = JAXBContext.newInstance(packageString)
        } else{
            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
    }

每当需要封送一个以上的类时,我都会发送一个列表,其中包含需要封送的类的包名称。

您可以忽略MyXMLFormatter。它已经在

marshaller.marshal(object, writer)

输出不是我想要的。

有人知道为什么这种行为是这样吗?

PS: 如果我单独编组ContentInfoType(我有一种情况,我只需要其中的xml),它就可以正常工作,并且我得到了带有ContentInfo的xml元素。但是,当ContentInfoType设置为ReportElement类的“对象内容”时,它将不起作用。

编辑:因为我没有获得我的contentinfotype类的所有注释,所以我刚刚进行了编辑。可能是@XmlType批注导致了这种情况。

0 个答案:

没有答案