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