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

Reply via email to