Index: java/org/apache/catalina/startup/TldConfig.java =================================================================== --- java/org/apache/catalina/startup/TldConfig.java (revision 784615) +++ java/org/apache/catalina/startup/TldConfig.java Mon Sep 14 10:58:26 CEST 2009 @@ -437,16 +437,68 @@ /** * Scans all TLD entries in the given JAR for application listeners. * - * @param file JAR file whose TLD entries are scanned for application + * @param file JAR file (archive or directory) whose TLD entries are scanned for application * listeners */ - private void tldScanJar(File file) throws Exception { + private void tldScanJar(File file) { + if (file.isFile()) { + // A real Jar file is processed + tldScanJarFile(file); + } else { + // The processed file is a directory (named .jar), maybe structured like a jar + // Let's see if there is any TLD inside + + // Only look for META-INF/**/*.tld patterns + File metaInf = new File(file, "META-INF"); + tldScanJarDirectory(metaInf); + } + } + + /** + * Scans all TLD entries in the given JAR File (directory)for application listeners. + * + * @param file JAR file (directory) whose TLD entries are scanned for application + * listeners + */ + private void tldScanJarDirectory(File file) { + String jarPath = file.getAbsolutePath(); + + String name = file.getName(); + if (file.isFile()) { + if (name.endsWith(".tld")) { + if (log.isTraceEnabled()) { + log.trace(" Processing TLD at '" + name + "'"); + } + try { + tldScanStream(new InputSource(new FileInputStream(file))); + } catch (Exception e) { + log.error(sm.getString("contextConfig.tldEntryException", + name, jarPath, context.getPath()), + e); + } + } + } else { + // Directory case, look at the childs + File[] childs = file.listFiles(); + for (File child : childs) { + tldScanJarDirectory(child); + } + } + + } + + /** + * Scans all TLD entries in the given JAR File (archive)for application listeners. + * + * @param file JAR file (archive) whose TLD entries are scanned for application + * listeners + */ + private void tldScanJarFile(File file) { JarFile jarFile = null; String name = null; String jarPath = file.getAbsolutePath(); - try { jarFile = new JarFile(file); Enumeration entries = jarFile.entries();