クライアント側では、json で Ajax.post (jquery 1.5) を使用しています。サーバー側では、resteasy-jaxrs-2.0.1.GA を使用しています。サーバーの応答にいくつかのヘッダーを追加する必要がある場所を見つけたので、次のフィルターを使用しました。
public void doFilter( ServletRequest req,
ServletResponse res,
FilterChain filterChain)
throws IOException, ServletException {
MyServletRequestWrapper httpReq = new MyServletRequestWrapper((HttpServletRequest)req);
HttpServletResponse httpRes = (HttpServletResponse)res;
HttpSession session = httpReq.getSession();
httpRes.addHeader(ACCESS_CONTROL_ALLOW_ORIGIN, "*");
httpRes.addHeader(ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");
if (((HttpServletRequest) req).getMethod().equals("OPTIONS")){
httpRes.addHeader(ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, OPTIONS, PUT, DELETE");
httpRes.addHeader(ACCESS_CONTROL_ALLOW_HEADERS, "content-type, x-requested-with, x-requested-by");
}
filterChain.doFilter(httpReq, httpRes);
}
ヘッダーの上のすべての単一の GET 応答が追加されると、正常に機能します。POSTリクエストを使用したいときに問題が発生します。Ajax.postを使用すると、最初にサーバーがOPTIONSリクエストを取得し、次のエラーが発生しました:
Failed executing OPTIONS [REST_PATH]
org.jboss.resteasy.spi.DefaultOptionsMethodException: No resource method found for options, return OK with Allow header
上記のエラーを解決するために、POST ([REST_PATH]) と同じパスで @OPTION アノテーションを使用してメソッド呼び出しを追加しようとしました。その場合、添付された jaxrs ライブラリに OPTION.class があっても、シンボル :class OPTIONS が見つからないことが javac から通知されました。
それを修正するためのアイデアはありますか?手がかりにとても感謝しています。