RESTful Web服务端点上的JAX-WS @WebService

时间:2015-05-11 10:42:54

标签: java jax-rs jax-ws ejb-3.0

前段时间,在其中一个项目中,我在某些泽西根(@Path)资源类中找到了@WebService注释。据我所知,它是一些遗留代码或仅仅是一个误用的JAX-WS注释。最近我偶然发现了post,其中为了提到EJB而将JAX-RS服务与@WebService注释混合在一起(作为旁注,我工作的项目根本没有使用EJB,所以我仍然认为这是对@WebService的不当使用)。由于所有这一切,我现在感到困惑,如果将@WebService和JAX-RS混合在一起是合理的。那是什么情况?除了提到的EJB功能之外还有什么?

1 个答案:

答案 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公开这些方法会产生许多问题:

  • SOAP响应中的Response是什么?
  • 响应是否会使用JSON作为表示?
  • 这些方法是如何调用的?

我可以想象,使用JAX-RS和JAX-WS公开相同的方法是不合理的。它既可以是一种有用的方法,也可以是两种方法。

不要这样做。