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: [email protected]
For additional commands, e-mail: [email protected]