ejb - TomEE 1.5.2 接口(interface)级别的 @Path 注释仍然不起作用

标签 ejb cxf jax-rs openejb apache-tomee

尽管有这样的说法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/

相关文章:

java - Restful WS 中的依赖注入(inject)

java - MySQL DB JavaEE Glassfish 中的问号

java - 使用 Eclipse 的 ClassNotFoundException/NoClassDefFoundError

java - 结合地铁和 Jersey

java - ClientBuilder newBuilder() 与 newClient()

deployment - 如何在ear部署上自动执行 session bean的方法?

java - 内部类访问EJB

java - cxf rest服务jboss部署异常

grails - Grails和CXF插件WSDL的第一个方法示例?

java - 在jboss上的rest服务(JAX-RS)中注入(inject)ejb