java - GWT + Spring : NullPointerException on getServletContext() call

标签 java spring google-app-engine gwt

我目前正在试验 GWT 和 Spring。更具体地说,我想让 GreetingService 示例在服务器端与 Spring 一起工作。有几篇文章可用于实现这一点(我在这里链接它们,因为你们中的一些人可能感兴趣):

现在我按照提到的说明进行操作,在 GWT 托管模式下启动所有内容时,服务器端的服务也被成功调用。但是在将响应发送回客户端之前,当某些 Spring 框架类在内部调用 getServletContext() 时,我得到了一个 NullPointerException。堆栈跟踪如下:

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)

这是我在我的服务器/GWT 托管模式目录上部署的库列表:

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

更多信息:
在 Mac OSX 上开发,Java 版本 1.6.0_15。

有人知道这里的问题是什么吗?

非常感谢。

最佳答案

刚发现问题。 GWTController必须使 Servlet 上下文感知实现。这可以通过实现 ServletContextAware 接口(interface)并覆盖 getServletContext()setServletContext(..) 方法来实现,以便注入(inject)上下文。

我只是published a blog post更详细地描述了问题并提供了解决方案。

关于java - GWT + Spring : NullPointerException on getServletContext() call,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1489042/

相关文章:

java - 来自立体声但非两声道音频的 UnsupportedAudioFileException

java - Android,更改位图的亮度/暗度

java - 使用内在锁进入 block

java - 关于使用一个应用程序作为登录另一个应用程序的前端的建议

javascript - 使用 Jquery 的 Ajax 函数返回 400 错误

node.js - Websocket 无法在 Google App Engine 上运行

python - 在域之间使用 gae session

java - 后台线程复制集合并重新初始化原始集合,可能吗?

java - 在 spring 中将值从 Controller 传递到 html

java - 在 AppEngine 中安排任务