7

バックグラウンド

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/ABChttp://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が、サービスcustomerBean1customerBean2SpringでJSONを設定するにはどうすればよいですか?

質問

serviceFactory を使用して、上記の最後のアプローチを誰かが明確にすることはできますか? Jackson の代わりに Gson をresourceIJK(同じエンドポイント ルートで)導入するという目標を達成できますか?

Apache CXF 2.7 でのみ実行できる場合、それは問題なく有用な情報です。

4

0 に答える 0