接口级别的TomEE 1.5.2 @Path注释仍然无法正常工作

时间:2013-07-02 09:45:29

标签: ejb cxf jax-rs openejb apache-tomee

尽管声明了here

  

因为在类级别缺少@Path而无法正常工作的应用程序    - >它现在应该工作

我仍然需要注释我的端点实现,因为接口上的注释没有被选中。

它与我配置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>

resources.xml中

<resources> 
  <Service id="exceptionMapper" class-name="package.MyExceptionMapper"/>
</resources>

beans.xml只显示空根元素

更新

  • JAX-RS Spec显然没有提到所有
  • 的类级别注释
  • @Consumes和@Produces在界面上应用时起作用
  • @Path(类级别)在界面上应用时不起作用,
  • 路由请求时,
  • 方法级别的@Path会受到尊重,但是UriBuilder失败了: UriBuilder.path(EJBBackedMyEndpoint.class, "getById")抛出IllegalArgumentException: No Path annotation for 'retrieve' method

1 个答案:

答案 0 :(得分:2)

这篇博文可能会产生误导。 JAX-RS不支持在接口上放置@Path@GET@PathParam或其他JAX-RS注释。根据规范,所有这些都需要在“资​​源类”上,这是这种情况下的@Stateless bean类。

如果将@Path从接口移到bean类,它应该可以工作。至少它应该更进一步。