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: [email protected]
For additional commands, e-mail: [email protected]