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