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-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org