我们有一个大型Web应用程序,它广泛使用Apache Tiles进行页面组装。大多数情况下它工作正常,但偶尔会抛出一个StackOverflowError(下面的示例堆栈跟踪)。
事实上,这些定义每天使用数千次并且99,999%的时间工作表明这是一些奇怪的情况组合。有没有人知道用于浏览Apache Tiles定义并检查它们是否正确的方法或工具?还是蛮力追踪定义的唯一途径?多年来,很多人都触及了这个应用程序,这些瓷砖定义非常难看。如果有一些方法可以在没有人工跟踪的情况下验证它们,那就太棒了......
2014-03-18 10:35:24,171 ERROR [http-bio-8080-exec-275] org.apache.tiles.jsp.taglib.RenderTag - IO Error executing tag: JSPException including path '/WEB-INF/views/search/sitesearch.jsp'.
org.apache.tiles.util.TilesIOException: JSPException including path '/WEB-INF/views/search/myjsp.jsp'.
at org.apache.tiles.servlet.context.ServletUtil.wrapServletException(ServletUtil.java:232)
at org.apache.tiles.jsp.context.JspTilesRequestContext.include(JspTilesRequestContext.java:105)
at org.apache.tiles.jsp.context.JspTilesRequestContext.dispatch(JspTilesRequestContext.java:96)
at org.apache.tiles.renderer.impl.UntypedAttributeRenderer.write(UntypedAttributeRenderer.java:61)
at org.apache.tiles.renderer.impl.AbstractBaseAttributeRenderer.render(AbstractBaseAttributeRenderer.java:103)
at org.apache.tiles.impl.BasicTilesContainer.render(BasicTilesContainer.java:669)
... snip ...
Caused by: javax.servlet.ServletException: java.lang.StackOverflowError
at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:911)
at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:840)
at org.apache.jsp.WEB_002dINF.views.search.myjsp_jsp._jspService(myjsp_jsp.java:89)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:334)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:684)
at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:593)
at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:530)
at sun.reflect.GeneratedMethodAccessor235.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
... snip ...
对于缩写的堆栈跟踪感到抱歉,但整个事情真的很长。