Почему NPE приводит к краху JVM?
Мы используем Struts2 для корпоративного приложения, и оно выходит из строя из-за NPE. Исключение происходит в методе обработки ошибок действия. Я предполагаю, что он пытается вызвать метод обработки ошибок рекурсивно, потому что когда он пытается обработать ошибку, он каждый раз получает новый NPE. Затем JVM падает.
Но мой вопрос: может ли это быть настоящей причиной сбоя, может ли рекурсивное исключение вызвать сбой JVM? В какой ситуации находится JVM, как это исключение влияет на состояние потока во времени? Как видите, я не очень информативен в отношении того, как JVM обрабатывает потоки. Спасибо за ваши ответы.
Хорошего дня.
Изменить: Извините, ребята, вот часть трассировки стека, которую я получаю. Stacktrace повторяется бесконечно.
java.lang.NullPointerException
at tr.com.innova.tmh.web.isemri.actions.AbonelikIslemleriUtility.jsUrunNumaraDizisiOlustur(AbonelikIslemleriUtility.java:47)
at tr.com.innova.tmh.web.siparis.actions.SiparisActionSS.errorDispatcher(SiparisActionSS.java:96)
at sun.reflect.GeneratedMethodAccessor3132.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:280)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:216)
at tr.com.innova.tmh.web.utils.actions.TMHDispatchAction.execute(TMHDispatchAction.java:224)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.tmh.web.ss.filters.WebSecurityFilter.doFilter(WebSecurityFilter.java:62)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.tmh.web.ss.filters.WebLoginFilter.doFilter(WebLoginFilter.java:62)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.tmh.web.surecLog.filter.OHMLoggerFilter.doFilter(OHMLoggerFilter.java:75)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.common.web.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:176)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.tmh.web.utils.filters.XSSFilter.doFilter(XSSFilter.java:16)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:527)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:253)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:320)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.tmh.web.ss.filters.WebSecurityFilter.doFilter(WebSecurityFilter.java:62)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.tmh.web.ss.filters.WebLoginFilter.doFilter(WebLoginFilter.java:62)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.tmh.web.surecLog.filter.OHMLoggerFilter.doFilter(OHMLoggerFilter.java:75)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.common.web.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:176)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at tr.com.innova.tmh.web.utils.filters.XSSFilter.doFilter(XSSFilter.java:16)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:527)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:253)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1069)
at org.apache.struts.tiles.TilesRequestProcessor.doForward(TilesRequestProcessor.java:274)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:455)
at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(TilesRequestProcessor.java:320)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:279)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
1 ответ
Это было, как я подозревал. Цикл обработки ошибок вызывает рекурсивный NPE, и, как сказал Polygnome, JVM аварийно завершает работу из-за StackruError или OutOfMemoryError. В любом случае, спасибо, ребята.