バックグラウンド
Apache CXF 2.5.x 、JSR 311 1.1.1、およびSpring 2.5.xを使用しています
現在、 Jacksonを JSON プロバイダーとして使用する ABC と DEF の 2 つのエンドポイントがあります。Spring ファイルは次のようになります。
<bean id="jacksonMapper" class="org.codehaus.jackson.map.ObjectMapper" />
<bean id="jsonProvider"class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" p:mapper-ref="jacksonMapper"/>
<jaxrs:server id="service1" address="/">
<jaxrs:serviceBeans>
<ref bean="resourceABC" />
<ref bean="resourceDEF" />
</jaxrs:serviceBeans>
<jaxrs:providers >
<ref bean="jsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
Java クラスでアノテーションを使用すると、これらのエンドポイントは および を介して利用できますhttp://company.com/api/rest/ABC
。http://company.com/api/rest/DEF
チャレンジ
Gsonを JSON プロバイダーとして使用する新しいエンドポイント IJK を導入したいと考えています。エンドポイントを にマップしたいと思いますhttp://company.com/api/rest/IJK
。
注: 確かに、別のエンドポイントを使用してマッピングするのは簡単ですが、それはhttp://company.com/api/rest/new/IJK
避けたいと思います。
アプローチ
同じアドレスで新しいサーバーを定義しようとしました:
<jaxrs:server id="service2" address="/">
<jaxrs:serviceBeans>
<ref bean="resourceIJK" />
</jaxrs:serviceBeans>
<jaxrs:providers >
<ref bean="gsonProvider"/>
</jaxrs:providers>
</jaxrs:server>
しかし、それはうまくいきません。providers
同じ要素で複数を使用しようとしましserver
たが、サイコロは使用できませんでした。
このリンクserverFactories
では、要素の使用について説明しています。そのような:
<beans>
<jaxrs:server id="customerService" address="/service1">
<jaxrs:serviceFactories>
<ref bean="sfactory1" />
<ref bean="sfactory2" />
</jaxrs:serviceFactories>
</jaxrs:server>
<bean id="sfactory1" class="org.apache.cxf.jaxrs.spring.SpringResourceFactory">
<property name="beanId" value="customerBean1"/>
</bean>
<bean id="sfactory2" class="org.apache.cxf.jaxrs.spring.SpringResourceFactory">
<property name="beanId" value="customerBean2"/>
</bean>
<bean id="customerBean1" class="demo.jaxrs.server.CustomerRootResource1" scope="prototype"/>
<bean id="customerBean2" class="demo.jaxrs.server.CustomerRootResource2" scope="prototype"/>
</beans>
これは有望に見えますprovider
が、サービスcustomerBean1
とcustomerBean2
SpringでJSONを設定するにはどうすればよいですか?
質問
serviceFactory を使用して、上記の最後のアプローチを誰かが明確にすることはできますか? Jackson の代わりに Gson をresourceIJK
(同じエンドポイント ルートで)導入するという目標を達成できますか?
Apache CXF 2.7 でのみ実行できる場合、それは問題なく有用な情報です。