2009-09-28 16 views
5

Şu anda GWT ve Spring ile denemeler yapıyorum. Daha spesifik olarak, GreetingService örneğinin sunucu tarafında Spring ile çalışmasını sağlamak istedim.GWT + Spring: getServletContext() çağrısında NullPointerException çağrısı

bahsettiğim talimatları takip ve: Bu gerçekleştirmeye yönelik mevcut birkaç makaleyi (bazılarınız ilginizi çekebilir beri buraya bağlayarak ediyorum) vardır GWT tarafından barındırılan modda her şeyi başlatırken, sunucu tarafındaki hizmet de başarıyla çağrılır. Ancak, yanıt istemciye geri gönderilmeden önce, getServletContext(), bazı Spring framework sınıfı tarafından dahili olarak çağrıldığında bir NullPointerException alırım. StackTrace takip ediyor: Java sürümünü 1.6
Mac OSX üzerinde gelişen:

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 

daha da fazla bilgi

: Burada
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) 

benim sunucuda dağıtmak kütüphanelerini listesi/GWT modu barındırılan dizin .0_15.

Burada bir sorunun ne olabileceğine dair bir ipucu var mı?

Çok fazla.

cevap

4

Sadece sorunu buldum. GWTController uygulamasının Servlet içeriği farkında olması gerekiyor. Bu, ServletContextAware arabirimini uygulayarak ve içeriğin enjekte edilmesine izin vermek için getServletContext() ve setServletContext(..) yöntemlerini geçersiz kılarak yapılabilir.

Sadece bu sorunu açıklayan ve çözümü daha ayrıntılı olarak sağlayan published a blog post. Ipucu için

0

Benzer bir sorunla karşılaştık ve javax.servlet.GenericServlet numaralı private transient ServletConfig config alanının boş olduğunu gördük. GWT'nin RemoteServiceServlet numarası log(...)'u arıyordu; bu da config null olması nedeniyle NPE'ed olan getServletName() olarak adlandırıldı.

Çözümümüz getServletName() overide oldu:

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(); 
} 

Sen ServletConfig ayarlı değil anlamaya veya yaptığımız gibi bazı yöntemleri geçersiz olabilir.

+0

thx, ama benim sorunum daha da kötü görünüyor. Sadece ServletName üzerinde bir NPE yok, ancak bir bütün olarak ServletContext üzerinde zaten. Sorun servlet konteynırında gibi görünüyor ... Belki de GWT ile bir OSX sorunu? – Juri