https://issues.apache.org/bugzilla/show_bug.cgi?id=54260
Bug ID: 54260 Summary: JSP unloading - NullPointerException when using ".tag" files Product: Tomcat 7 Version: 7.0.33 Hardware: PC OS: All Status: NEW Severity: normal Priority: P2 Component: Jasper Assignee: dev@tomcat.apache.org Reporter: laszlo.keszthe...@diepresse.com Classification: Unclassified Since Tomcat 7.0.30 (currently using version 7.0.33) we are faced with the following NullPointerException: Dec 7, 2012 2:10:28 PM org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor processChildren SEVERE: Exception invoking periodic operation: java.lang.NullPointerException at org.apache.jasper.util.FastRemovalDequeue$Entry.access$700(FastRemovalDe queue.java:254) at org.apache.jasper.util.FastRemovalDequeue.remove(FastRemovalDequeue.java :177) at org.apache.jasper.compiler.JspRuntimeContext.checkUnload(JspRuntimeConte xt.java:610) at org.apache.jasper.servlet.JspServlet.periodicEvent(JspServlet.java:360) at org.apache.catalina.core.StandardWrapper.backgroundProcess(StandardWrapp er.java:709) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.proc essChildren(ContainerBase.java:1530) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.proc essChildren(ContainerBase.java:1540) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.proc essChildren(ContainerBase.java:1540) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.proc essChildren(ContainerBase.java:1540) at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run( ContainerBase.java:1519) at java.lang.Thread.run(Thread.java:662) Investigation results: I was able to debug and trace the exception and found that the Excpetion is caused by a '.tag', I'm including in my JSP, which has no UnloadHandle assigned when processed in org.apache.jasper.compiler.JspRuntimeContext.checkUnload() line 610: jspQueue.remove(jsw.getUnloadHandle()); Because jsw.getUnloadHandle() returns null, jspQueue.remove() fails and is throwing the NullPointerException everytime, aborting the "unload". Reproducing the exceptiopn: It looks like the exception appears only when "maxLoadedJsps" and " jspIdleTimeout" are set to a value >0 in tomcat/conf/web.xml and ".tag" files are used with jsp-scriptlets. Web.xml changes: <init-param> <param-name>maxLoadedJsps</param-name> <param-value>1000</param-value> </init-param> <init-param> <param-name>jspIdleTimeout</param-name> <param-value>5</param-value> </init-param> The exception can be observed in the example "Tag Files" -> "Display Products Example" but you have to edit the WEB-INF/tags/displayProducts.tag and append the following example scriptlet: <% String test = "this is ="; if (normalPrice != null) test = test + normalPrice + " something"; else test = test + onSale + "="; StringBuilder tags=new StringBuilder(test); tags.append(".").append(test).append("..."); // change here test = tags.toString(); request.setAttribute("test", test); %> <%=test %> Start Tomcat and invoke the example jsp http://localhost:8080/examples/jsp/jsp2/tagfiles/products.jsp Wait and observe the catalina.out (or tomcat output) for exceptions. Normaly the exception won't appear. Now edit the previously added scriplet in WEB-INF/tags/displayProducts.tag modifying any string in one of the append statements. Call the example jsp again, tomcat should recompile the tag, wait and observe again your tomcat output. Do not shutdown or restart tomcat between these steps! Tomcat should recompile the tag on the fly. We were able to reproduce the exception on Tomcat 7.0.30, 7.0.32 and 7.0.33 on different machines using the described steps. -- You are receiving this mail because: You are the assignee for the bug. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org