2009-09-28 4 views
5

현재 GWT와 Spring을 실험하고 있습니다. 더 구체적으로 GreetingService 샘플을 서버 측에서 Spring과 함께 사용하기를 원했습니다.GWT + Spring : getServletContext() 호출시 NullPointerException이 발생합니다.

내가 언급 한 지침을 따라이를 실현하기위한 가능한 기사의 커플 (여러분 중 일부는 관심이있을 수 있기 때문에 내가 여기에 연결하고있어)가 있습니다 GWT 호스팅 모드에서 모든 것을 시작하면 서버 측의 서비스도 성공적으로 호출됩니다. 하지만 응답이 클라이언트로 되돌아 오기 전에 getServletContext()가 일부 Spring 프레임 워크 클래스에 의해 내부적으로 호출 될 때 NullPointerException이 발생합니다. 스택 트레이스는 다음과 같다 : Java 버전 1.6을
맥 OSX에서 개발 :

antlr-3.0.1.jar 
appengine-api-1.0-sdk-1.2.5.jar 
appengine-api-labs-1.2.5.jar 
commons-logging.jar 
datanucleus-appengine-1.0.3.jar 
datanucleus-core-1.1.5.jar 
datanucleus-jpa-1.1.5.jar 
geronimo-jpa_3.0_spec-1.1.1.jar 
geronimo-jta_1.1_spec-1.1.1.jar 
geronimo-servlet_2.5_spec-1.2.jar 
gwt-servlet.jar 
jdo2-api-2.3-eb.jar 
org.springframework.asm-3.0.0.RC1.jar 
org.springframework.beans-3.0.0.RC1.jar 
org.springframework.context-3.0.0.RC1.jar 
org.springframework.context.support-3.0.0.RC1.jar 
org.springframework.core-3.0.0.RC1.jar 
org.springframework.expression-3.0.0.RC1.jar 
org.springframework.orm-3.0.0.RC1.jar 
org.springframework.web-3.0.0.RC1.jar 
org.springframework.web.servlet-3.0.0.RC1.jar 
spring-dao.jar 

에도 추가 정보를

가 : 여기
WARNING: Nested in org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException: 
java.lang.NullPointerException 
    at javax.servlet.GenericServlet.getServletContext(GenericServlet.java:163) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.doUnexpectedFailure(RemoteServiceServlet.java:284) 
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.doPost(RemoteServiceServlet.java:99) 
    at com.jsdev.devbook.server.GWTController.handleRequest(GWTController.java:51) 
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:781) 
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:726) 
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:636) 
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:556) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:713) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:806) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1093) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) 
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:121) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1084) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:360) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:712) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:405) 
    at com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:54) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:313) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:139) 
    at org.mortbay.jetty.Server.handle(Server.java:313) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:506) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:844) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:644) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:211) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:381) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:396) 
    at org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:442) 

내가 내 서버에 배포 libs와의 목록입니다/GWT 모드 디렉토리를 호스팅 .0_15.

누군가 여기서 문제가 될 수있는 단서가 있습니까?

많은 Thx.

답변

4

방금 ​​문제가 발견되었습니다. GWTController 구현은 서블릿 컨텍스트를 인식하도록 만들어야합니다. 이는 ServletContextAware 인터페이스를 구현하고 컨텍스트를 주입시키는 방법을 getServletContext()setServletContext(..) 무시하여 수행 할 수 있습니다.

이 문제를 설명하고 해결책을 더 자세하게 설명하는 published a blog post입니다.

0

우리는 비슷한 문제가있어서 javax.servlet.GenericServletprivate transient ServletConfig config 필드가 null이라는 것을 알았습니다. GWT의 RemoteServiceServlet은 으로 전화했는데 getServletName()config이 NPE로되어 있기 때문에 null입니다.

우리의 솔루션은 getServletName()를 오버라이드 (override)하는 것이었다 :

public String getServletName() { 
    // Override as GenericServlet does config.getServletName() which NPEs 
    // as config is null. This causes NPEs when the log(...) methods are 
    // invoked. 
    return service.getClass().getSimpleName(); 
} 

당신은 ServletConfig를 설정되지 않는 이유를 알아 내기 또는 우리가했던 것처럼 몇 가지 방법을 재정의 할 수 있습니다.

+0

힌트가 있지만 내 문제가 더 악화 된 것 같습니다. ServletName에는 NPE 만있는 것이 아니라 이미 ServletContext 전체에 NPE가 있습니다. 문제가 서블릿 컨테이너에있는 것처럼 보입니다 ... GWT의 OSX 문제일까요? – Juri

관련 문제