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]