Page with nested layouts causes separate tag to execute in a page context without supplied attributes

Description

We are currently running on an older version of stripes (either 1.5.0 or 1.5.1 with the patch for applied) and are looking to upgrade, but have run into a couple of what appear to be bugs.

First, when trying Stripes 1.5.4 (I first tried 1.5.8, then worked my way back to a working version in 1.5.3, then started forward one version at a time), we run into what appears to be an issue with pages that have nested layout renders and the way they handle page contexts. Our standard layout definition for displaying most entities in the system uses jsp:includes to grab various standard navigational elements and then uses two tags to provide a title bar and a left hand menu to wrap around the basic body component implemented by whatever page is using the layout.

The left hand menu tag takes a couple of parameters and supplies them to a JavaBean created via jsp:useBean. The title tag takes some of the same data but then uses nested layout renders to render the various drop-down menus in the title bar. One layout render is used to generate the entire drop-down menu and then further nested layouts are used to render each button on the drop-down menu.

When the page is executed, the left hand menu tag gets executed several times. I suspect this is being executed roughly once per sub-sub-layout render in the title tag plus once for the page itself. In one of these invocations, the page context for the main page contains the necessary data (the "data" and "myProperty" variables in the attached simplified example) but in the others it does not and the main page thus passes null to the tag. The JavaBean isn't expecting nulls and an NPE results. If I remove the sub-sub-layout renders from the title tag (by replacing the content of the "dropMenus" layout component in TestActionBeanTitle.tag with static text), this does not occur.

While I can make the JavaBean threadsafe (the results of the invocations where the parameters are null seem to get thrown away from what I can tell, so returning nonsense "works"), I'm nervous about other c:if or c:choose logic also being impacted by unexpected and logically incorrect nulls. I suppose in theory there's also a potential concern about performance issues due to tags potentially being executed many more times than is necessary.

I know this does not occur in 1.5.3 and does in 1.5.4. I'm uncertain if it might be addressed in a later version, as I encounter a different issue with 1.5.5 through 1.5.8 with this sample page, even with the sub-sub-layout renders removed (I'll be opening a separate issue for that).

I've tried this in our current JBoss 5.1.0 environment we use in production and also in a vanilla tomcat 8.0.12 installation (my only modification was to include the jstl 1.2 library in the tomcat lib directory). The behavior seems to be the same in either case.

Happy to try other ideas and help with the investigation. I tried working through the various Stripes tags and page context manipulation to try and figure out what might be going on, but my brain kept getting tied up in knots.

Sample log with stripes debug turned on:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 2014-09-11 08:50:36,406 INFO localhost-startStop-1 [StripesFilter] Stripes Initialization Complete. Version: 1.5.4, Build: 1.5.4 2014-09-11 08:50:49,239 DEBUG http-nio-8080-exec-1 [StripesFilter] LocalePicker selected locale: en_US 2014-09-11 08:50:49,239 DEBUG http-nio-8080-exec-1 [StripesFilter] LocalePicker did not pick a character encoding, using default: null 2014-09-11 08:50:49,241 DEBUG http-nio-8080-exec-1 [UrlBindingFactory] Matched /fundaccounting/Test.action to /fundaccounting/Test.action 2014-09-11 08:50:49,251 INFO http-nio-8080-exec-1 [ExpressionValidator] Expression validation will be performed using: net.sourceforge.stripes.validation.expression.Jsp21ExpressionExecutor 2014-09-11 08:50:49,253 DEBUG http-nio-8080-exec-1 [ExecutionContext] Transitioning to lifecycle stage RequestInit 2014-09-11 08:50:49,255 DEBUG http-nio-8080-exec-1 [ExecutionContext] Transitioning to lifecycle stage ActionBeanResolution 2014-09-11 08:50:49,255 DEBUG http-nio-8080-exec-1 [UrlBindingFactory] Matched /fundaccounting/Test.action to /fundaccounting/Test.action 2014-09-11 08:50:49,255 DEBUG http-nio-8080-exec-1 [UrlBindingFactory] Matched /fundaccounting/Test.action to /fundaccounting/Test.action 2014-09-11 08:50:49,260 DEBUG http-nio-8080-exec-1 [ExecutionContext] Transitioning to lifecycle stage HandlerResolution 2014-09-11 08:50:49,261 DEBUG http-nio-8080-exec-1 [UrlBindingFactory] Matched /fundaccounting/Test.action to /fundaccounting/Test.action 2014-09-11 08:50:49,261 DEBUG http-nio-8080-exec-1 [DispatcherHelper] Resolved event: defaultResolution; will invoke: TestActionBean.defaultResolution() 2014-09-11 08:50:49,263 DEBUG http-nio-8080-exec-1 [ExecutionContext] Transitioning to lifecycle stage BindingAndValidation 2014-09-11 08:50:49,266 DEBUG http-nio-8080-exec-1 [DefaultValidationMetadataProvider] Loaded validations for ActionBean TestActionBean: <none> 2014-09-11 08:50:49,266 DEBUG http-nio-8080-exec-1 [DefaultActionBeanPropertyBinder] Running required field validation on bean class com.backstopsolutions.stripes.TestActionBean 2014-09-11 08:50:49,268 DEBUG http-nio-8080-exec-1 [ExecutionContext] Transitioning to lifecycle stage CustomValidation 2014-09-11 08:50:49,270 DEBUG http-nio-8080-exec-1 [ExecutionContext] Transitioning to lifecycle stage EventHandling 2014-09-11 08:50:49,271 DEBUG http-nio-8080-exec-1 [ExecutionContext] Transitioning to lifecycle stage ResolutionExecution 2014-09-11 08:50:49,272 DEBUG http-nio-8080-exec-1 [HttpCacheInterceptor] Looking for HttpCache on com.backstopsolutions.stripes.TestActionBean.defaultResolution() 2014-09-11 08:50:49,274 DEBUG http-nio-8080-exec-1 [UrlBindingFactory] No URL binding matches /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:49,274 DEBUG http-nio-8080-exec-1 [UrlBindingFactory] No URL binding matches /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:49,779 DEBUG http-nio-8080-exec-1 [LayoutContext] Push context /WEB-INF/stripes/testAction.jsp -> /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:49,780 DEBUG http-nio-8080-exec-1 [LayoutWriter] Create layout writer wrapped around org.apache.jasper.runtime.JspWriterImpl@722fd5ba 2014-09-11 08:50:49,780 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start layout init in /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:49,780 DEBUG http-nio-8080-exec-1 [LayoutWriter] Failed to flush buffer: Illegal to flush within a custom tag 2014-09-11 08:50:49,781 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Register component embeddedStyle with /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:49,783 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Register component embeddedJavascript with /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:49,783 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Register component body with /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:49,783 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] End layout init in /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:49,783 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start layout exec in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Invoke component renderer for direct render of "embeddedStyle" 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] Render component "embeddedStyle" in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] Start execute "embeddedStyle" in /WEB-INF/stripes/testAction.jsp -> /layouts/testActionBeanLayout.jsp from /WEB-INF/stripes/testAction.jsp -> /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start component render phase for embeddedStyle in /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Render embeddedStyle in /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for embeddedJavascript in /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for body in /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] End component render phase for null in /WEB-INF/stripes/testAction.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] End execute "embeddedStyle" in /WEB-INF/stripes/testAction.jsp -> /layouts/testActionBeanLayout.jsp from /WEB-INF/stripes/testAction.jsp -> /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,176 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Invoke component renderer for direct render of "embeddedHead" 2014-09-11 08:50:50,177 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No component renderer in page context for 'embeddedHead' 2014-09-11 08:50:50,177 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Component was not present in /WEB-INF/stripes/testAction.jsp so using default content from /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,179 DEBUG http-nio-8080-exec-1 [LayoutContext] Push context /layouts/testActionBeanLayout.jsp -> /layouts/test-title-box.jsp 2014-09-11 08:50:50,179 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start layout init in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,179 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Register component title with /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,179 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Register component dropMenus with /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,179 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] End layout init in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,180 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start layout exec in /layouts/test-title-box.jsp 2014-09-11 08:50:50,253 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Invoke component renderer for direct render of "title" 2014-09-11 08:50:50,253 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] Render component "title" in /layouts/test-title-box.jsp 2014-09-11 08:50:50,253 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] Start execute "title" in /layouts/testActionBeanLayout.jsp -> /layouts/test-title-box.jsp from /layouts/testActionBeanLayout.jsp -> /layouts/test-title-box.jsp 2014-09-11 08:50:50,254 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for embeddedStyle in /layouts/test-title-box.jsp 2014-09-11 08:50:50,254 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for embeddedHead in /layouts/test-title-box.jsp 2014-09-11 08:50:50,254 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start component render phase for title in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,254 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Render title in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,256 DEBUG http-nio-8080-exec-1 [UrlBindingFactory] Matched /fundaccounting/Test.action to /fundaccounting/Test.action 2014-09-11 08:50:50,256 DEBUG http-nio-8080-exec-1 [UrlBindingFactory] Matched /fundaccounting/Test.action to /fundaccounting/Test.action 2014-09-11 08:50:50,257 DEBUG http-nio-8080-exec-1 [DefaultFormatterFactory] Caching Formatter for class java.lang.String => class net.sourceforge.stripes.format.ObjectFormatter 2014-09-11 08:50:50,258 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for dropMenus in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,258 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] End component render phase for null in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,258 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for body in /layouts/test-title-box.jsp 2014-09-11 08:50:50,261 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for embeddedJavascript in /layouts/test-title-box.jsp 2014-09-11 08:50:50,261 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] End execute "title" in /layouts/testActionBeanLayout.jsp -> /layouts/test-title-box.jsp from /layouts/testActionBeanLayout.jsp -> /layouts/test-title-box.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Invoke component renderer for direct render of "dropMenus" 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] Render component "dropMenus" in /layouts/test-title-box.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] Start execute "dropMenus" in /layouts/testActionBeanLayout.jsp -> /layouts/test-title-box.jsp from /layouts/testActionBeanLayout.jsp -> /layouts/test-title-box.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for embeddedStyle in /layouts/test-title-box.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for embeddedHead in /layouts/test-title-box.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start component render phase for dropMenus in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for title in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Render dropMenus in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutContext] Push context /layouts/testActionBeanLayout.jsp -> /layouts/test-button-list.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start layout init in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Register component topButton with /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Register component topList with /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] End layout init in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,262 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start layout exec in /layouts/test-button-list.jsp 2014-09-11 08:50:50,328 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] Invoke component renderer for direct render of "topButton" 2014-09-11 08:50:50,328 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] Render component "topButton" in /layouts/test-button-list.jsp 2014-09-11 08:50:50,328 DEBUG http-nio-8080-exec-1 [LayoutComponentRenderer] Start execute "topButton" in /layouts/testActionBeanLayout.jsp -> /layouts/test-button-list.jsp from /layouts/testActionBeanLayout.jsp -> /layouts/test-button-list.jsp 2014-09-11 08:50:50,328 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for embeddedStyle in /layouts/test-button-list.jsp 2014-09-11 08:50:50,329 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for embeddedHead in /layouts/test-button-list.jsp 2014-09-11 08:50:50,329 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] Start component render phase for topButton in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,329 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for title in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,329 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for dropMenus in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,329 DEBUG http-nio-8080-exec-1 [LayoutRenderTag] End component render phase for topButton in /layouts/testActionBeanLayout.jsp 2014-09-11 08:50:50,329 DEBUG http-nio-8080-exec-1 [LayoutComponentTag] No-op for body in /layouts/test-button-list.jsp 2014-09-11 08:50:50,334 ERROR http-nio-8080-exec-1 [LayoutComponentTag] Unhandled exception trying to render component "topButton" to a string in context /layouts/testActionBeanLayout.jsp -> /layouts/test-button-list.jsp org.apache.jasper.JasperException: An exception occurred processing JSP page /layouts/testActionBeanLayout.jsp at line 26 23: <stripes:layout-component name="body"/> 24: </div> 25: <div id="left"> 26: <stab:menu data="${data}" myProperty="${myProperty}"/> 27: </div> 28: </div> 29: <script type="text/javascript"> Stacktrace: at org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:568) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:455) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:335) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523) at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:934) at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:675) at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:669) at net.sourceforge.stripes.tag.layout.LayoutComponentRenderer.write(LayoutComponentRenderer.java:133) at net.sourceforge.stripes.tag.layout.LayoutComponentTag.doStartTag(LayoutComponentTag.java:158) at org.apache.jsp.layouts.test_002dbutton_002dlist_jsp._jspx_meth_stripes_005flayout_002dcomponent_005f0(test_002dbutton_002dlist_jsp.java:146) at org.apache.jsp.layouts.test_002dbutton_002dlist_jsp._jspx_meth_stripes_005flayout_002ddefinition_005f0(test_002dbutton_002dlist_jsp.java:117) at org.apache.jsp.layouts.test_002dbutton_002dlist_jsp._jspService(test_002dbutton_002dlist_jsp.java:82) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:335) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523) at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:934) at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:675) at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:669) at org.apache.jasper.runtime.JspContextWrapper.include(JspContextWrapper.java:319) at net.sourceforge.stripes.tag.layout.LayoutRenderTag.doEndTag(LayoutRenderTag.java:141) at org.apache.jsp.tag.webTestActionBeanTitle_tag._jspx_meth_stripes_005flayout_002drender_005f1(webTestActionBeanTitle_tag.java:302) at org.apache.jsp.tag.webTestActionBeanTitle_tag._jspx_meth_stripes_005flayout_002dcomponent_005f1(webTestActionBeanTitle_tag.java:262) at org.apache.jsp.tag.webTestActionBeanTitle_tag._jspx_meth_stripes_005flayout_002drender_005f0(webTestActionBeanTitle_tag.java:143) at org.apache.jsp.tag.webTestActionBeanTitle_tag.doTag(webTestActionBeanTitle_tag.java:103) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspx_meth_stab_005ftitle_005f0(testActionBeanLayout_jsp.java:228) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspx_meth_stripes_005flayout_002ddefinition_005f0(testActionBeanLayout_jsp.java:145) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspService(testActionBeanLayout_jsp.java:90) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:335) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523) at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:934) at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:675) at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:669) at net.sourceforge.stripes.tag.layout.LayoutComponentRenderer.write(LayoutComponentRenderer.java:133) at net.sourceforge.stripes.tag.layout.LayoutComponentTag.doStartTag(LayoutComponentTag.java:158) at org.apache.jsp.layouts.test_002dtitle_002dbox_jsp._jspx_meth_stripes_005flayout_002dcomponent_005f1(test_002dtitle_002dbox_jsp.java:170) at org.apache.jsp.layouts.test_002dtitle_002dbox_jsp._jspx_meth_stripes_005flayout_002ddefinition_005f0(test_002dtitle_002dbox_jsp.java:127) at org.apache.jsp.layouts.test_002dtitle_002dbox_jsp._jspService(test_002dtitle_002dbox_jsp.java:83) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:335) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523) at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:934) at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:675) at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:669) at org.apache.jasper.runtime.JspContextWrapper.include(JspContextWrapper.java:319) at net.sourceforge.stripes.tag.layout.LayoutRenderTag.doEndTag(LayoutRenderTag.java:141) at org.apache.jsp.tag.webTestActionBeanTitle_tag._jspx_meth_stripes_005flayout_002drender_005f0(webTestActionBeanTitle_tag.java:147) at org.apache.jsp.tag.webTestActionBeanTitle_tag.doTag(webTestActionBeanTitle_tag.java:103) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspx_meth_stab_005ftitle_005f0(testActionBeanLayout_jsp.java:228) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspx_meth_stripes_005flayout_002ddefinition_005f0(testActionBeanLayout_jsp.java:145) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspService(testActionBeanLayout_jsp.java:90) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:335) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) at org.apache.catalina.core.ApplicationDispatcher.doInclude(ApplicationDispatcher.java:584) at org.apache.catalina.core.ApplicationDispatcher.include(ApplicationDispatcher.java:523) at org.apache.jasper.runtime.JspRuntimeLibrary.include(JspRuntimeLibrary.java:934) at org.apache.jasper.runtime.PageContextImpl.doInclude(PageContextImpl.java:675) at org.apache.jasper.runtime.PageContextImpl.include(PageContextImpl.java:669) at net.sourceforge.stripes.tag.layout.LayoutRenderTag.doEndTag(LayoutRenderTag.java:141) at org.apache.jsp.WEB_002dINF.stripes.testAction_jsp._jspx_meth_stripes_005flayout_002drender_005f0(testAction_jsp.java:157) at org.apache.jsp.WEB_002dINF.stripes.testAction_jsp._jspService(testAction_jsp.java:104) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:391) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:335) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:721) at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466) at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391) at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318) at net.sourceforge.stripes.action.ForwardResolution.execute(ForwardResolution.java:110) at net.sourceforge.stripes.controller.DispatcherHelper$7.intercept(DispatcherHelper.java:508) at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:158) at net.sourceforge.stripes.controller.HttpCacheInterceptor.intercept(HttpCacheInterceptor.java:99) at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155) at net.sourceforge.stripes.controller.BeforeAfterMethodInterceptor.intercept(BeforeAfterMethodInterceptor.java:113) at net.sourceforge.stripes.controller.ExecutionContext.proceed(ExecutionContext.java:155) at net.sourceforge.stripes.controller.ExecutionContext.wrap(ExecutionContext.java:74) at net.sourceforge.stripes.controller.DispatcherHelper.executeResolution(DispatcherHelper.java:502) at net.sourceforge.stripes.controller.DispatcherServlet.executeResolution(DispatcherServlet.java:286) at net.sourceforge.stripes.controller.DispatcherServlet.service(DispatcherServlet.java:170) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:247) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:534) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1081) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1566) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1523) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:744) Caused by: javax.servlet.ServletException: javax.servlet.jsp.JspException: javax.el.ELException: Error reading 'someCompositeData' on type com.backstopsolutions.web.TestActionBeanMenuHelper at org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:901) at org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:834) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspService(testActionBeanLayout_jsp.java:103) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:725) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:432) ... 148 more Caused by: javax.el.ELException: Error reading 'someCompositeData' on type com.backstopsolutions.web.TestActionBeanMenuHelper at javax.el.BeanELResolver.getValue(BeanELResolver.java:101) at org.apache.jasper.el.JasperELResolver.getValue(JasperELResolver.java:110) at org.apache.el.parser.AstValue.getValue(AstValue.java:167) at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:187) at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:956) at org.apache.jsp.tag.webTestActionBeanMenu_tag.doTag(webTestActionBeanMenu_tag.java:129) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspx_meth_stab_005fmenu_005f0(testActionBeanLayout_jsp.java:265) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspx_meth_stripes_005flayout_002ddefinition_005f0(testActionBeanLayout_jsp.java:157) at org.apache.jsp.layouts.testActionBeanLayout_jsp._jspService(testActionBeanLayout_jsp.java:90) ... 151 more Caused by: java.lang.NullPointerException at com.backstopsolutions.web.TestActionBeanMenuHelper.getSomeCompositeData(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at javax.el.BeanELResolver.getValue(BeanELResolver.java:97) ... 159 more <variations on the same stack trace repeat>

Environment

JBoss 5.1.0* (we have a few local modifications we use)
tomcat 8.0.12 (with jstl 1.2 added to the lib directory)
Running on Mac OS X (10.9.4)

Status

Assignee

Unassigned

Reporter

Robert West

Labels

None

Tester

None

Affects versions

Release 1.5.4

Priority

Major
Configure