2

尽管这里声称:

对于由于在类级别缺少 @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>

资源.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")throws IllegalArgumentException: No Path annotation for 'retrieve' method
4

1 回答 1

2

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

如果您@Path从接口移动到 bean 类,它应该可以工作。至少它应该走得更远。

于 2013-07-02T21:37:34.533 回答