前段时间,在其中一个项目中,我在某些泽西根(@Path)资源类中找到了@WebService注释。据我所知,它是一些遗留代码或仅仅是一个误用的JAX-WS注释。最近我偶然发现了post,其中为了提到EJB而将JAX-RS服务与@WebService注释混合在一起(作为旁注,我工作的项目根本没有使用EJB,所以我仍然认为这是对@WebService的不当使用)。由于所有这一切,我现在感到困惑,如果将@WebService和JAX-RS混合在一起是合理的。那是什么情况?除了提到的EJB功能之外还有什么?
答案 0 :(得分:3)
使用@WebService
公开JAX-RS bean作为SOAP WS的方法在技术上可能是可行的。它不会带来良好的API设计。
考虑一些非常常见的JAX-RS方法:
@GET
@Path("/foos")
@Produces("application/json")
public Response getFoos() {
// get all Foos
List<Foo> foos = ...;
return Response.ok(foos).build();
}
@GET
@Path("/foos/{id}")
@Produces("application/json")
public Response getSingleFoo(@PathParam("id") String id) {
// get the Foo
Foo foo = ...;
return Response.ok(foo).build();
}
显而易见,调用这些方法的URL将如何构建以及结果如何。
但是使用@WebService
公开这些方法会产生许多问题:
Response
是什么?我可以想象,使用JAX-RS和JAX-WS公开相同的方法是不合理的。它既可以是一种有用的方法,也可以是两种方法。
不要这样做。