是否有可能(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 注释(不幸的是,以上示例无效)。
答案 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服务公开,但是,这两种方法的设计理念根本不同,当你得到任何非平凡的东西时我只是不要这会啮合。