SOAP和REST Web服务,Java EE中有一个实现

时间:2011-07-29 10:32:35

标签: web-services rest java-ee soap jboss

是否有可能(Java EE,JBoss 6)巧妙地注释Java代码以提供RESTful和SOAP Web服务而不实现两种方法?

我正在考虑:

@Local
@Path("/service")
@WebService
public interface SomeService {
    @GET @Path("somemethod")
    @WebMethod
    public String someMethod (@QueryParam("s") String someParam);
}

请注意 @Path @WebService 注释(不幸的是,以上示例无效)。

2 个答案:

答案 0 :(得分:2)

虽然JAX-WS和JAX-RS注释可以很好地同用相同的方法,但我发现很难相信任何经过良好调整以便与JAX-RS一起使用的接口都非常适合JAX-WS或反之亦然。问题不是你不能这样做,问题是你不应该这样做;他们有一个不同的世界模型,一个不同的概念,它意味着什么是一个良好的界面。

但如果你只是做一些像简单查找那样微不足道的事情,它确实可行:

@GET
@Path("foo/{id}")
@Produces("application/xml")
@WebMethod(operationName = "DescribeFoo")
@WebResult(name = "Description")
public DescriptionOfFoo getFooDescription(
        @PathParam("id")
        @WebParam(name = "fooId")
        String id) {
    return get_the.description_of(id); // Whatever...
}

我喜欢尽可能多地在接口上添加(检查框架文档以了解如何使它们工作)因为这会将上面的部分(!!)可能的注释集减少到一个更明智的水平。 (作为参考,当事情开始变得复杂并且您在非平凡模式中应用多个方面时,每个方法可以轻松获得超过20个注释,其中一些与您的实现相关,其中一些与一个或另一个相关。您的界面;分区可以提高理智度。)

答案 1 :(得分:0)

我希望将JAX / RS注释应用于类而不是接口。

您可能还需要进行一些配置以将JAX / RS servlet实现添加到您的Web应用程序。

我有一些更详细的解释here,它在WebSphere而不是JBoss中,但是它使用的是Apache开源实现,因此很可能是相关的。

在概念中我不明白为什么同样简单的方法不能作为Web服务和RESTful服务公开,但是,这两种方法的设计理念根本不同,当你得到任何非平凡的东西时我只是不要这会啮合。