【问题标题】:Spring JAXB2 unmarshalling duplicate xml root element nameSpring JAXB2 解组重复的 xml 根元素名称
【发布时间】:2014-01-20 07:18:09
【问题描述】:

我在使用 Spring3 和 Jaxb2 将 simalar xml(相同的根元素但不同的字段)解组到不同的对象时遇到问题

我正在使用 spring 来定义我的 xml 转换器,如下所示:

<bean id="xmlConverter"     class="org.springframework.http.converter.xml.MarshallingHttpMessageConverter">
<property name="marshaller" ref="jaxbMarshaller"></property>
<property name="unmarshaller" ref="jaxbMarshaller"></property>
<property name="supportedMediaTypes" value="text/xml" />
</bean>

<bean id="jaxbMarshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
        <property name="classesToBeBound">
            <list>
<value>com.my.project.Object1</value>
<value>com.my.project.Object2</value>
<value>com.my.project.Object3</value>
            </list>
        </property>

所以问题归结为每个对象都有相同的 @XmlRootElement(name = "xml") 但完全不同的字段。 当我只定义了一个对象时,每个对象都会正确解组,但是当我添加多个对象时,它会一直假定最后一个对象,这是我猜测的一些最重要的问题。

有人知道如何解决这个问题吗?

编辑:解决方案我创建了一个包含所有字段的较大对象,这解决了问题。不是最好的解决方案,但效果很好。

【问题讨论】:

    标签: java xml spring jaxb2


    【解决方案1】:

    为每个对象使用不同的命名空间。例如:

    @XmlRootElement(name = "xml", namespace="com.my.project.obj1")
    @XmlRootElement(name = "xml", namespace="com.my.project.obj2")
    @XmlRootElement(name = "xml", namespace="com.my.project.obj3")
    

    使用命名空间,编组器可以区分不同的对象。

    【讨论】:

    • 嗨,这确实有道理..它现在选择了正确的对象来编组,但是得到这个:(所以 xml 名称是“TransferTo”)得到“HttpMessageNotReadableException:无法读取 [class com ...xml.PingResponse]; 嵌套异常是 ...javax.xml.bind.UnmarshalException: 意外元素 (uri:"", local:"TransferTo")。预期元素是 、、" 有什么想法吗?
    • 下次请尝试编辑您的问题或提出新问题。也许blog.bdoughan.com/2012/07/jaxb-and-root-elements.html 有助于解决您的问题。
    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多