2011-01-28 55 views
3

我們試圖用Spring MVC構建一些RESTful服務。我們將提供幾種表示形式:XML,HTML,& JSON。我們希望使用JiBX作爲OXM技術。使用Spring MVC和JIBX編組不同的類與編組

我們目前很難弄清楚如何用JiBX連接Spring。如果我們要連線了一個類,例如Customer,我們簡單地定義一個JibxMarshaller,一個XML MarshallingView,並將其添加過我們的ContentNegotiatingViewResolver。這很好。

問題是我們不確定如何連接多個類的編組,例如,CustomerUser。每個JibxMarshaller只能支持一個類(與Jaxb2Marshaller不同,它可以支持很多類)。我們嘗試爲每個班級宣佈一名編組員,但MarshallingView僅支持一名編組人員。聲明多個MarshallingView s不起作用(它只顯示第一個作品)。

您的建議表示讚賞。謝謝。

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="mediaTypes"> 
     <util:map> 
      <entry key="xml" value="application/xml"/> 
     </util:map> 
    </property> 
    <property name="defaultViews"> 
     <util:list> 
      <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
       <property name="marshaller" ref="userMarshaller"/> 
      </bean> 
      <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
       <property name="marshaller" ref="customerMarshaller"/> 
      </bean> 
     </util:list> 
    </property> 
</bean> 

<bean id="userMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller"> 
    <property name="targetClass" value="com.mycompany.User"/> 
</bean> 
<bean id="customerMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller"> 
    <property name="targetClass" value="com.mycompany.Customer"/> 
</bean> 

更新基於以下僅限Ritesh的回答是:

事實證明,我被JibxMarshallertargetClass財產揭去。我認爲這意味着編組人員只能爲單個類工作,但是,它似乎只是使用目標類作爲查找所有相關綁定的方式。所以,解決方案是隻使用一個編組器,使用您的綁定類中的任意目標類。例如:

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="mediaTypes"> 
     <util:map> 
      <entry key="xml" value="application/xml"/> 
     </util:map> 
    </property> 
    <property name="defaultViews"> 
     <util:list> 
      <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
       <property name="marshaller" ref="jibxMarshaller"/> 
      </bean> 
     </util:list> 
    </property> 
</bean> 

<bean id="jibxMarshaller" class="org.springframework.oxm.jibx.JibxMarshaller"> 
    <property name="targetClass" value="com.mycompany.User"/> 
</bean> 

回答

2

JiBX綁定編譯器將JiBX_bindingList字段添加到類文件中。在運行時,'targetClass'(帶有JiBX_bindingList字段的任何編譯類)用於構建BindingFactory。它是用於通過JibxMarshallersupports()方法來檢查是否可以編組編組一類IBindingFactorygetMappedClasses()。請參閱JiBX runtime usage

+0

我終於在幾周後重新審視這個問題,經過進一步的調查,看起來你是正確的。我認爲我的誤解是編組人員的「targetClass 」屬性。對我來說,這個屬性意味着編組將只爲目標類工作,這是不正確的。 – SingleShot 2011-02-22 19:47:54