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]