Author: markt
Date: Wed May  4 11:06:54 2016
New Revision: 1742249

URL: http://svn.apache.org/viewvc?rev=1742249&view=rev
Log:
Pass Jar rather than URL to a JAR in the JarScanner call back for a JAR

Modified:
    tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java
    tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java
    
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java
    tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
    tomcat/trunk/test/org/apache/jasper/servlet/TestTldScanner.java
    tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java

Modified: tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java?rev=1742249&r1=1742248&r2=1742249&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java (original)
+++ tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java Wed May  4 
11:06:54 2016
@@ -47,7 +47,6 @@ import org.apache.tomcat.JarScannerCallb
 import org.apache.tomcat.util.descriptor.tld.TaglibXml;
 import org.apache.tomcat.util.descriptor.tld.TldParser;
 import org.apache.tomcat.util.descriptor.tld.TldResourcePath;
-import org.apache.tomcat.util.scan.JarFactory;
 import org.xml.sax.SAXException;
 
 /**
@@ -296,27 +295,24 @@ public class TldScanner {
 
 
         @Override
-        public void scan(URL jarUrl, String webappPath, boolean isWebapp) 
throws IOException {
+        public void scan(Jar jar, String webappPath, boolean isWebapp) throws 
IOException {
             boolean found = false;
-            URL jarFileUrl;
-            try (Jar jar = JarFactory.newInstance(jarUrl)) {
-                jarFileUrl = jar.getJarFileURL();
-                jar.nextEntry();
-                for (String entryName = jar.getEntryName();
-                    entryName != null;
-                    jar.nextEntry(), entryName = jar.getEntryName()) {
-                    if (!(entryName.startsWith("META-INF/") &&
-                            entryName.endsWith(TLD_EXT))) {
-                        continue;
-                    }
-                    found = true;
-                    TldResourcePath tldResourcePath =
-                            new TldResourcePath(jarFileUrl, webappPath, 
entryName);
-                    try {
-                        parseTld(tldResourcePath);
-                    } catch (SAXException e) {
-                        throw new IOException(e);
-                    }
+            URL jarFileUrl = jar.getJarFileURL();
+            jar.nextEntry();
+            for (String entryName = jar.getEntryName();
+                entryName != null;
+                jar.nextEntry(), entryName = jar.getEntryName()) {
+                if (!(entryName.startsWith("META-INF/") &&
+                        entryName.endsWith(TLD_EXT))) {
+                    continue;
+                }
+                found = true;
+                TldResourcePath tldResourcePath =
+                        new TldResourcePath(jarFileUrl, webappPath, entryName);
+                try {
+                    parseTld(tldResourcePath);
+                } catch (SAXException e) {
+                    throw new IOException(e);
                 }
             }
             if (found) {

Modified: tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java?rev=1742249&r1=1742248&r2=1742249&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java Wed May  4 
11:06:54 2016
@@ -18,7 +18,6 @@ package org.apache.tomcat;
 
 import java.io.File;
 import java.io.IOException;
-import java.net.URL;
 
 /**
  * This interface is implemented by clients of the {@link JarScanner} to enable
@@ -28,9 +27,9 @@ public interface JarScannerCallback {
 
     /**
      * A JAR was found and may be accessed for further processing via the
-     * provided URL connection.
+     * provided URL connection. The caller is responsible for closing the JAR.
      *
-     * @param jarURL     The URL for the identified JAR
+     * @param jar        The JAR to process
      * @param webappPath The path, if any, to the JAR within the web 
application
      * @param isWebapp   Indicates if the JAR was found within a web
      *                       application. If <code>false</code> the JAR should
@@ -38,7 +37,7 @@ public interface JarScannerCallback {
      *
      * @throws IOException if an I/O error occurs while scanning the JAR
      */
-    public void scan(URL jarURL, String webappPath, boolean isWebapp)
+    public void scan(Jar jar, String webappPath, boolean isWebapp)
             throws IOException;
 
     /**

Modified: 
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java?rev=1742249&r1=1742248&r2=1742249&view=diff
==============================================================================
--- 
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java
 (original)
+++ 
tomcat/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java
 Wed May  4 11:06:54 2016
@@ -26,7 +26,6 @@ import java.util.Map;
 
 import org.apache.tomcat.Jar;
 import org.apache.tomcat.JarScannerCallback;
-import org.apache.tomcat.util.scan.JarFactory;
 import org.xml.sax.InputSource;
 
 /**
@@ -51,9 +50,8 @@ public class FragmentJarScannerCallback
 
 
     @Override
-    public void scan(URL jarUrl, String webappPath, boolean isWebapp) throws 
IOException {
+    public void scan(Jar jar, String webappPath, boolean isWebapp) throws 
IOException {
 
-        Jar jar = null;
         InputStream is = null;
         WebXml fragment = new WebXml();
         fragment.setWebappJar(isWebapp);
@@ -65,7 +63,6 @@ public class FragmentJarScannerCallback
             // web-fragment.xml files don't need to be parsed if they are never
             // going to be used.
             if (isWebapp && parseRequired) {
-                jar = JarFactory.newInstance(jarUrl);
                 is = jar.getInputStream(FRAGMENT_LOCATION);
             }
 
@@ -74,7 +71,6 @@ public class FragmentJarScannerCallback
                 // distributable
                 fragment.setDistributable(true);
             } else {
-                @SuppressWarnings("null") // Cannot be null here
                 String fragmentUrl = jar.getURL(FRAGMENT_LOCATION);
                 InputSource source = new InputSource(fragmentUrl);
                 source.setByteStream(is);
@@ -83,14 +79,11 @@ public class FragmentJarScannerCallback
                 }
             }
         } finally {
-            if (jar != null) {
-                jar.close();
-            }
-            fragment.setURL(jarUrl);
+            fragment.setURL(jar.getJarFileURL());
             if (fragment.getName() == null) {
                 fragment.setName(fragment.getURL().toString());
             }
-            fragment.setJarName(extractJarFileName(jarUrl));
+            fragment.setJarName(extractJarFileName(jar.getJarFileURL()));
             fragments.put(fragment.getName(), fragment);
         }
     }
@@ -107,6 +100,7 @@ public class FragmentJarScannerCallback
         return url.substring(url.lastIndexOf('/') + 1);
     }
 
+
     @Override
     public void scan(File file, String webappPath, boolean isWebapp) throws 
IOException {
 

Modified: tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java?rev=1742249&r1=1742248&r2=1742249&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java 
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Wed 
May  4 11:06:54 2016
@@ -30,6 +30,7 @@ import javax.servlet.ServletContext;
 
 import org.apache.juli.logging.Log;
 import org.apache.juli.logging.LogFactory;
+import org.apache.tomcat.Jar;
 import org.apache.tomcat.JarScanFilter;
 import org.apache.tomcat.JarScanType;
 import org.apache.tomcat.JarScanner;
@@ -306,7 +307,9 @@ public class StandardJarScanner implemen
         }
 
         if ("jar".equals(url.getProtocol()) || 
url.getPath().endsWith(Constants.JAR_EXT)) {
-            callback.scan(url, webappPath, isWebapp);
+            try (Jar jar = JarFactory.newInstance(url)) {
+                callback.scan(jar, webappPath, isWebapp);
+            }
         } else if ("file".equals(url.getProtocol())) {
             File f;
             try {
@@ -314,7 +317,9 @@ public class StandardJarScanner implemen
                 if (f.isFile() && isScanAllFiles()) {
                     // Treat this file as a JAR
                     URL jarURL = UriUtil.buildJarUrl(f);
-                    callback.scan(jarURL, webappPath, isWebapp);
+                    try (Jar jar = JarFactory.newInstance(jarURL)) {
+                        callback.scan(jar, webappPath, isWebapp);
+                    }
                 } else if (f.isDirectory()) {
                     if (scanType == JarScanType.PLUGGABILITY) {
                         callback.scan(f, webappPath, isWebapp);

Modified: tomcat/trunk/test/org/apache/jasper/servlet/TestTldScanner.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/jasper/servlet/TestTldScanner.java?rev=1742249&r1=1742248&r2=1742249&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/jasper/servlet/TestTldScanner.java (original)
+++ tomcat/trunk/test/org/apache/jasper/servlet/TestTldScanner.java Wed May  4 
11:06:54 2016
@@ -29,7 +29,9 @@ import org.junit.Test;
 import org.apache.catalina.Context;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.startup.TomcatBaseTest;
+import org.apache.tomcat.Jar;
 import org.apache.tomcat.util.buf.ByteChunk;
+import org.apache.tomcat.util.scan.JarFactory;
 import org.apache.tomcat.util.scan.StandardJarScanner;
 import org.easymock.EasyMock;
 
@@ -109,7 +111,9 @@ public class TestTldScanner extends Tomc
             throws Exception {
         String fullPath = new File(webapp, path).toURI().toString();
         URL jarUrl = new URL("jar:" + fullPath + "!/");
-        callback.scan(jarUrl, path, true);
+        try (Jar jar = JarFactory.newInstance(jarUrl)) {
+            callback.scan(jar, path, true);
+        }
     }
 }
 

Modified: 
tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java?rev=1742249&r1=1742248&r2=1742249&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java 
(original)
+++ tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java 
Wed May  4 11:06:54 2016
@@ -26,7 +26,7 @@ import java.util.List;
 
 import org.junit.Assert;
 import org.junit.Test;
-
+import org.apache.tomcat.Jar;
 import org.apache.tomcat.JarScanType;
 import org.apache.tomcat.JarScannerCallback;
 import org.apache.tomcat.unittest.TesterServletContext;
@@ -98,9 +98,9 @@ public class TestStandardJarScanner {
         List<String> callbacks = new ArrayList<>();
 
         @Override
-        public void scan(URL jarUrl, String webappPath,
+        public void scan(Jar jar, String webappPath,
                 boolean isWebapp) throws IOException {
-            callbacks.add(jarUrl.toString() + "::" + webappPath + "::" + 
isWebapp);
+            callbacks.add(jar.getJarFileURL().toString() + "::" + webappPath + 
"::" + isWebapp);
         }
 
         @Override



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

Reply via email to