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