1

ジャージーを使用してRESTWebサービスを開発していますが、ユーザーを認証するためにWebサービスメソッドからサーブレットを呼び出す必要があります。以下のコードを実行すると例外が発生します。

@Path("/server")
public class WebServer {
    @Resource
    private WebServiceContext context;  

    @POST
    @Path("/post")
    @Consumes(MediaType.APPLICATION_JSON)
    public Response createTrackInJSON(Track track) throws IOException, ServletException { 
        ServletContext servletContext = (ServletContext) context.getMessageContext()
            .get(MessageContext.SERVLET_CONTEXT); // Here I am getting NPE

        HttpServletRequest request = (HttpServletRequest) context.getMessageContext()
            .get(MessageContext.SERVLET_REQUEST);

        HttpServletResponse response = (HttpServletResponse) context.getMessageContext()
            .get(MessageContext.SERVLET_RESPONSE);

        request.setAttribute("username", track.getUsername());
        request.setAttribute("password", track.getPassword());
        servletContext.getRequestDispatcher("/LoginAction").include(request, response);

        String loginStatus = request.getParameter("loginStatus");
        String Token = request.getParameter("Token");
        String result = ""+track;
        return Response.status(200).entity(result).build();
    }
}

例外は次のとおりです。

com.webservices.server.WebServer.createTrackInJSON(WebServer.java:36)のjava.lang.NullPointerException...servletContextがnullです

Webサービスでサーブレットコンテキストを取得する方法を決定するのを手伝ってください。

4

2 に答える 2

3

@Context アノテーションを使用して、正しいクラスを注入します。サーブレットのリクエストおよびレスポンス オブジェクトを直接注入することもできます。

import jax.ws.rs.core.Context;

@Path("/server")
public class WebServer {
    @Context 
    private ServletContext context; 

    @Context
    private HttpServletRequest request;

    @Context
    private HttpServletResponse response;

    // ...
}
于 2012-11-30T01:46:04.703 に答える
0

代わりにjavax.ws.rs.core.Contextを使用します。

@Context
public void setServletContext(ServletContext context) {
  // ...
}
于 2012-11-29T17:54:36.933 に答える