NullPointerException в Spring Framework (или как?) - PullRequest
6 голосов
/ 31 мая 2011

Я столкнулся с очень странной проблемой и просто не знаю, с чего начать.В нашем рабочем приложении одна из наших страниц, кажется, выходит из строя произвольно - то есть иногда она работает, а иногда нет.

Веб-приложение работает под управлением 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

Это все, что нужно для трассировки стека.

Я не ожидаю, что кто-либо из вас найдет решение этой проблемы, но, надеюсь, вы сможетеНаправь меня в каком-то направлении - у меня больше нет идей ...

Ответы [ 4 ]

4 голосов
/ 31 мая 2011

Spring Framework с открытым исходным кодом, верно? Итак, давайте посмотрим, что там на 583 линии FrameworkServlet ...

Что мы можем найти там:

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 Framework. Итак, давайте посмотрим на хлопотливый doService метод ...

FrameworkServlet.doService является абстрактным, но реализован в DispatcherServlet, который вы, скорее всего, используете в своем проекте. Далее он вызывает doDispatch, который отправляет обработку запроса в контроллер.

И мои кишки чувство TELS мне, что противный NPE, что мы охотились здесь так упорно скрывается в коде контроллера ...

2 голосов
/ 31 мая 2011

Установите точку останова в вашей среде IDE для «остановки при броске» исключения NullPointerException (при необходимости подключите удаленный отладчик)

1 голос
/ 16 апреля 2013

У меня был такой же симптом с @Hoof. Но в моем случае это было в моей разработке ноутбука. И после перезапуска Stacktrace от первопричины tomcat теперь снова видно.

0 голосов
/ 31 мая 2011

Итак, исключение NullPointerException происходит во время выполнения сервлета, и это исключение перехватывается средой Spring, которая, похоже, не беспокоит его отображение.

Вам необходимо знать, где происходит это исключение NullPointerException.

Вот два возможных способа дальнейшего исследования:

  • Измените FrameworkServlet.java в источниках Spring, чтобы отображалась трассировка стека вызывающего исключения.
  • Оберните ваш сервлет try / catch, чтобы перехватить все исключения, как в:

    попробуй { ... ваш код сервлета ... } catch (RuntimeException e) { e.printStackTrace (); }

...