2014-01-20 84 views
0

我解組simalar XML(同根元素,但不同的字段)與Spring3和JAXB2春JAXB2解組重複XML根元素名稱

我使用的春天來定義我的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」),但完全不同的領域。 當我只有一個對象定義每個對象unmarshalls正確,但是當我添加多個,它繼續假設最後一個,我猜測一些壓倒一切的問題。

任何人都有如何解決這個問題的想法?

編輯:解決方案我創建了一個大對象與所有領域,這解決了這個問題。不是最好的解決方案,但它運作良好。

回答

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

使用命名空間時,編組器可以區分不同的對象。

+0

嗨,這有一定道理..現在拿起合適的對象編組,但得到這樣的:(因此XML名稱是「的轉交」) 獲得「HttpMessageNotReadableException: 無法讀取[類別Com .. .xml.PingResponse]; 嵌套異常是... javax.xml.bind.UnmarshalException:意外元素(uri:「」,local:「TransferTo」)。 預期元素是<{com..xml.checkwalletresponse} TransferTo >, <{com..xml.msisdninforesponse} TransferTo>, <{com..xml.pingresponse} TransferTo>「 有什麼想法? – Marius

+0

下次嘗試編輯您的問題或請求一個新的問題。 也許http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html有助於解決您的問題。 – MystyxMac