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: [email protected]
Reporter: [email protected]
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: [email protected]
For additional commands, e-mail: [email protected]