質問

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

現在、JIBXでスプリングを配線する方法を理解するのが困難です。たとえば、単一のクラスを配線したい場合 Customer, 、aを定義するだけです JibxMarshaller, 、XML MarshallingView, 、そしてそれも私たちに追加します ContentNegotiatingViewResolver. 。これはうまく機能します。

問題は、たとえば、複数のクラスのマーシャリングをどのように配線するかがわからないことです。 CustomerUser. 。各 JibxMarshaller 1つのクラスのみをサポートできます(多くのサポートできるJaxB2Marshallerとは異なります)。各クラスのマーシャラーを宣言しようとしましたが、 MarshallingView 1つのマーシャラーのみをサポートします。複数の宣言 MarshallingViewSは機能しません(最初の動作のみが表示されます)。

あなたのアドバイスをありがとう。ありがとう。

<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. 。マーシャラーは単一のクラスでのみ機能することを意味すると思いましたが、関連するすべてのバインディングを見つける方法としてターゲットクラスを使用するだけのようです。そのため、解決策は、バインディングのセットから任意のターゲットクラスを使用して、単一のマーシャラーを使用することです。例えば:

<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>
役に立ちましたか?

解決

JIBXバインディングコンパイラが追加します JiBX_bindingList フィールドツークラスファイル。実行時に、「TargetClass」(任意のコンパイルされたクラス JiBX_bindingList フィールド)は、バインディングファクトリーを構築するために使用されます。それはです getMappedClasses()ibindingFactory 使用されます JibxMarshallerサポート() Marshallerがクラスをマーシャルできるかどうかを確認する方法。

ご覧ください JIBXランタイムの使用.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top