luehe 2003/09/26 16:09:08
Modified: catalina/src/share/org/apache/catalina/startup
TldConfig.java
Log:
Added hard-coded list of names of JARs that are known not to contain any TLDs.
This list can be overridden using the new TldConfig.setNoTldJars().
Revision Changes Path
1.31 +96 -7
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/TldConfig.java
Index: TldConfig.java
===================================================================
RCS file:
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/TldConfig.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- TldConfig.java 26 Sep 2003 19:31:16 -0000 1.30
+++ TldConfig.java 26 Sep 2003 23:09:08 -0000 1.31
@@ -108,12 +108,72 @@
*/
public final class TldConfig {
+ // Names of JARs that are known not to contain any TLDs
+ private static HashSet noTldJars;
+
private static org.apache.commons.logging.Log log=
org.apache.commons.logging.LogFactory.getLog( TldConfig.class );
private static final String FILE_URL_PREFIX = "file:";
private static final int FILE_URL_PREFIX_LEN = FILE_URL_PREFIX.length();
+
+ /*
+ * Initializes the set of JARs that are known not to contain any TLDs
+ */
+ static {
+ noTldJars = new HashSet();
+ noTldJars.add("ant.jar");
+ noTldJars.add("catalina.jar");
+ noTldJars.add("catalina-ant.jar");
+ noTldJars.add("catalina-cluster.jar");
+ noTldJars.add("catalina-optional.jar");
+ noTldJars.add("catalina-i18n-fr.jar");
+ noTldJars.add("catalina-i18n-ja.jar");
+ noTldJars.add("catalina-i18n-es.jar");
+ noTldJars.add("commons-dbcp.jar");
+ noTldJars.add("commons-modeler.jar");
+ noTldJars.add("commons-logging-api.jar");
+ noTldJars.add("commons-beanutils.jar");
+ noTldJars.add("commons-fileupload-1.0.jar");
+ noTldJars.add("commons-pool.jar");
+ noTldJars.add("commons-digester.jar");
+ noTldJars.add("commons-logging.jar");
+ noTldJars.add("commons-collections.jar");
+ noTldJars.add("commons-el.jar");
+ noTldJars.add("jakarta-regexp-1.2.jar");
+ noTldJars.add("jasper-compiler.jar");
+ noTldJars.add("jasper-runtime.jar");
+ noTldJars.add("jmx.jar");
+ noTldJars.add("jmx-tools.jar");
+ noTldJars.add("jsp-api.jar");
+ noTldJars.add("jkshm.jar");
+ noTldJars.add("jkconfig.jar");
+ noTldJars.add("naming-common.jar");
+ noTldJars.add("naming-resources.jar");
+ noTldJars.add("naming-factory.jar");
+ noTldJars.add("naming-java.jar");
+ noTldJars.add("servlet-api.jar");
+ noTldJars.add("servlets-default.jar");
+ noTldJars.add("servlets-invoker.jar");
+ noTldJars.add("servlets-common.jar");
+ noTldJars.add("servlets-webdav.jar");
+ noTldJars.add("tomcat-util.jar");
+ noTldJars.add("tomcat-http11.jar");
+ noTldJars.add("tomcat-jni.jar");
+ noTldJars.add("tomcat-jk.jar");
+ noTldJars.add("tomcat-jk2.jar");
+ noTldJars.add("tomcat-coyote.jar");
+ noTldJars.add("xercesImpl.jar");
+ noTldJars.add("xmlParserAPIs.jar");
+ // JARs from J2SE runtime
+ noTldJars.add("sunjce_provider.jar");
+ noTldJars.add("ldapsec.jar");
+ noTldJars.add("localedata.jar");
+ noTldJars.add("dnsns.jar");
+ }
+
+
// ----------------------------------------------------- Instance Variables
/**
@@ -152,7 +212,23 @@
// --------------------------------------------------------- Public Methods
- /**
+ /**
+ * 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 void setNoTldJars(String jarNames) {
+ if (jarNames != null) {
+ noTldJars.clear();
+ StringTokenizer tokenizer = new StringTokenizer(jarNames, ",");
+ while (tokenizer.hasMoreElements()) {
+ noTldJars.add(tokenizer.nextToken());
+ }
+ }
+ }
+
+ /**
* Set the validation feature of the XML parser used when
* parsing xml instances.
* @param xmlValidation true to enable xml instance validation
@@ -733,13 +809,18 @@
* location that all web applications have access to (e.g.,
* <CATALINA_HOME>/common/lib).
*
+ * The set of shared JARs to be scanned for TLDs is narrowed down by
+ * the <tt>noTldJars</tt> class variable, which contains the names of JARs
+ * that are known not to contain any TLDs.
+ *
* @return Map of JAR file paths
*/
private Map getJarPaths() {
HashMap jarPathMap = null;
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ ClassLoader webappLoader = Thread.currentThread().getContextClassLoader();
+ ClassLoader loader = webappLoader;
while (loader != null) {
if (loader instanceof URLClassLoader) {
URL[] urls = ((URLClassLoader) loader).getURLs();
@@ -761,11 +842,19 @@
if (!path.endsWith(".jar")) {
continue;
}
- if (jarPathMap == null) {
- jarPathMap = new HashMap();
- jarPathMap.put(path, file);
- } else if (!jarPathMap.containsKey(path)) {
- jarPathMap.put(path, file);
+ /*
+ * Scan all JARs from WEB-INF/lib, plus any shared JARs
+ * that are not known not to contain any TLDs
+ */
+ if (loader == webappLoader
+ || noTldJars == null
+ || !noTldJars.contains(file.getName())) {
+ if (jarPathMap == null) {
+ jarPathMap = new HashMap();
+ jarPathMap.put(path, file);
+ } else if (!jarPathMap.containsKey(path)) {
+ jarPathMap.put(path, file);
+ }
}
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]