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]

Reply via email to