我正在开发一个混合了传统JSP servlet代码和较新的JSF代码的应用程序。我遇到了一个我无法解决的StackOverlow错误。有没有人见过或经历过类似的事情,可以帮助我在这种混合JSP/JSF应用程序上找到正确的方向?
我很确定JSF框架正在尝试在非JSF页面上做一些事情,并且在JSF框架中陷入了递归循环。我正在集群WebLogic 12.1.3环境中使用JSF 2.1.20。我没有在EAR或WAR文件中捆绑任何JSF库,我使用的是所有东西的服务器版本。
我已经做了相当多的搜索,并发现了其他类似的问题,但到目前为止,没有任何解决方案对我有任何影响。主要的区别似乎是我的错误是非常随机的,并不是总是发生在同一个地方或同一个物体上。
我的堆栈跟踪在下面。。。一旦我进入“原因”部分,我可以看到同样的行反复出现,表明我的应用程序正在尝试寻找JSF或使用JSF做一些事情,但失败了。我没有粘贴整个堆栈跟踪,因为它只是不断重复第286到143行1000次,直到堆栈最终填满并抛出错误。
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文件:“持久存储类型=已复制的(如果集群的话)”(见下文)。一旦我删除了这个设置,我就无法重现错误。这个应用程序在我的集群中的服务器之间的序列化似乎不是很好。内部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_1.0.0.0_1-2-2-0.jar)时,它也消除了我的许多错误,所以我的应用程序一定不是一直在寻找我认为它在寻找的库。
我通过做一些事情来解决它,这个问题最终是网络环境和库冲突的结合。完整的细节在原始帖子的编辑中:
我没有在日志文件中看到任何错误,自从包含这些更改以来,它一直非常稳定。
问题内容: 我是Java的新手。我正在编写一个类,其中构造函数必须检查price参数并确保它不是负数。如果它是负数,则必须将价格设置为零。我检查价格时收到stackoverflow错误。我可以为我做错的事寻求帮助吗? 问题答案: 您的方法将自行调用而不是进行检查。在这种情况下,这导致无限递归。
我想强制执行一个自定义的“/login”endpoint,该endpoint检查oauth-Access令牌并在令牌经过验证后启动会话。 这是我的登录控制器: 这是我的WebSecurityConfig: 问题是如果我调用“/login/方法,我会得到一个StackOverflow Error。 我已经找到了这一点,并尝试了authenticationManager和authenticationM
我在java中使用play框架(ebean是我的ORM),我有这个类: 我正在尝试使用Gson库对其进行序列化。我试着这么做 但我总是会犯这样的错误: 我读了很多关于这方面的书,我知道在序列化Reservation对象时,可能会在某个地方发生无限循环,但由于该对象与任何其他类没有任何关系,我不明白为什么会发生这种情况。
我已经知道有很多问题都在问同样的问题,但它们对我不起作用- 它给出堆栈溢出错误。 有用但不合适的答案- 1)添加前的代码和添加后的代码-这一个作品,但不正常,应用程序变得非常慢。 还有其他方法可以帮我吗?谢谢。
我在使用HTTPUrlConnection时遇到了一些问题。代码基本上是在循环中运行的,每次都连接到不同的URL,检查响应,如果响应满足某些条件,则退出。我被StackOverflowerr搞砸了,但我不确定自己搞砸了什么。我没有使用