Author: markt Date: Fri Jun 14 07:42:41 2013 New Revision: 1492979 URL: http://svn.apache.org/r1492979 Log: Get JarScanFilter working with default values
Added: tomcat/trunk/java/org/apache/tomcat/JarScanFilter.java - copied, changed from r1492978, tomcat/trunk/java/org/apache/tomcat/JarScanType.java tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java Modified: tomcat/trunk/conf/catalina.properties tomcat/trunk/java/org/apache/catalina/startup/Constants.java tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java tomcat/trunk/java/org/apache/jasper/Constants.java tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java tomcat/trunk/java/org/apache/tomcat/JarScanType.java tomcat/trunk/java/org/apache/tomcat/JarScanner.java tomcat/trunk/java/org/apache/tomcat/util/scan/Constants.java tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Modified: tomcat/trunk/conf/catalina.properties URL: http://svn.apache.org/viewvc/tomcat/trunk/conf/catalina.properties?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/conf/catalina.properties (original) +++ tomcat/trunk/conf/catalina.properties Fri Jun 14 07:42:41 2013 @@ -73,13 +73,14 @@ server.loader= # starting with file:. shared.loader= -# List of JAR files that should not be scanned using the JarScanner +# Default list of JAR files that should not be scanned using the JarScanner # functionality. This is typically used to scan JARs for configuration # information. JARs that do not contain such information may be excluded from # the scan to speed up the scanning process. This is the default list. JARs on -# this list are excluded from all scans. Scan specific lists (to exclude JARs -# from individual scans) follow this. The list must be a comma separated list of -# JAR file names. +# this list are excluded from all scans. The list must be a comma separated list +# of JAR file names. +# The list of JARs to skip may be over-ridden at a Context level for individual +# scan types by configuring a JarScanner with a nested JarScanFilter. # The JARs listed below include: # - Tomcat Bootstrap JARs # - Tomcat API JARs @@ -87,7 +88,7 @@ shared.loader= # - Jasper JARs # - Tomcat JARs # - Common non-Tomcat JARs -tomcat.util.scan.DefaultJarScanner.jarsToSkip=\ +tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\ bootstrap.jar,commons-daemon.jar,tomcat-juli.jar,\ annotations-api.jar,el-api.jar,jsp-api.jar,servlet-api.jar,\ catalina.jar,catalina-ant.jar,catalina-ha.jar,catalina-tribes.jar,\ @@ -109,17 +110,13 @@ jmx-tools.jar,jta*.jar,log4j*.jar,mail*. xercesImpl.jar,xmlParserAPIs.jar,xml-apis.jar,\ junit.jar,junit-*.jar,ant-launcher.jar -# Additional JARs (over and above the default JARs listed above) to skip when -# scanning for Servlet 3.0 pluggability features. These features include web -# fragments, annotations, SCIs and classes that match @HandlesTypes. The list -# must be a comma separated list of JAR file names. -org.apache.catalina.startup.ContextConfig.jarsToSkip= +# Default list of JAR files that should be scanned that overrides the default +# jarsToSkip list above. This is typically used to include a specific JAR that +# has been excluded by a broad file name pattern in the jarsToSkip list. +# The list of JARs to scan may be over-ridden at a Context level for individual +# scan types by configuring a JarScanner with a nested JarScanFilter. +tomcat.util.scan.StandardJarScanFilter.jarsToScan= -# Additional JARs (over and above the default JARs listed above) to skip when -# scanning for TLDs. The list must be a comma separated list of JAR file names. -org.apache.catalina.startup.TldConfig.jarsToSkip= - -# # String cache configuration. tomcat.util.buf.StringCache.byte.enabled=true #tomcat.util.buf.StringCache.char.enabled=true Modified: tomcat/trunk/java/org/apache/catalina/startup/Constants.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/Constants.java?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/Constants.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/Constants.java Fri Jun 14 07:42:41 2013 @@ -34,13 +34,6 @@ public final class Constants { public static final String HostContextXml = "context.xml.default"; public static final String HostWebXml = "web.xml.default"; - public static final String DEFAULT_JARS_TO_SKIP = - "tomcat.util.scan.DefaultJarScanner.jarsToSkip"; - public static final String PLUGGABILITY_JARS_TO_SKIP = - "org.apache.catalina.startup.ContextConfig.jarsToSkip"; - public static final String TLD_JARS_TO_SKIP = - "org.apache.catalina.startup.TldConfig.jarsToSkip"; - /** * A dummy value used to suppress loading the default web.xml file. * Modified: tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/ContextConfig.java Fri Jun 14 07:42:41 2013 @@ -41,7 +41,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.Set; -import java.util.StringTokenizer; import java.util.concurrent.ConcurrentHashMap; import javax.servlet.MultipartConfigElement; @@ -149,13 +148,6 @@ public class ContextConfig implements Li */ protected static final Properties authenticators; - /** - * The list of JARs that will be skipped when scanning a web application - * for JARs. This means the JAR will not be scanned for web fragments, SCIs, - * annotations or classes that match @HandlesTypes. - */ - private static final Set<String> pluggabilityJarsToSkip = new HashSet<>(); - static { // Load our mapping properties for the standard authenticators InputStream is = @@ -172,20 +164,6 @@ public class ContextConfig implements Li } authenticators = props; - // Load the list of JARS to skip - addJarsToSkip(Constants.DEFAULT_JARS_TO_SKIP); - addJarsToSkip(Constants.PLUGGABILITY_JARS_TO_SKIP); - } - - private static void addJarsToSkip(String systemPropertyName) { - String jarList = System.getProperty(systemPropertyName); - if (jarList != null) { - StringTokenizer tokenizer = new StringTokenizer(jarList, ","); - while (tokenizer.hasMoreElements()) { - pluggabilityJarsToSkip.add(tokenizer.nextToken()); - } - } - } /** @@ -2043,8 +2021,8 @@ public class ContextConfig implements Li JarScanner jarScanner = context.getJarScanner(); FragmentJarScannerCallback callback = new FragmentJarScannerCallback(); - jarScanner.scan(JarScanType.SERVLET3_PLUGGABILITY, - context.getServletContext(), callback, pluggabilityJarsToSkip); + jarScanner.scan(JarScanType.PLUGGABILITY, + context.getServletContext(), callback); return callback.getFragments(); } Modified: tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java (original) +++ tomcat/trunk/java/org/apache/catalina/startup/TldConfig.java Fri Jun 14 07:42:41 2013 @@ -26,7 +26,6 @@ import java.util.Collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import java.util.StringTokenizer; import javax.servlet.ServletContext; import javax.servlet.descriptor.TaglibDescriptor; @@ -65,9 +64,6 @@ public final class TldConfig implements private static final String WEB_INF_LIB = "/WEB-INF/lib/"; - // Names of JARs that are known not to contain any TLDs - private static volatile Set<String> noTldJars = null; - private static final org.apache.juli.logging.Log log= org.apache.juli.logging.LogFactory.getLog( TldConfig.class ); @@ -123,47 +119,6 @@ public final class TldConfig implements } - static { - // Set the default list of JARs to skip for TLDs - StringBuilder jarList = new StringBuilder(System.getProperty( - Constants.DEFAULT_JARS_TO_SKIP, "")); - - String tldJars = System.getProperty(Constants.TLD_JARS_TO_SKIP, ""); - if (tldJars.length() > 0) { - if (jarList.length() > 0) { - jarList.append(','); - } - jarList.append(tldJars); - } - - if (jarList.length() > 0) { - setNoTldJars(jarList.toString()); - } - } - - /** - * Sets the list of JARs that are known not to contain any TLDs. - * - * @param jarNames List of comma-separated names of JAR files that are - * known not to contain any TLDs. - */ - public static synchronized void setNoTldJars(String jarNames) { - if (jarNames == null) { - noTldJars = null; - } else { - if (noTldJars == null) { - noTldJars = new HashSet<>(); - } else { - noTldJars.clear(); - } - StringTokenizer tokenizer = new StringTokenizer(jarNames, ","); - while (tokenizer.hasMoreElements()) { - noTldJars.add(tokenizer.nextToken()); - } - } - } - - // ----------------------------------------------------- Instance Variables /** @@ -264,7 +219,7 @@ public final class TldConfig implements // Stages 3b & 4 JarScanner jarScanner = context.getJarScanner(); jarScanner.scan(JarScanType.TLD, context.getServletContext(), - new TldJarScannerCallback(), noTldJars); + new TldJarScannerCallback()); // Now add all the listeners we found to the listeners for this context String list[] = getTldListeners(); Modified: tomcat/trunk/java/org/apache/jasper/Constants.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/Constants.java?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/Constants.java (original) +++ tomcat/trunk/java/org/apache/jasper/Constants.java Fri Jun 14 07:42:41 2013 @@ -211,20 +211,6 @@ public class Constants { public static final String CATALINA_HOME_PROP = "catalina.home"; /** - * Name of system property containing default list of JARs to skip when - * scanning JARs for configuration elements such as TLDs. - */ - public static final String DEFAULT_JAR_SKIP_PROP= - "tomcat.util.scan.DefaultJarScanner.jarsToSkip"; - - /** - * Name of system property containing additional list of JARs to skip when - * scanning for TLDs. - */ - public static final String TLD_JAR_SKIP_PROP= - "org.apache.catalina.startup.TldConfig.jarsToSkip"; - - /** * Retain reference to default character set so we don't have to look it up. */ public static final Charset ISO_8859_1 = Charset.forName("ISO-8859-1"); Modified: tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java (original) +++ tomcat/trunk/java/org/apache/jasper/compiler/TldLocationsCache.java Fri Jun 14 07:42:41 2013 @@ -22,15 +22,12 @@ import java.io.IOException; import java.io.InputStream; import java.net.JarURLConnection; import java.net.URL; -import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.Set; -import java.util.StringTokenizer; import javax.servlet.ServletContext; -import org.apache.jasper.Constants; import org.apache.jasper.JasperException; import org.apache.jasper.util.ExceptionUtils; import org.apache.jasper.xmlparser.ParserUtils; @@ -96,55 +93,10 @@ public class TldLocationsCache { private static final String JAR_EXT = ".jar"; private static final String TLD_EXT = ".tld"; - // Names of JARs that are known not to contain any TLDs - private static Set<String> noTldJars = null; - // Flag that indicates that an INFO level message has been provided that // there are JARs that could be skipped private static volatile boolean showTldScanWarning = true; - static { - // Set the default list of JARs to skip for TLDs - // Set the default list of JARs to skip for TLDs - StringBuilder jarList = new StringBuilder(System.getProperty( - Constants.DEFAULT_JAR_SKIP_PROP, "")); - - String tldJars = System.getProperty(Constants.TLD_JAR_SKIP_PROP, ""); - if (tldJars.length() > 0) { - if (jarList.length() > 0) { - jarList.append(','); - } - jarList.append(tldJars); - } - - if (jarList.length() > 0) { - setNoTldJars(jarList.toString()); - } - } - - /** - * Sets the list of JARs that are known not to contain any TLDs. - * - * @param jarNames List of comma-separated names of JAR files that are - * known not to contain any TLDs - */ - public static synchronized void setNoTldJars(String jarNames) { - if (jarNames == null) { - noTldJars = null; - } else { - if (noTldJars == null) { - noTldJars = new HashSet<>(); - } else { - noTldJars.clear(); - } - StringTokenizer tokenizer = new StringTokenizer(jarNames, ","); - while (tokenizer.hasMoreElements()) { - noTldJars.add(tokenizer.nextToken()); - } - } - } - - /** * The mapping of the 'global' tag library URI to the location (resource * path) of the TLD associated with that tag library. The location is @@ -244,7 +196,7 @@ public class TldLocationsCache { JarScanner jarScanner = JarScannerFactory.getJarScanner(ctxt); if (jarScanner != null) { jarScanner.scan(JarScanType.TLD, ctxt, - new TldJarScannerCallback(), noTldJars); + new TldJarScannerCallback()); } initialized = true; Copied: tomcat/trunk/java/org/apache/tomcat/JarScanFilter.java (from r1492978, tomcat/trunk/java/org/apache/tomcat/JarScanType.java) URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/JarScanFilter.java?p2=tomcat/trunk/java/org/apache/tomcat/JarScanFilter.java&p1=tomcat/trunk/java/org/apache/tomcat/JarScanType.java&r1=1492978&r2=1492979&rev=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/JarScanType.java (original) +++ tomcat/trunk/java/org/apache/tomcat/JarScanFilter.java Fri Jun 14 07:42:41 2013 @@ -16,8 +16,16 @@ */ package org.apache.tomcat; -public enum JarScanType { - TLD, - SERVLET3_PLUGGABILITY, - OTHER +public interface JarScanFilter { + + /** + * + * @param jarScanType The type of JAR scan currently being performed + * @param jarName The name of the JAR file (without any path + * information) to be checked to see if it should + * be included in the results or not + * @return <code>true</code> if the JAR should be returned in the results, + * <code>false</code> if it should be excluded + */ + boolean check(JarScanType jarScanType, String jarName); } Modified: tomcat/trunk/java/org/apache/tomcat/JarScanType.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/JarScanType.java?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/JarScanType.java (original) +++ tomcat/trunk/java/org/apache/tomcat/JarScanType.java Fri Jun 14 07:42:41 2013 @@ -18,6 +18,6 @@ package org.apache.tomcat; public enum JarScanType { TLD, - SERVLET3_PLUGGABILITY, + PLUGGABILITY, OTHER } Modified: tomcat/trunk/java/org/apache/tomcat/JarScanner.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/JarScanner.java?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/JarScanner.java (original) +++ tomcat/trunk/java/org/apache/tomcat/JarScanner.java Fri Jun 14 07:42:41 2013 @@ -16,8 +16,6 @@ */ package org.apache.tomcat; -import java.util.Set; - import javax.servlet.ServletContext; /** @@ -37,9 +35,8 @@ public interface JarScanner { * @param context The ServletContext - used to locate and access * WEB-INF/lib * @param callback The handler to process any JARs found - * @param jarsToSkip List of JARs to ignore */ - public void scan(JarScanType scanType, ServletContext context, JarScannerCallback callback, - Set<String> jarsToSkip); + public void scan(JarScanType scanType, ServletContext context, + JarScannerCallback callback); } Modified: tomcat/trunk/java/org/apache/tomcat/util/scan/Constants.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/scan/Constants.java?rev=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/scan/Constants.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/scan/Constants.java Fri Jun 14 07:42:41 2013 @@ -26,7 +26,9 @@ public final class Constants { /* System properties */ public static final String SKIP_JARS_PROPERTY = - "tomcat.util.scan.DefaultJarScanner.jarsToSkip"; + "tomcat.util.scan.StandardJarScanFilter.jarsToSkip"; + public static final String SCAN_JARS_PROPERTY = + "tomcat.util.scan.StandardJarScanFilter.jarsToScan"; /* Commons strings */ public static final String JAR_EXT = ".jar"; Added: tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java URL: http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java?rev=1492979&view=auto ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java (added) +++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanFilter.java Fri Jun 14 07:42:41 2013 @@ -0,0 +1,220 @@ +/* + * 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.util.HashSet; +import java.util.Set; +import java.util.StringTokenizer; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +import org.apache.tomcat.JarScanFilter; +import org.apache.tomcat.JarScanType; +import org.apache.tomcat.util.file.Matcher; + +public class StandardJarScanFilter implements JarScanFilter { + + private final ReadWriteLock configurationLock = + new ReentrantReadWriteLock(); + + private String defaultSkip; + private String defaultScan; + private Set<String[]> defaultSkipSet = new HashSet<>(); + private Set<String[]> defaultScanSet = new HashSet<>(); + + private String tldSkip; + private String tldScan; + private Set<String[]> tldSkipSet = new HashSet<>(); + private Set<String[]> tldScanSet = new HashSet<>(); + private boolean defaultTldScan = true; + + private String pluggabilitySkip; + private String pluggabilityScan; + private Set<String[]> pluggabilitySkipSet = new HashSet<>(); + private Set<String[]> pluggabilityScanSet = new HashSet<>(); + private boolean defaultPluggabilityScan = true; + + public StandardJarScanFilter() { + // Set the defaults from the system properties + defaultSkip = System.getProperty(Constants.SKIP_JARS_PROPERTY); + populateSetFromAttribute(defaultSkip, defaultSkipSet); + defaultScan = System.getProperty(Constants.SCAN_JARS_PROPERTY); + populateSetFromAttribute(defaultScan, defaultScanSet); + tldSkip = System.getProperty(Constants.SKIP_JARS_PROPERTY); + populateSetFromAttribute(tldSkip, tldSkipSet); + tldScan = System.getProperty(Constants.SCAN_JARS_PROPERTY); + populateSetFromAttribute(tldScan, tldScanSet); + pluggabilitySkip = System.getProperty(Constants.SKIP_JARS_PROPERTY); + populateSetFromAttribute(pluggabilitySkip, pluggabilitySkipSet); + pluggabilityScan = System.getProperty(Constants.SCAN_JARS_PROPERTY); + populateSetFromAttribute(pluggabilityScan, pluggabilityScanSet); + } + + + public String getTldSkip() { + return tldSkip; + } + + + public void setTldSkip(String tldSkip) { + this.tldSkip = tldSkip; + Lock writeLock = configurationLock.writeLock(); + try { + writeLock.lock(); + populateSetFromAttribute(tldSkip, tldSkipSet); + } finally { + writeLock.unlock(); + } + } + + + public String getTldScan() { + return tldScan; + } + + + public void setTldScan(String tldScan) { + this.tldScan = tldScan; + Lock writeLock = configurationLock.writeLock(); + try { + writeLock.lock(); + populateSetFromAttribute(tldScan, tldScanSet); + } finally { + writeLock.unlock(); + } + } + + + public boolean isDefaultTldScan() { + return defaultTldScan; + } + + + public void setDefaultTldScan(boolean defaultTldScan) { + this.defaultTldScan = defaultTldScan; + } + + + public String getPluggabilitySkip() { + return pluggabilitySkip; + } + + + public void setPluggabilitySkip(String pluggabilitySkip) { + this.pluggabilitySkip = pluggabilitySkip; + Lock writeLock = configurationLock.writeLock(); + try { + writeLock.lock(); + populateSetFromAttribute(pluggabilitySkip, pluggabilitySkipSet); + } finally { + writeLock.unlock(); + } + } + + + public String getPluggabilityScan() { + return pluggabilityScan; + } + + + public void setPluggabilityScan(String pluggabilityScan) { + this.pluggabilityScan = pluggabilityScan; + Lock writeLock = configurationLock.writeLock(); + try { + writeLock.lock(); + populateSetFromAttribute(pluggabilityScan, pluggabilityScanSet); + } finally { + writeLock.unlock(); + } + } + + + public boolean isDefaultPluggabilityScan() { + return defaultPluggabilityScan; + } + + + public void setDefaultPluggabilityScan(boolean defaultPluggabilityScan) { + this.defaultPluggabilityScan = defaultPluggabilityScan; + } + + + @Override + public boolean check(JarScanType jarScanType, String jarName) { + boolean defaultScan; + Set<String[]> toSkip = new HashSet<>(); + Set<String[]> toScan = new HashSet<>(); + + Lock readLock = configurationLock.readLock(); + try { + readLock.lock(); + switch (jarScanType) { + case TLD: { + defaultScan = defaultTldScan; + toSkip.addAll(tldSkipSet); + toScan.addAll(tldScanSet); + break; + } + case PLUGGABILITY: { + defaultScan = defaultPluggabilityScan; + toSkip.addAll(pluggabilitySkipSet); + toScan.addAll(pluggabilityScanSet); + break; + } + case OTHER: + default: { + defaultScan = true; + toSkip.addAll(defaultSkipSet); + toScan.addAll(defaultScanSet); + } + } + } finally { + readLock.unlock(); + } + + if (defaultScan) { + if (Matcher.matchPath(toSkip, jarName)) { + if (Matcher.matchPath(toScan, jarName)) { + return true; + } else { + return false; + } + } + return true; + } else { + if (Matcher.matchPath(toScan, jarName)) { + if (Matcher.matchPath(toSkip, jarName)) { + return false; + } else { + return true; + } + } + return false; + } + } + + private void populateSetFromAttribute(String attribute, Set<String[]> set) { + set.clear(); + if (attribute != null) { + StringTokenizer tokenizer = new StringTokenizer(attribute, ","); + while (tokenizer.hasMoreElements()) { + set.add(Matcher.tokenizePathAsArray(tokenizer.nextToken())); + } + } + } +} 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=1492979&r1=1492978&r2=1492979&view=diff ============================================================================== --- tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java (original) +++ tomcat/trunk/java/org/apache/tomcat/util/scan/StandardJarScanner.java Fri Jun 14 07:42:41 2013 @@ -14,7 +14,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package org.apache.tomcat.util.scan; import java.io.File; @@ -25,19 +24,17 @@ import java.net.URISyntaxException; import java.net.URL; import java.net.URLClassLoader; import java.net.URLConnection; -import java.util.HashSet; import java.util.Iterator; import java.util.Set; -import java.util.StringTokenizer; import javax.servlet.ServletContext; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; +import org.apache.tomcat.JarScanFilter; import org.apache.tomcat.JarScanType; import org.apache.tomcat.JarScanner; import org.apache.tomcat.JarScannerCallback; -import org.apache.tomcat.util.file.Matcher; import org.apache.tomcat.util.res.StringManager; /** @@ -58,24 +55,12 @@ public class StandardJarScanner implemen private static final Log log = LogFactory.getLog(StandardJarScanner.class); - private static final Set<String> defaultJarsToSkip = new HashSet<>(); - /** * The string resources for this package. */ private static final StringManager sm = StringManager.getManager(Constants.Package); - static { - String jarList = System.getProperty(Constants.SKIP_JARS_PROPERTY); - if (jarList != null) { - StringTokenizer tokenizer = new StringTokenizer(jarList, ","); - while (tokenizer.hasMoreElements()) { - defaultJarsToSkip.add(tokenizer.nextToken()); - } - } - } - /** * Controls the classpath scanning extension. */ @@ -123,6 +108,17 @@ public class StandardJarScanner implemen } /** + * Controls the filtering of the results from the scan for JARs + */ + private JarScanFilter jarScanFilter = new StandardJarScanFilter(); + public JarScanFilter getJarScanFilter() { + return jarScanFilter; + } + public void setJarScanFilter(JarScanFilter jarScanFilter) { + this.jarScanFilter = jarScanFilter; + } + + /** * Scan the provided ServletContext and class loader for JAR files. Each JAR * file found will be passed to the callback handler to be processed. * @@ -132,29 +128,15 @@ public class StandardJarScanner implemen * @param context The ServletContext - used to locate and access * WEB-INF/lib * @param callback The handler to process any JARs found - * @param jarsToSkip List of JARs to ignore. If this list is null, a - * default list will be read from the system property - * defined by {@link Constants#SKIP_JARS_PROPERTY} */ @Override public void scan(JarScanType scanType, ServletContext context, - JarScannerCallback callback, Set<String> jarsToSkip) { + JarScannerCallback callback) { if (log.isTraceEnabled()) { log.trace(sm.getString("jarScan.webinflibStart")); } - Set<String> ignoredJars; - if (jarsToSkip == null) { - ignoredJars = defaultJarsToSkip; - } else { - ignoredJars = jarsToSkip; - } - Set<String[]> ignoredJarsTokens = new HashSet<>(); - for (String pattern: ignoredJars) { - ignoredJarsTokens.add(Matcher.tokenizePathAsArray(pattern)); - } - // Scan WEB-INF/lib Set<String> dirList = context.getResourcePaths(Constants.WEB_INF_LIB); if (dirList != null) { @@ -162,8 +144,8 @@ public class StandardJarScanner implemen while (it.hasNext()) { String path = it.next(); if (path.endsWith(Constants.JAR_EXT) && - !Matcher.matchPath(ignoredJarsTokens, - path.substring(path.lastIndexOf('/')+1))) { + jarScanFilter.check(scanType, + path.substring(path.lastIndexOf('/')+1))) { // Need to scan this JAR if (log.isDebugEnabled()) { log.debug(sm.getString("jarScan.webinflibJarScan", path)); @@ -239,8 +221,8 @@ public class StandardJarScanner implemen String jarName = getJarName(urls[i]); // Skip JARs known not to be interesting - if (jarName != null && !Matcher.matchPath( - ignoredJarsTokens, jarName)) { + if (jarName != null && + jarScanFilter.check(scanType, jarName)) { if (log.isDebugEnabled()) { log.debug(sm.getString("jarScan.classloaderJarScan", urls[i])); } --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org