Author: markt
Date: Wed Oct 29 14:42:01 2014
New Revision: 1635154
URL: http://svn.apache.org/r1635154
Log:
URLs may be added directly to the web application's class path. ensure that
they are scanned if a StandardJarScanner is configured to scan the class path.
Added:
tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java
(with props)
Modified:
tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java
tomcat/trunk/webapps/docs/changelog.xml
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=1635154&r1=1635153&r2=1635154&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java
(original)
+++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Wed
Oct 29 14:42:01 2014
@@ -195,11 +195,7 @@ public class StandardJarScanner implemen
stopLoader = ClassLoader.getSystemClassLoader().getParent();
}
-
ClassLoader classLoader = context.getClassLoader();
- // No need to scan the web application class loader - we have
- // already scanned WEB-INF/lib and WEB-INF/classes
- classLoader = classLoader.getParent();
// JARs are treated as application provided until the common class
// loader is reached.
Modified:
tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java?rev=1635154&r1=1635153&r2=1635154&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java
(original)
+++ tomcat/trunk/test/org/apache/catalina/filters/TesterServletContext.java Wed
Oct 29 14:42:01 2014
@@ -19,6 +19,7 @@ package org.apache.catalina.filters;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.Collections;
import java.util.Enumeration;
import java.util.EventListener;
import java.util.Map;
@@ -52,6 +53,27 @@ public class TesterServletContext implem
return "";
}
+ /**
+ * {@inheritDoc}
+ * <p>
+ * This test implementation is hard coded to return an empty Set.
+ */
+ @Override
+ public Set<String> getResourcePaths(String path) {
+ return Collections.emptySet();
+ }
+
+ /**
+ * {@inheritDoc}
+ * <p>
+ * This test implementation is hard coded to return the class loader that
+ * loaded this class.
+ */
+ @Override
+ public ClassLoader getClassLoader() {
+ return getClass().getClassLoader();
+ }
+
@Override
public ServletContext getContext(String uripath) {
throw new RuntimeException("Not implemented");
@@ -73,11 +95,6 @@ public class TesterServletContext implem
}
@Override
- public Set<String> getResourcePaths(String path) {
- throw new RuntimeException("Not implemented");
- }
-
- @Override
public URL getResource(String path) throws MalformedURLException {
throw new RuntimeException("Not implemented");
}
@@ -308,11 +325,6 @@ public class TesterServletContext implem
}
@Override
- public ClassLoader getClassLoader() {
- throw new RuntimeException("Not implemented");
- }
-
- @Override
public void declareRoles(String... roleNames) {
throw new RuntimeException("Not implemented");
}
Added: 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=1635154&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java
(added)
+++ tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java
Wed Oct 29 14:42:01 2014
@@ -0,0 +1,90 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.tomcat.util.scan;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.JarURLConnection;
+import java.net.URL;
+import java.net.URLClassLoader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import org.apache.catalina.filters.TesterServletContext;
+import org.apache.tomcat.JarScanType;
+import org.apache.tomcat.JarScannerCallback;
+
+public class TestStandardJarScanner {
+
+ @Test
+ public void testWebappClassPath() {
+ StandardJarScanner scanner = new StandardJarScanner();
+
+ scanner.setScanClassPath(true);
+
+ LoggingCallback callback = new LoggingCallback();
+
+ scanner.scan(JarScanType.PLUGGABILITY, new TesterServletContext(),
callback);
+
+ List<String> callbacks = callback.getCallbacks();
+
+ ClassLoader cl = TesterServletContext.class.getClassLoader();
+ if (cl instanceof URLClassLoader) {
+ URL[] urls = ((URLClassLoader) cl).getURLs();
+
+ int size;
+ if (urls == null) {
+ size = 0;
+ } else {
+ size = urls.length;
+ }
+ Assert.assertEquals(size, callbacks.size());
+
+ } else {
+ Assert.fail("Unexpected class loader type: " +
cl.getClass().getName());
+ }
+ }
+
+ private static class LoggingCallback implements JarScannerCallback {
+
+ List<String> callbacks = new ArrayList<>();
+
+ @Override
+ public void scan(JarURLConnection urlConn, String webappPath,
+ boolean isWebapp) throws IOException {
+ callbacks.add(urlConn.toString() + "::" + webappPath + "::" +
isWebapp);
+ }
+
+ @Override
+ public void scan(File file, String webappPath, boolean isWebapp)
+ throws IOException {
+ callbacks.add(file.toString() + "::" + webappPath + "::" +
isWebapp);
+ }
+
+ @Override
+ public void scanWebInfClasses() throws IOException {
+ callbacks.add("N/A::WEB-INF/classes::N/A");
+ }
+
+ public List<String> getCallbacks() {
+ return callbacks;
+ }
+ }
+}
Propchange:
tomcat/trunk/test/org/apache/tomcat/util/scan/TestStandardJarScanner.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: tomcat/trunk/webapps/docs/changelog.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/webapps/docs/changelog.xml?rev=1635154&r1=1635153&r2=1635154&view=diff
==============================================================================
--- tomcat/trunk/webapps/docs/changelog.xml (original)
+++ tomcat/trunk/webapps/docs/changelog.xml Wed Oct 29 14:42:01 2014
@@ -178,6 +178,11 @@
<fix>
Cookie rewrite flag abbreviation should be CO rather than C. (remm)
</fix>
+ <fix>
+ <bug>57153</bug>: When the StandardJarScanner is configured to scan the
+ full class path, ensure that class path entries added directly to the
+ web application class loader are scanned. (markt)
+ </fix>
</changelog>
</subsection>
<subsection name="Coyote">
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]