1
私は単一のコントローラを持つJava MVCアプリケーションを持っています。データベースは、サーブレット・コンテキスト・リスナー・クラスで初期化されます。私は、コントローラサーブレットとWebサービスクラスにサーブレットコンテキスト属性としてデータベースオブジェクトを渡しています。コントローラサーブレットでは、 "db"属性は正常に動作していますが、Webサービスクラスではnullと不正な状態の例外が発生しています。ServletContext属性は、ジャージインプリメンテーションの安らかなWebサービスを介してアクセスする場合はnullです。
エラースタックトレース -
javax.servlet.ServletException: A MultiException has 2 exceptions. They
are:
1. java.lang.NullPointerException
2. java.lang.IllegalStateException: Unable to perform operation: create on
com.home.mystorywriter.UserWS
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489)
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java: 388)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java: 341)
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java: 228)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
java.lang.NullPointerException
at com.home.mystorywriter.UserWS.<init>(UserWS.java:36)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
WebServiceクラス
package com.home.mystorywriter;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import com.google.gson.Gson;
@Path("/users")
public class UserWS {
@Context
private HttpServletRequest req;
private HttpServletResponse res;
private ServletContext context ;
DAOdb db = (DAOdb)req.getServletContext().getAttribute("db");
@GET
@Produces(MediaType.APPLICATION_JSON)
@Path("allUsers")
public String getAllUsers() {
List<Profile> userlist = db.getProfileListOfAllUsers();
Gson gson = new Gson();
String jsonUsers = gson.toJson(userlist);
return jsonUsers;
}
}
のWeb.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
si:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<listener>
<description>MyServletContextListener</description>
<listener-
class>com.home.mystorywriter.MyServletContextListener</listener-class>
</listener>
<servlet>
<servlet-name>StoryServlet</servlet-name>
<servlet-class>com.home.mystorywriter.StoryServlet</servlet-class>
</servlet>
<servlet>
<servlet-name>Jersey REST Service</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.home.mystorywriter</param-value>
</init-param>
<init-param>
<param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name>
<param-value>true</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>StoryServlet</servlet-name>
<url-pattern>/StoryServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Jersey REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>login.html</welcome-file>
</welcome-file-list>
</web-app>
問題を誤って確認しました。ヌル属性ではありません。その時点では 'req'はnullです。あなたは基本的にそれが注入される前にそれにアクセスしようとしています。 – BalusC
正しい状況でご案内いただきありがとうございます!はい、注入はリソースレベルで行われます。以下のコードは正常に動作しています。 – bodhi