3

次の単純な RESTEasy (JAX-RS) サービスについて考えてみましょう。

@Path("/example-service")
public interface ExampleService {

    @Path("/ping")
    @GET
    public String ping(String message);

}

クラスではなくインターフェイスで JAXRS の仕様を定義したいので、素敵なクライアント フレームワークを使用できます。

ExampleService client = ProxyFactory.create(ExampleService.class, "http://localhost:8080");

RESTEasy のコンテキスト インジェクション (@Context) を導入したい場合を除いて、すべてがうまく機能します。単純に、次のことを検討してください。

@Path("/example-service")
public interface ExampleService {

    @Path("/ping")
    @GET
    public String ping(@Context HttpServletRequest request, String message);

}

この @Context インジェクションは直交しており、インターフェイスに属していないため、これは明らかに意味がありません (さらに、クライアントの観点からこのインターフェイスの醜さを乗り越えて null を渡すことができたとしても、現在、それを妨げるバグがあります)これは機能していません: RESTEASY-311 )

インターフェイス JAXRS マークアップを使用して (したがって、優れた RESTEasy クライアント フレームワークを活用して)、直交する @Context インジェクションに同時にアクセスするにはどうすればよいですか?

4

1 に答える 1

3

この質問は言い回されているので、これは実装の@Contextフィールドインジェクションで簡単に解決できます。この特定の状況を複雑にしたのは、JNDIから実装を取得するRESTEasyの「ejb-integration」の使用でした。このソリューションは、EJBコンテナから取得した実装に対して(まだ)追加のRESTインジェクションを実行しません。これはすべて、今後のJEE6/JAXRS統合で簡単になります。

于 2009-11-20T22:12:44.910 に答える