由于WLS 12的问题,将JAX-RS服务从CXF迁移到Jersey。
我目前有一个具有JAX-RS注释的接口,然后是两个实现它的类(一个是实现默认功能的类,另一个是存根实现)。
在CXF中,我可以使用一个属性来驱动哪个实现类通过Spring注入来完成ReST请求:
<alias name="restProxyApi${restProxyApi.sib:Impl}" alias="restProxyApiEndpoint" />
<jaxrs:server id="jaxrs.restProxyApi" address="/">
<jaxrs:serviceBeans>
<ref bean="restProxyApiEndpoint" />
</jaxrs:serviceBeans>
</jaxrs:server>
我没有看到与泽西岛这样做的方法。 Jersey似乎希望我使用Spring的组件扫描并声明我的API端点存在的包。但这不是我想要做的。在Jersey中有没有办法可以利用Bean Id作为Jersey用来完成SpringServlet请求的资源?
答案 0 :(得分:0)
我一直在寻找这个问题的解决方案。但是,我认为没有类似接口,抽象类/实现的机制,它通常与Spring IOC一起使用。
我能提出的一种方法就是不要担心XML配置的声明和实现。但是直接在Spring的beans.xml中将实现类设置为bean。例如:
对于相同的Restful API有两种不同的实现,比方说RestA和RestB,代码看起来像......
@Path("/restApi")
public class RestA {
@POST
@Path("post/")
public String print(@Context HttpServletRequest req, InputStream is) {
// RestA: do something
}
}
@Path("/restApi")
public class RestB {
@POST
@Path("post/")
public String print(@Context HttpServletRequest req, InputStream is) {
// RestB: do something
}
}
然后,在你的bean设置xml中,只需将这两个类声明为restful请求的bean,并标记其中一个......(这里是对http://x.x.x.x/restApi/post的RestA句柄请求)
<beans>
<bean id="restA" class="a.b.X.RestA" />
<!-- <bean id="restB" class="a.b.y.RestB" /> -->
</beans>
当您想要切换您的restful API实现时,请标记或删除其他bean。
虽然这种方法不算真正的解决方案,但它适用于管理同一个restful api的多个实现。