You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2016/05/03 19:31:45 UTC

svn commit: r1742146 - in /tomcat/trunk: java/org/apache/jasper/servlet/ java/org/apache/tomcat/ java/org/apache/tomcat/util/descriptor/web/ java/org/apache/tomcat/util/scan/ test/org/apache/tomcat/util/scan/

Author: markt
Date: Tue May  3 17:31:45 2016
New Revision: 1742146

URL: http://svn.apache.org/viewvc?rev=1742146&view=rev
Log:
Rather than do URL->URLConnection->URL, just pass the URL

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/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=1742146&r1=1742145&r2=1742146&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java (original)
+++ tomcat/trunk/java/org/apache/jasper/servlet/TldScanner.java Tue May  3 17:31:45 2016
@@ -296,12 +296,18 @@ public class TldScanner {
         private boolean foundFileWithoutTld = false;
 
         @Override
-        public void scan(JarURLConnection urlConn, String webappPath,
-                boolean isWebapp) throws IOException {
+        public void scan(JarURLConnection jarConn, String webappPath, boolean isWebapp)
+                throws IOException {
+            scan(jarConn.getURL(), webappPath, isWebapp);
+        }
+
+
+        @Override
+        public void scan(URL jarUrl, String webappPath, boolean isWebapp) throws IOException {
             boolean found = false;
-            URL jarURL;
-            try (Jar jar = JarFactory.newInstance(urlConn.getURL())) {
-                jarURL = jar.getJarFileURL();
+            URL jarFileUrl;
+            try (Jar jar = JarFactory.newInstance(jarUrl)) {
+                jarFileUrl = jar.getJarFileURL();
                 jar.nextEntry();
                 for (String entryName = jar.getEntryName();
                     entryName != null;
@@ -312,7 +318,7 @@ public class TldScanner {
                     }
                     found = true;
                     TldResourcePath tldResourcePath =
-                            new TldResourcePath(jarURL, webappPath, entryName);
+                            new TldResourcePath(jarFileUrl, webappPath, entryName);
                     try {
                         parseTld(tldResourcePath);
                     } catch (SAXException e) {
@@ -322,12 +328,13 @@ public class TldScanner {
             }
             if (found) {
                 if (log.isDebugEnabled()) {
-                    log.debug(Localizer.getMessage("jsp.tldCache.tldInJar", jarURL.toString()));
+                    log.debug(Localizer.getMessage("jsp.tldCache.tldInJar", jarFileUrl.toString()));
                 }
             } else {
                 foundJarWithoutTld = true;
                 if (log.isDebugEnabled()) {
-                    log.debug(Localizer.getMessage("jsp.tldCache.noTldInJar", jarURL.toString()));
+                    log.debug(Localizer.getMessage(
+                            "jsp.tldCache.noTldInJar", jarFileUrl.toString()));
                 }
             }
         }

Modified: tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java?rev=1742146&r1=1742145&r2=1742146&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/JarScannerCallback.java Tue May  3 17:31:45 2016
@@ -19,6 +19,7 @@ package org.apache.tomcat;
 import java.io.File;
 import java.io.IOException;
 import java.net.JarURLConnection;
+import java.net.URL;
 
 /**
  * This interface is implemented by clients of the {@link JarScanner} to enable
@@ -37,11 +38,33 @@ public interface JarScannerCallback {
      *                       be treated as being provided by the container
      *
      * @throws IOException if an I/O error occurs while scanning the JAR
+     *
+     * @deprecated Use {@link #scan(URL, String, boolean)} instead. Because the
+     *             urlConn parameter could refer directly to a JAR or to a JAR
+     *             as an entry in a WAR, it required further processing that
+     *             included obtaining the original URL. It is simpler to provide
+     *             the URL to start with..
      */
+    @Deprecated
     public void scan(JarURLConnection urlConn, String webappPath, boolean isWebapp)
             throws IOException;
 
     /**
+     * A JAR was found and may be accessed for further processing via the
+     * provided URL connection.
+     *
+     * @param jarURL     The URL for the identified JAR
+     * @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
+     *                       be treated as being provided by the container
+     *
+     * @throws IOException if an I/O error occurs while scanning the JAR
+     */
+    public void scan(URL jarURL, String webappPath, boolean isWebapp)
+            throws IOException;
+
+    /**
      * A directory was found that is to be treated as an unpacked JAR. The
      * directory may be accessed for further processing via the provided file.
      *

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=1742146&r1=1742145&r2=1742146&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 Tue May  3 17:31:45 2016
@@ -53,8 +53,13 @@ public class FragmentJarScannerCallback
     @Override
     public void scan(JarURLConnection jarConn, String webappPath, boolean isWebapp)
             throws IOException {
+        scan(jarConn.getURL(), webappPath, isWebapp);
+    }
+
+
+    @Override
+    public void scan(URL jarUrl, String webappPath, boolean isWebapp) throws IOException {
 
-        URL url = jarConn.getURL();
         Jar jar = null;
         InputStream is = null;
         WebXml fragment = new WebXml();
@@ -67,7 +72,7 @@ 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(url);
+                jar = JarFactory.newInstance(jarUrl);
                 is = jar.getInputStream(FRAGMENT_LOCATION);
             }
 
@@ -88,15 +93,16 @@ public class FragmentJarScannerCallback
             if (jar != null) {
                 jar.close();
             }
-            fragment.setURL(url);
+            fragment.setURL(jarUrl);
             if (fragment.getName() == null) {
                 fragment.setName(fragment.getURL().toString());
             }
-            fragment.setJarName(extractJarFileName(url));
+            fragment.setJarName(extractJarFileName(jarUrl));
             fragments.put(fragment.getName(), fragment);
         }
     }
 
+
     private String extractJarFileName(URL input) {
         String url = input.toString();
         if (url.endsWith("!/")) {

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=1742146&r1=1742145&r2=1742146&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java (original)
+++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Tue May  3 17:31:45 2016
@@ -18,11 +18,9 @@ package org.apache.tomcat.util.scan;
 
 import java.io.File;
 import java.io.IOException;
-import java.net.JarURLConnection;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
-import java.net.URLConnection;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -103,7 +101,7 @@ public class StandardJarScanner implemen
      * Controls the testing all directories to see of they are exploded JAR
      * files extension.
      */
-    private boolean scanAllDirectories = false;
+    private boolean scanAllDirectories = true;
     public boolean isScanAllDirectories() {
         return scanAllDirectories;
     }
@@ -307,48 +305,35 @@ public class StandardJarScanner implemen
             log.trace(sm.getString("jarScan.jarUrlStart", url));
         }
 
-        URLConnection conn = url.openConnection();
-        if (conn instanceof JarURLConnection) {
-            callback.scan((JarURLConnection) conn, webappPath, isWebapp);
-        } else {
-            String urlStr = url.toString();
-            if (urlStr.startsWith("file:") || urlStr.startsWith("http:") || urlStr.startsWith("https:")) {
-                if (urlStr.endsWith(Constants.JAR_EXT)) {
-                    URL jarURL = UriUtil.buildJarUrl(urlStr);
-                    callback.scan((JarURLConnection) jarURL.openConnection(),
-                            webappPath, isWebapp);
-                } else {
-                    File f;
-                    try {
-                        f = new File(url.toURI());
-                        if (f.isFile() && isScanAllFiles()) {
-                            // Treat this file as a JAR
-                            URL jarURL = UriUtil.buildJarUrl(f);
-                            callback.scan(
-                                    (JarURLConnection) jarURL.openConnection(),
-                                    webappPath, isWebapp);
-                        } else if (f.isDirectory()) {
-                            if (scanType == JarScanType.PLUGGABILITY) {
-                                callback.scan(f, webappPath, isWebapp);
-                            } else {
-                                File metainf = new File(f.getAbsoluteFile() +
-                                        File.separator + "META-INF");
-                                if (metainf.isDirectory()) {
-                                    callback.scan(f, webappPath, isWebapp);
-                                }
-                            }
+        String urlStr = url.toString();
+        if (urlStr.startsWith("jar:") || urlStr.endsWith(Constants.JAR_EXT)) {
+            callback.scan(url, webappPath, isWebapp);
+        } else if (urlStr.startsWith("file:")) {
+            File f;
+            try {
+                f = new File(url.toURI());
+                if (f.isFile() && isScanAllFiles()) {
+                    // Treat this file as a JAR
+                    URL jarURL = UriUtil.buildJarUrl(f);
+                    callback.scan(jarURL, webappPath, isWebapp);
+                } else if (f.isDirectory()) {
+                    if (scanType == JarScanType.PLUGGABILITY) {
+                        callback.scan(f, webappPath, isWebapp);
+                    } else {
+                        File metainf = new File(f.getAbsoluteFile() + File.separator + "META-INF");
+                        if (metainf.isDirectory()) {
+                            callback.scan(f, webappPath, isWebapp);
                         }
-                    } catch (Throwable t) {
-                        ExceptionUtils.handleThrowable(t);
-                        // Wrap the exception and re-throw
-                        IOException ioe = new IOException();
-                        ioe.initCause(t);
-                        throw ioe;
                     }
                 }
+            } catch (Throwable t) {
+                ExceptionUtils.handleThrowable(t);
+                // Wrap the exception and re-throw
+                IOException ioe = new IOException();
+                ioe.initCause(t);
+                throw ioe;
             }
         }
-
     }
 
 

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=1742146&r1=1742145&r2=1742146&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java (original)
+++ tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java Tue May  3 17:31:45 2016
@@ -99,6 +99,12 @@ public class TestStandardJarScanner {
         List<String> callbacks = new ArrayList<>();
 
         @Override
+        public void scan(URL jarUrl, String webappPath,
+                boolean isWebapp) throws IOException {
+            callbacks.add(jarUrl.toString() + "::" + webappPath + "::" + isWebapp);
+        }
+
+        @Override
         public void scan(JarURLConnection urlConn, String webappPath,
                 boolean isWebapp) throws IOException {
             callbacks.add(urlConn.toString() + "::" + webappPath + "::" + isWebapp);



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