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 仕様では、クラスレベルの注釈についてはまったく言及されていないようです
  • @Consumes と @Produces は、インターフェイスに適用すると機能します。
  • @Path (クラス レベル) は、インターフェイスに適用すると機能しません。
  • メソッド レベルの @Path は、リクエストをルーティングするときに受け入れられますが、UriBuilder は失敗しています: UriBuilder.path(EJBBackedMyEndpoint.class, "getById")throws IllegalArgumentException: No Path annotation for 'retrieve' method
4

1 に答える 1

2

そのブログ投稿はおそらく誤解を招く可能性があります。@Path@GET、またはその他のJAX @PathParam-RS アノテーションをインターフェースに配置することは、JAX-RS ではサポートされていません。仕様ごとに、これらはすべて「リソース クラス」上にある必要があります。これは、@Statelessこの状況では Bean クラスです。

@Pathインターフェイスから Bean クラスに移動すると、動作するはずです。少なくともそれはさらに進むべきです。

于 2013-07-02T21:37:34.533 に答える