尽管有这样的说法here :
for applications not working because of missing @Path at class level -> it should work now
我仍然需要注释我的端点实现,因为接口(interface)上的注释没有被拾取。
这与我配置 JAX-RS 的方式有关,还是 TomEE 中仍然存在错误?
界面:
@Path("myPath") public interface MyEndpoint {
@Path("{id}") String getById(@PathParam("id") long id);
}
实现:
@Stateless class EJBBackedMyEndpoint implements MyEndpoint {
String getById(long id) { return "foo"; }
}
openejb-jar.xml
<openejb-jar xmlns="http://www.openejb.org/openejb-jar/1.1">
<ejb-deployment ejb-name="EJBBackedMyEndpoint">
<properties>cxf.jaxrs.providers = exceptionMapper</properties>
</ejb-deployment>
</openejb-jar>
资源.xml
<resources>
<Service id="exceptionMapper" class-name="package.MyExceptionMapper"/>
</resources>
beans.xml 仅包含空根元素
更新:
- JAX-RS 规范显然根本没有提及类级注释
- @Consumes 和 @Produces 在应用到界面时起作用,
- @Path(类级别)在界面上应用时不起作用,
- 在路由请求时,方法级别上的 @Path 受到尊重,但是 UriBuilder 失败:
UriBuilder.path(EJBBackedMyEndpoint.class, "getById")
抛出IllegalArgumentException:“retrieve”方法没有路径注释
。
最佳答案
那篇博文可能具有误导性。 JAX-RS 不支持在接口(interface)上放置 @Path
、@GET
、@PathParam
或其他 JAX-RS 注释。根据规范,所有这些都需要位于“资源类”上,在这种情况下是 @Stateless
bean 类。
如果将@Path
从接口(interface)移动到bean类,它应该可以工作。至少应该更进一步。
关于ejb - TomEE 1.5.2 接口(interface)级别的 @Path 注释仍然不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17422348/