@Context
依存性注入が HttpServletRequest または HttpServletResponse の代わりに $Proxy(乱数) インスタンスのコレクションを返す理由を理解するのに少し問題があります。
私はGlassfish 3.1.2.2をJerseyのバージョン(Jersey: 1.11.1)で使用しており、私のアプリはEARアプリケーションとして構築されています。
メソッドに注釈を付ける単純な @Remote インターフェイスがあり、REST サービスは問題なく動作しますが、HttpServletRequest 情報にアクセスしようとすると問題が発生します。
セッション Bean のプライベート フィールドに注釈を付けました。
@Context
private HttpServletRequest request;
@Context
private HttpServletResponse response;
また、パラメーターのセットとして @Context を含めるメソッド シグネチャも作成しました。
@POST
@Path("authenticate")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
@Produces(MediaType.APPLICATION_JSON)
public Response authenticate(@FormParam("username") String username, @FormParam("password") String password, @Context HttpServletRequest request, @Context HttpServletResponse response);
エントリの直後にメソッドをデバッグしようとすると、ローカル メソッド インスタンスが $ProxyXXX タイプであるのに対し、グローバル リクエストおよびレスポンス オブジェクトが null であることがわかります。
問題は、これらのオブジェクトにアクセスできない (またはその方法がわからない) ことです。ウェブ上のチュートリアルによると、それらは私が利用できるはずですが、これらにアクセスしようとすると、これがスローされます:
WARNING: StandardWrapperValve[RestDataService]: PWC1406: Servlet.service() for servlet RestDataService threw exception
java.lang.IllegalStateException: No thread local value in scope for proxy of class $Proxy245
at com.sun.jersey.server.impl.ThreadLocalInvoker.invoke(ThreadLocalInvoker.java:93)
at $Proxy245.getContextPath(Unknown Source)
これは私がこれらを呼び出そうとしている方法です (この例では単に getContextPath を呼び出します)
@Override
public Response authenticate(String username, String password, HttpServletRequest request, HttpServletResponse response) {
System.out.println("just a test: " + request.getContextPath());
ここで何が欠けていますか?誰かが同様の問題を経験しましたか?
グレッグ