3

Spring MVC でいくつかの RESTful サービスを構築しようとしています。XML、HTML、および JSON など、いくつかの表現を提供します。OXM テクノロジーとして JiBX を使用したいと考えています。

現在、JiBX で Spring を接続する方法を理解するのに苦労しています。たとえば、単一のクラスを結び付けたい場合は、単にXMLCustomerを定義し、それを .xml に追加するだけです。これはうまくいきます。JibxMarshallerMarshallingViewContentNegotiatingViewResolver

問題は、複数のクラスのマーシャリングを接続する方法がわからないことです。たとえばCustomerUser. それぞれJibxMarshallerが 1 つのクラスしかサポートできません (多数をサポートできる Jaxb2Marshaller とは異なります)。クラスごとにマーシャラーを宣言しようとしましたが、MarshallingView1 つのマーシャラーしかサポートしていません。複数の s を宣言MarshallingViewしても機能しません (最初の 1 つだけが機能するようです)。

あなたのアドバイスをいただければ幸いです。ありがとう。

<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の回答に基づいて更新します。

targetClassの所有物に私が振り落とされたことが判明しましたJibxMarshaller。マーシャラーが単一のクラスに対してのみ機能することを意味すると思いましたが、関連するすべてのバインディングを見つける方法としてターゲット クラスを使用しているようです。したがって、解決策は、バインドしている一連のクラスから任意のターゲット クラスを使用して、1 つのマーシャラーのみを使用することです。例えば:

<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>
4

1 に答える 1

2

JiBXバインディングコンパイラはJiBX_bindingList、クラスファイルにフィールドを追加します。実行時に、「targetClass」(JiBX_bindingListフィールドを持つコンパイル済みクラス)を使用してBindingFactoryを構築します。これは、getMappedClasses()マーシャラーがクラスをマーシャリングできるかどうかをチェックするため にsupports()メソッドで使用されるIBindingFactoryのです。JibxMarshaller

JiBXランタイムの使用法も参照してください。

于 2011-01-29T03:31:17.173 に答える