我正在开发一个由遗留JSP、servlet代码和新JSF代码组成的应用程序。我遇到了一个无法解决的StackOverlow错误。有没有人看到或经历过类似的情况,并能帮助我在这种类型的混合JSP/JSF应用程序中找到正确的方向?
我很确定JSF框架试图在一个非JSF页面上做一些事情,并且在JSF框架中陷入了一个递归循环。我在集群WebLogic 12.1.3环境中使用JSF2.1.20。我不会在EAR或WAR文件中捆绑任何JSF库,而是使用所有东西的服务器版本。
我做了相当多的搜索,并发现了其他类似的问题,但到目前为止,这些解决方案都没有对我产生任何影响。主要的区别似乎是,我的错误是相当随机的,并不总是发生在同一地点或相同的对象上。
我的堆栈追踪在下面..。一旦我到达“由”部分,我可以看到相同的行重复一遍又一遍,表明我的应用程序试图找到或做一些与JSF和失败有关的事情。我没有粘贴整个堆栈跟踪,因为它只会在1000+期间重复第286行到第143行,直到堆栈最终填满并抛出错误。
2017-07-05 10:06:00,133 [[ACTIVE] ExecuteThread: '11' for queue: 'weblogic.kernel.Default (self-tuning)'] FATAL SecurityFilter Msg=[EVENT FAILURE xxxxxxx -> /SecurityFilter] Error in ESAPI security filter: java.lang.StackOverflowError UserId=xxxxxxx
javax.servlet.ServletException: java.lang.StackOverflowError
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:387)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:243)
at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:600)
at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:275)
at myapp.pkg.AcctSummaryAction.perform(AcctSummaryAction.java:158)
at myapp.pkg.DispatcherSec.processRequest(DispatcherSec.java:119)
at myapp.pkg.DispatcherSec.doGet(DispatcherSec.java:130)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:844)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:280)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:254)
at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:136)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:346)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:25)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at myapp.navigation.JsfRequestFilter.doFilter(JsfRequestFilter.java:187)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at myapp.esapi.filters.SecurityFilter.doFilter(SecurityFilter.java:147)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at myapp.common.MdcFilter.doFilter(MdcFilter.java:68)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at myapp.navigation.DisplayProcessingFilter.doFilter(DisplayProcessingFilter.java:118)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at myapp.common.NoCacheFilter.doFilter(NoCacheFilter.java:68)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:79)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3431)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3397)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:57)
at weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2280)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2196)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1621)
at weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:256)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:311)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:263)
Caused by: java.lang.StackOverflowError
at javax.faces.context.FacesContext.getCurrentInstance(FacesContext.java:832)
at javax.faces.FactoryFinder$FactoryManagerCache.getApplicationFactoryManager(FactoryFinder.java:715)
at javax.faces.FactoryFinder$FactoryManagerCache.access$100(FactoryFinder.java:690)
at javax.faces.FactoryFinder.getFactory(FactoryFinder.java:340)
at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:141)
at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:143)
at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:143)
at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:143)
at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
at com.sun.faces.config.InitFacesContext.getApplication(InitFacesContext.java:143)
at com.sun.faces.util.MessageFactory.getApplication(MessageFactory.java:286)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:158)
at com.sun.faces.util.MessageFactory.getMessage(MessageFactory.java:136)
at com.sun.faces.util.MessageUtils.getExceptionMessageString(MessageUtils.java:386)
at com.sun.faces.application.ApplicationAssociate.<init>(ApplicationAssociate.java:203)
at com.sun.faces.application.ApplicationImpl.<init>(ApplicationImpl.java:214)
at com.sun.faces.application.ApplicationFactoryImpl.getApplication(ApplicationFactoryImpl.java:107)
...
Etc............ (lines 286 to 107 repeat over and over)我已经研究过一些对我没有帮助的例子:
编辑:我想我已经将问题追溯到文件中的一个设置:(参见下面)。一旦删除了这个设置,我就无法重现错误。看起来,这个应用程序在集群中的服务器之间序列化得不太好。内部WebLogic日志显示了我的应用程序中随机类的复制错误。希望它能帮到别人。如果在接下来的几天测试中我的错误没有再次出现,我将返回并标记为已解决。
<?xml version = '1.0' encoding = 'windows-1252'?>
<weblogic-web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.5/weblogic-web-app.xsd"
xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app">
<jsp-descriptor>
<precompile>true</precompile>
</jsp-descriptor>
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
<session-descriptor>
<cookie-secure>true</cookie-secure>
<cookie-http-only>true</cookie-http-only>
<!--<persistent-store-type>replicated_if_clustered</persistent-store-type>-->
<url-rewriting-enabled>false</url-rewriting-enabled>
</session-descriptor>
</weblogic-web-app>EDIT2:,似乎还有一个库冲突。我没有将我的JSTL库和标记库与项目一起发送,因为它应该在服务器上。当我将我的部署更改为包含这个.jar (glassfish.jstl. must _1.0.0.0_1-2-2-0.jar)时,它也使我的许多错误消失了,所以我的应用程序不一定总是找到我认为它正在找到的库。
发布于 2017-07-29 17:35:29
我通过做一些事情来解决这个问题,结果是weblogic设置和库冲突的结合。详细情况见原文的编辑:
我在日志文件中没有看到更多的错误,而且自从包含这些更改之后,它已经相当稳定了。
https://stackoverflow.com/questions/44933197
复制相似问题