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

Reply via email to