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:48:01 UTC

svn commit: r1742160 - in /tomcat/tc8.5.x/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:48:01 2016
New Revision: 1742160

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

Modified:
    tomcat/tc8.5.x/trunk/   (props changed)
    tomcat/tc8.5.x/trunk/java/org/apache/jasper/servlet/TldScanner.java
    tomcat/tc8.5.x/trunk/java/org/apache/tomcat/JarScannerCallback.java
    tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java
    tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
    tomcat/tc8.5.x/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java

Propchange: tomcat/tc8.5.x/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue May  3 17:48:01 2016
@@ -1 +1 @@
-/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646,1736703,1736836,1736849,1737104-1737105,1737112,1737117,1737119-1737120,1737155,1737157,1737192,1737280,1737339,1737632,1737664,1737715,1737748,1737785,1737834,1737860,1737959,1738005,1738007,1738014-1738015,1738018,1738022,1738039,1738043,1738059-1738060,1738147,1738149,1738174-1738175,1738261,1738589,1738623-1738625,1738643,1738816,1738850,1738855,1738946-1738948,1738953-1738954,1738979,1738982,1739079-1739081,1739087,1739113,1739153,1739172,1739176,1739191,1739474,1739726,1739762,1739775,1739814,1739817-1739818,1739975,1740131,1740324,1740465,1740495,1740508-1740509,1740520,1740535,1740707,1740803,1740810,1740969,1740980,1740991,1740997,1741015,1741033,1741036,1741058,1741060,1741080,1741147,1741159,1741164,1741173,1741181,1741190,1741197,1741202,1741208,1741213,1741221,1741225,1741232,1741409,1741501,1741677
 ,1741892,1741896,1741984,1742023,1742042,1742071,1742090,1742093,1742101,1742105,1742111,1742139
+/tomcat/trunk:1734785,1734799,1734845,1734928,1735041,1735044,1735480,1735577,1735597,1735599-1735600,1735615,1736145,1736162,1736209,1736280,1736297,1736299,1736489,1736646,1736703,1736836,1736849,1737104-1737105,1737112,1737117,1737119-1737120,1737155,1737157,1737192,1737280,1737339,1737632,1737664,1737715,1737748,1737785,1737834,1737860,1737959,1738005,1738007,1738014-1738015,1738018,1738022,1738039,1738043,1738059-1738060,1738147,1738149,1738174-1738175,1738261,1738589,1738623-1738625,1738643,1738816,1738850,1738855,1738946-1738948,1738953-1738954,1738979,1738982,1739079-1739081,1739087,1739113,1739153,1739172,1739176,1739191,1739474,1739726,1739762,1739775,1739814,1739817-1739818,1739975,1740131,1740324,1740465,1740495,1740508-1740509,1740520,1740535,1740707,1740803,1740810,1740969,1740980,1740991,1740997,1741015,1741033,1741036,1741058,1741060,1741080,1741147,1741159,1741164,1741173,1741181,1741190,1741197,1741202,1741208,1741213,1741221,1741225,1741232,1741409,1741501,1741677
 ,1741892,1741896,1741984,1742023,1742042,1742071,1742090,1742093,1742101,1742105,1742111,1742139,1742146

Modified: tomcat/tc8.5.x/trunk/java/org/apache/jasper/servlet/TldScanner.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/jasper/servlet/TldScanner.java?rev=1742160&r1=1742159&r2=1742160&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/jasper/servlet/TldScanner.java (original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/jasper/servlet/TldScanner.java Tue May  3 17:48:01 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/tc8.5.x/trunk/java/org/apache/tomcat/JarScannerCallback.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/JarScannerCallback.java?rev=1742160&r1=1742159&r2=1742160&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/JarScannerCallback.java (original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/JarScannerCallback.java Tue May  3 17:48:01 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/tc8.5.x/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java?rev=1742160&r1=1742159&r2=1742160&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java (original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/descriptor/web/FragmentJarScannerCallback.java Tue May  3 17:48:01 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/tc8.5.x/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java?rev=1742160&r1=1742159&r2=1742160&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java (original)
+++ tomcat/tc8.5.x/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Tue May  3 17:48:01 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/tc8.5.x/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java
URL: http://svn.apache.org/viewvc/tomcat/tc8.5.x/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java?rev=1742160&r1=1742159&r2=1742160&view=diff
==============================================================================
--- tomcat/tc8.5.x/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java (original)
+++ tomcat/tc8.5.x/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java Tue May  3 17:48:01 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