简体   繁体   English

运行Spring项目时出现空指针异常

[英]Null pointer exception while running Spring project

I am unable to figure out reason for NullPointer exception in my Spring project. 我无法在Spring项目中找出NullPointer异常的原因。 Sometime project works fine but some time its throwing null pointer Exception here is full stacktrace. 有时项目工作正常,但有时候它抛出空指针Exception在这里是完全stacktrace。

org.apache.jasper.JasperException: javax.servlet.ServletException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:585)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:322)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:184)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:155)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)

root cause

javax.servlet.ServletException: java.lang.NullPointerException
org.apache.jsp.redirect_jsp._jspService(index_jsp.java:72)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:322)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:184)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:155)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)

root cause

 java.lang.NullPointerException
org.apache.catalina.session.ManagerBase.generateSessionId(ManagerBase.java:807)
org.apache.catalina.session.ManagerBase.createSession(ManagerBase.java:653)
org.apache.catalina.connector.Request.doGetSession(Request.java:2892)
org.apache.catalina.connector.Request.getSession(Request.java:2315)
org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:898)
org.apache.catalina.connector.RequestFacade.getSession(RequestFacade.java:910)
javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:238)
javax.servlet.http.HttpServletRequestWrapper.getSession(HttpServletRequestWrapper.java:238)
org.apache.jasper.runtime.PageContextImpl._initialize(PageContextImpl.java:146)
org.apache.jasper.runtime.PageContextImpl.initialize(PageContextImpl.java:125)
org.apache.jasper.runtime.JspFactoryImpl.internalGetPageContext(JspFactoryImpl.java:112)
org.apache.jasper.runtime.JspFactoryImpl.getPageContext(JspFactoryImpl.java:65)
org.apache.jsp.redirect_jsp._jspService(redirect_jsp.java:53)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:322)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:116)
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:83)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:54)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.www.BasicAuthenticationFilter.doFilter(BasicAuthenticationFilter.java:150)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:182)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87)
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:184)
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:155)
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259)

I am also getting permgenspace error very often. 我也经常得到permgenspace错误。 is it related to this? 它与此有关吗? I changed my project and tomcat VM option (Using NetBean IDE) to: 我将我的项目和tomcat VM选项(使用NetBean IDE)更改为:

-XX:MaxPermSize=512m

I am using Netbeans IDE 7.3.1 , Apache Tomcat 7.0.37, Spring 3.1.1, Hibernate 3. 我使用的是Netbeans IDE 7.3.1,Apache Tomcat 7.0.37,Spring 3.1.1,Hibernate 3。

Its showing DelegatingFilterProxy in Exception. 它在Exception中显示DelegatingFilterProxy。 May be its because of security setting. 可能是因为安全设置。

    <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xmlns:security="http://www.springframework.org/schema/security"
   xsi:schemaLocation="http://www.springframework.org/schema/beans 
   http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
   http://www.springframework.org/schema/security 
   http://www.springframework.org/schema/security/spring-security-3.1.xsd">

<!-- This is where we configure Spring-Security  -->
<security:http auto-config="true" use-expressions="true" access-denied-page="/auth/denied" >
    <security:intercept-url pattern="/admin/**" access="hasRole('ROLE_ADMIN')"/>
    <security:intercept-url pattern="/auth/**" access="hasRole('ROLE_USER')"/>
    <security:form-login
        login-page="/index"
        authentication-failure-url="/index"
        default-target-url="/welcome"
        />
    <security:logout
        invalidate-session="true"
        logout-success-url="/index" />
</security:http>


<!-- A custom service where Spring will retrieve users and their corresponding access levels  -->
<bean id="loginService" class="com.tcs.ignite.ih.spring.service.LoginService"/>

<!--A service where spring will redirect to proper view after successfull login-->
<!--<bean id="loginSuccessHandler" class="com.tcs.ignite.ih.spring.controller.LoginSuccessHandler" />-->

<!-- Declare an authentication-manager to use a custom userDetailsService -->
<security:authentication-manager>
    <security:authentication-provider user-service-ref="loginService">
    </security:authentication-provider>
</security:authentication-manager>

</beans>

UPDATE : 更新:

When I am trying to access index file,welcome file for application defined in web.xml, with following URL 当我尝试访问索引文件时,欢迎使用以下URL在web.xml中定义的应用程序文件

localhost:8080/xxxx/index

I recieve following on browser: 我在浏览器上收到以下信息:

HTTP Status 500 - Could not get RequestDispatcher for [/WEB-INF/jsp/index.jsp]: Check that the corresponding file exists within your web application archive!

index.jsp in present in my directory. index.jsp目前在我的目录中。 Do i need to define mapping in spring security intercept url tag for /index? 我是否需要在/ index中定义spring security intercept url标签中的映射?

The root cause of your problem is a null sessionIdGenerator in tomcat ManagerBase. 问题的根本原因是tomcat ManagerBase中的null sessionIdGenerator。

A quick look at the code : it is possible only is the Manager didn't start yet, or if it is already stopped. 快速查看代码 :只有Manager可能尚未启动,或者它已经停止。 My guess here is that your code is using an "already stopped" manager. 我的猜测是你的代码正在使用“已经停止”的经理。

Correct me if I'm wrong, but I guess that you only have this crash after undeploy/deploy of your app (without restarting tomcat completely). 如果我错了,请纠正我,但我猜你在取消部署/部署你的应用程序后才会崩溃(不完全重启tomcat)。

From where this invalid instance of ManagerBase comes from ? 从这个无效的ManagerBase实例来自哪里?

Well, not easy to say, but I guess that it comes from a ThreadLocal variable not properly cleaned-up when your app is undeployed. 嗯,不容易说,但我猜它来自一个ThreadLocal变量,当你的应用程序被取消部署时,它没有被正确清理。 So, you can check your own code to see if your are not misusing a ThreadLocal variable (always clean up all your ThreadLocal variables in a finally block in you request filters). 因此,您可以检查自己的代码,看看您是否没有滥用ThreadLocal变量(总是清理请求过滤器中finally块中的所有ThreadLocal变量)。

If you don't find anything in your own code: 如果您在自己的代码中找不到任何内容:

Inspect carefully all logs (and especially warnings) that occurs when you undeploy/deploy your web-app, they are good chances that you will find something like "resource X cannot be released". 仔细检查取消部署/部署Web应用程序时发生的所有日志(尤其是警告),您很可能会发现“资源X无法释放”之类的内容。

Regarding your recurrent OutOfMemory error : it can be linked to this problem. 关于您的重复OutOfMemory错误:它可以链接到此问题。 Indeed, if some ThreadLocal variable aren't clean-up correctly when app is undeployed/deployed it is a memory leak and so at the end it can cause an OutOfMemory. 实际上,如果某个ThreadLocal变量在取消部署/部署应用程序时未正确清理,则会导致内存泄漏,因此最终会导致OutOfMemory。

I hope it helps. 我希望它有所帮助。 (Posting logs when app is undeployed/deployed may be interesting.) (在取消部署/部署应用程序时发布日志可能很有趣。)

The exception actually comes when the redirect page requires session and the page context setup machanism (PageContextImpl.java:146) tries to create a session. 当重定向页面需要会话并且页面上下文设置机制(PageContextImpl.java:146)尝试创建会话时,实际上会出现异常。 However the session id generator is somehow null this time 然而,这次会话id生成器以某种方式为null

    ManagerBase.java:807.....

     protected String generateSessionId() {

            String result = null;

            do {
                if (result != null) {                   
                    duplicates++;
                }

                result = sessionIdGenerator.generateSessionId();
//There is issue in the above line - sessionIdGenerator is null this time

            } while (sessions.containsKey(result));

            return result;
        }

Issue like this which occurs intermittently have been reported here and there is lots of comment on the issue. 像这样间歇性地发生的问题已经在这里报道并且对这个问题有很多评论。 See if there is some hint which can help you out. 看看是否有一些可以帮助你的提示。

Have you configured the view resolver in application context for the jsp? 您是否在jsp的应用程序上下文中配置了视图解析程序? like below 如下

<bean id="viewResolver"
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix" value="/pages/" />
            <property name="suffix" value=".jsp" />
            <property name="exposeContextBeansAsAttributes" value="true"/> 
</bean>

if it is configured then check whether the controller has the correct definition. 如果已配置,则检查控制器是否具有正确的定义。 if above are performed correctly, then it should be with the spring security configuration. 如果上面的操作正确,则应该使用spring安全配置。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM