Author: markt
Date: Wed Feb 25 11:23:00 2015
New Revision: 1662200

URL: http://svn.apache.org/r1662200
Log:
Fix https://bz.apache.org/bugzilla/show_bug.cgi?id=57626
Ensure that when processing a tag file within a Jar that the 
JspComppilationContext always has the latest, opened Jar instance to work with.
Add a unit test for recompilation of a modified JSOP that depends on a tag file 
packaged in a Jar.

Modified:
    tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java
    tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java
    tomcat/trunk/test/org/apache/jasper/TestJspCompilationContext.java
    tomcat/trunk/test/webapp/WEB-INF/web.xml

Modified: tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java?rev=1662200&r1=1662199&r2=1662200&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java (original)
+++ tomcat/trunk/java/org/apache/jasper/JspCompilationContext.java Wed Feb 25 
11:23:00 2015
@@ -89,7 +89,7 @@ public class JspCompilationContext {
     private final boolean isTagFile;
     private boolean protoTypeMode;
     private TagInfo tagInfo;
-    private final Jar tagJar;
+    private Jar tagJar;
 
     // jspURI _must_ be relative to the context
     public JspCompilationContext(String jspUri, Options options,
@@ -310,6 +310,10 @@ public class JspCompilationContext {
         return this.tagJar;
     }
 
+    public void setTagFileJar(Jar tagJar) {
+        this.tagJar = tagJar;
+    }
+
     /* ==================== Common implementation ==================== */
 
     /**

Modified: tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java?rev=1662200&r1=1662199&r2=1662200&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java 
(original)
+++ tomcat/trunk/java/org/apache/jasper/compiler/TagFileProcessor.java Wed Feb 
25 11:23:00 2015
@@ -554,6 +554,10 @@ class TagFileProcessor {
                     // time the tag file was scanned for directives, and the 
tag
                     // file may have been modified since then.
                     wrapper.getJspEngineContext().setTagInfo(tagInfo);
+                    // The tagJar passed to to the JspCompilationContext will
+                    // have been closed (see the finally block at the end of
+                    // this method) so update the the tagJar to one opened 
above
+                    wrapper.getJspEngineContext().setTagFileJar(tagJar);
                 }
 
                 Class<?> tagClazz;

Modified: tomcat/trunk/test/org/apache/jasper/TestJspCompilationContext.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/TestJspCompilationContext.java?rev=1662200&r1=1662199&r2=1662200&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/TestJspCompilationContext.java 
(original)
+++ tomcat/trunk/test/org/apache/jasper/TestJspCompilationContext.java Wed Feb 
25 11:23:00 2015
@@ -16,6 +16,8 @@
  */
 package org.apache.jasper;
 
+import java.io.File;
+
 import javax.servlet.http.HttpServletResponse;
 
 import org.junit.Assert;
@@ -36,6 +38,36 @@ public class TestJspCompilationContext e
                 "/test/jsp/tagFileInJar.jsp", body, null);
 
         Assert.assertEquals(HttpServletResponse.SC_OK, rc);
+        Assert.assertTrue(body.toString().contains("00 - OK"));
+    }
+
+
+    /*
+     * Test case for https://bz.apache.org/bugzilla/show_bug.cgi?id=57626
+     */
+    @Test
+    public void testModifiedTagFileInJar() throws Exception {
+        getTomcatInstanceTestWebapp(false, true);
+
+        ByteChunk body = new ByteChunk();
+
+        int rc = getUrl("http://localhost:"; + getPort() +
+                "/test/jsp/tagFileInJar.jsp", body, null);
+
+        Assert.assertEquals(HttpServletResponse.SC_OK, rc);
+        Assert.assertTrue(body.toString().contains("00 - OK"));
+
+        File jsp = new File("test/webapp/jsp/tagFileInJar.jsp");
+        jsp.setLastModified(jsp.lastModified() + 10000);
+
+        // This test requires that modificationTestInterval is set to zero in
+        // web.xml. If not, a sleep longer that modificationTestInterval is
+        // required here.
+
+        rc = getUrl("http://localhost:"; + getPort() +
+                "/test/jsp/tagFileInJar.jsp", body, null);
+
+        Assert.assertEquals(HttpServletResponse.SC_OK, rc);
         Assert.assertTrue(body.toString().contains("00 - OK"));
     }
 }

Modified: tomcat/trunk/test/webapp/WEB-INF/web.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/webapp/WEB-INF/web.xml?rev=1662200&r1=1662199&r2=1662200&view=diff
==============================================================================
--- tomcat/trunk/test/webapp/WEB-INF/web.xml (original)
+++ tomcat/trunk/test/webapp/WEB-INF/web.xml Wed Feb 25 11:23:00 2015
@@ -28,6 +28,25 @@
      required.
   </description>
 
+  <servlet>
+    <servlet-name>jsp</servlet-name>
+      <servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
+      <init-param>
+        <param-name>fork</param-name>
+        <param-value>false</param-value>
+      </init-param>
+      <init-param>
+        <param-name>xpoweredBy</param-name>
+        <param-value>false</param-value>
+      </init-param>
+      <!-- Required by /jsp/tagFileInJar.jsp / TestJspCompilationContext  -->
+      <init-param>
+        <param-name>modificationTestInterval</param-name>
+        <param-value>0</param-value>
+      </init-param>
+    <load-on-startup>3</load-on-startup>
+  </servlet>
+
   <!--  Bug 49922 -->
   <filter>
     <filter-name>Bug49922</filter-name>



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to