2016-03-25 10 views
2

私はClientRequestFilterを実装する@Providerを持っています。プロバイダ自体はまったく発見されません。私が手動で登録すると、それが発見されます。JAX-RS ClientRequestFilterプロバイダにCDI依存関係を挿入する方法

ClientBuilder.newBuilder().register(Somefilter.class); 

このように、CDIはSomefilterに依存関係を挿入しません。

  • AS:WildFly 10
  • JAX-RS:(WildFlyに建て)RESTEasyの

Somefilterクラスのコードは次のようになります。

@Provider 
public class Somefilter implements ClientRequestFilter { 

@Inject 
private AccountService accountService; 


@Override 
public void filter(ClientRequestContext requestContext) throws IOException { 
    System.out.println(accountService); 

} 

}

アプリケーションもContainerRequestFilterを実装するいくつかのクラスを使用して、@Application注釈で構成サーバ部分を有しています。これらはResteasyによって発見され、CDI注入作業さえも発見されています。

質問がだから、どのようにしてclient-api関連のプロバイダにCDI依存関係を注入させることができますか?

答えて

3

@Provider実装はサーバー側で自動的に検出されますが、クライアント側では検出されません。

ただ、この方法を試してください。

@Inject 
private Somefilter someFilter; 

ClientBuilder.newBuilder().register(someFilter); 

Somefilter(例えば@Dependent)に豆を規定する注釈を追加してください。

+0

このアプローチは機能します。ありがとうございました。 –

+0

リクエストごとにインスタンス化されたフィルタをどういうわけかできますか? –

+0

フィルタが '@ RequestScoped'であるとします。 –

0

あなたはあなたのサービスクラスの@RequestScopedスコープを宣言するための正しいパッケージjavax.enterprise.contextをインポートしていることを確認してください。代わりにどの

import javax.enterprise.context.RequestScoped; 

@Named 
@RequestScoped 
public class AccountService { 

} 

私はこの問題を抱えて、私は誤って顔を使用していたが判明した(JSF)パッケージjavax.faces.bean.RequestScopedであった。

関連する問題