背景
我们使用的是Apache CXF 2.5.x,JSR 311 1.1.1和Spring 2.5.x.
我们目前有2个端点,ABC和DEF,它们使用Jackson作为JSON提供者.我们的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>
Run Code Online (Sandbox Code Playgroud)
在Java类上使用注释,可以通过http://company.com/api/rest/ABC和使用这些端点http://company.com/api/rest/DEF
挑战
我们想要引入一个新的端点IJK,它使用Gson作为JSON提供者.我们希望端点映射到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>
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我们尝试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>
Run Code Online (Sandbox Code Playgroud)
这看起来很有希望,但如何设置JSON provider的服务,customerBean1并customerBean2在春天?
题
有人可以用serviceFactories澄清上面的最后一种方法吗?我们能否实现与Gson而不是Jackson 引入resourceIJK(在同一端点根域)的目标?
如果它只能用Apache CXF 2.7完成,那就是好的和有用的信息.
| 归档时间: |
|
| 查看次数: |
1075 次 |
| 最近记录: |