luehe 2003/09/23 11:48:36
Modified: catalina/src/share/org/apache/catalina/startup
TldConfig.java
Log:
Do not search *shared* JARs that are known not to contain any TLDs for TLDs.
JARs in WEB-INF/lib are *always* searched, as mandated by the spec.
Revision Changes Path
1.25 +81 -10
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.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- TldConfig.java 23 Sep 2003 18:43:12 -0000 1.24
+++ TldConfig.java 23 Sep 2003 18:48:36 -0000 1.25
@@ -96,6 +96,7 @@
import org.xml.sax.InputSource;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
+
/**
* Startup event listener for a <b>Context</b> that configures the properties
* of that Context, and the associated defined servlets.
@@ -106,12 +107,72 @@
*/
public final class TldConfig {
+ // Set 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
/**
@@ -720,7 +781,8 @@
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();
@@ -735,15 +797,24 @@
} catch (IOException e) {
// Ignore
}
- if (file.exists()) {
- String path = file.getAbsolutePath();
- if (path.endsWith(".jar")) {
- if (jarPathMap == null) {
- jarPathMap = new HashMap();
- jarPathMap.put(path, file);
- } else if (!jarPathMap.containsKey(path)) {
- jarPathMap.put(path, file);
- }
+ if (!file.exists()) {
+ continue;
+ }
+ String path = file.getAbsolutePath();
+ if (!path.endsWith(".jar")) {
+ continue;
+ }
+ /*
+ * Scan all JARs from WEB-INF/lib, plus any shared JARs
+ * that are not known not to contain any TLDs
+ */
+ if (loader == webappLoader
+ || !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]