Spring 框架中的 NullPointerException(或者什么?)

问题描述 投票:0回答:5

我遇到了一个非常奇怪的问题,我根本不知道从哪里开始。在我们的工作应用程序中,我们的一个页面似乎有点任意地失败 - 也就是说,有时它可以工作,有时却不能。

Web 应用程序运行 Java 6、Spring 2.5.6 和 Hibernate 3.2.6。此外,我们正在使用 Javax.servlet 版本 3.0(可能相关)。

问题变得很困难,因为堆栈跟踪非常有限,这似乎不涉及我们的任何自定义代码(我们所有的类都以 com.isworld.* 开头)。
当提交表单并处理请求时,加载页面后会发生错误。请参阅下面的堆栈跟踪:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:583)
org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:511)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:265)
org.acegisecurity.intercept.web.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:107)
org.acegisecurity.intercept.web.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:72)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.ui.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:124)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.providers.anonymous.AnonymousProcessingFilter.doFilter(AnonymousProcessingFilter.java:125)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:81)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.ui.rememberme.RememberMeProcessingFilter.doFilter(RememberMeProcessingFilter.java:142)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.ui.AbstractProcessingFilter.doFilter(AbstractProcessingFilter.java:271)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.ui.logout.LogoutFilter.doFilter(LogoutFilter.java:110)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.context.HttpSessionContextIntegrationFilter.doFilter(HttpSessionContextIntegrationFilter.java:249)
org.acegisecurity.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:275)
org.acegisecurity.util.FilterChainProxy.doFilter(FilterChainProxy.java:149)
org.acegisecurity.util.FilterToBeanProxy.doFilter(FilterToBeanProxy.java:98)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

root cause

java.lang.NullPointerException

这就是堆栈跟踪的全部内容。

我不希望你们中的任何人想出解决这个问题的方法,但希望你们能给我指出一些方向 - 我没有更多的想法......

java spring exception servlets servlet-filters
5个回答
5
投票

Spring框架是开源的,对吗?那么让我们看看

FrameworkServlet
的583行有什么...

我们可以找到以下内容:

try {
    doService(request, response);
//omit a few catches...
} catch (Throwable ex) {
    failureCause = ex;
throw new NestedServletException("Request processing failed", ex); //line 583
}

所以异常来自

FrameworkServlet.doService
方法,并且由 Spring 框架正确处理。那么让我们来看看麻烦的
doService
方法...

FrameworkServlet.doService
是抽象的,但在您最有可能在项目中使用的
DispatcherServlet
中实现。此外,它还调用“doDispatch”,将请求的处理分派给控制器。

我的直觉告诉我,我们一直在这里寻找的令人讨厌的

NPE
隐藏在你的控制器代码中......


2
投票

在 IDE 中设置断点以“抛出 NullPointerException 时停止”(如有必要,请附加远程调试器)


1
投票

我和@Hoof有同样的症状。但就我而言,它是在我的开发笔记本电脑中。重新启动 tomcat 后,现在可以再次看到根本原因的 Stacktrace。


0
投票

因此,在servlet执行过程中发生了NullPointerException,并且这个异常被Spring框架捕获,而Spring框架似乎并没有费心去显示它。

您需要知道这个 NullPointerException 发生在哪里。

以下是进一步调查的两种可能方法:

  • 更改 Spring 源中的 FrameworkServlet.java,以便显示导致异常的堆栈跟踪。
  • 用 try/catch 包装 servlet 以捕获所有异常,如下所示:

    尝试{ ...您的servlet代码... } catch (RuntimeException e) { e.printStackTrace(); }


0
投票

我说的是啊骗子,就是这样,听起来很有趣我很遗憾听到你的困境。锤子我说。我说我说用锤子打我的孩子。把它切成碎片,就像你讨厌那些老鼠一样,然后离开舞台。

© www.soinside.com 2019 - 2024. All rights reserved.