From f6cc05398e1acdbc04d228e71bda99016c956154 Mon Sep 17 00:00:00 2001 From: markt Date: Mon, 20 Jul 2009 16:28:27 +0000 Subject: [PATCH] Revert the TldConfig part of r795860. It appears to have introduced intermittent TCK failures. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@795902 13f79535-47bb-0310-9956-ffa450edef68 --- java/org/apache/catalina/startup/TldConfig.java | 52 ++++++++++++------------- 1 file changed, 25 insertions(+), 27 deletions(-) diff --git a/java/org/apache/catalina/startup/TldConfig.java b/java/org/apache/catalina/startup/TldConfig.java index 6713bf229..c5fc9cc89 100644 --- a/java/org/apache/catalina/startup/TldConfig.java +++ b/java/org/apache/catalina/startup/TldConfig.java @@ -29,7 +29,6 @@ import java.net.URLClassLoader; import java.util.ArrayList; import java.util.Enumeration; import java.util.HashSet; -import java.util.Iterator; import java.util.Set; import java.util.StringTokenizer; import java.util.jar.JarEntry; @@ -39,7 +38,6 @@ import javax.naming.NameClassPair; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.directory.DirContext; -import javax.servlet.ServletContext; import javax.servlet.ServletException; import org.apache.catalina.Context; @@ -333,7 +331,7 @@ public final class TldConfig implements LifecycleListener { tldScanWebXml(); // Stage 3a - TLDs under WEB-INF (not lib or classes) - tldScanResourcePaths(WEB_INF); + tldScanResourcePaths(context.getResources(), WEB_INF); // Stage 3b - .jar files in WEB-INF/lib/ tldScanWebInfLib(); @@ -401,51 +399,51 @@ public final class TldConfig implements LifecycleListener { } /* - * Scans the web application's sub-directory identified by rootPath, - * along with its sub-directories, for TLDs. + * Scans the web application's subdirectory identified by rootPath, + * along with its subdirectories, for TLDs. * * Initially, rootPath equals /WEB-INF/. The /WEB-INF/classes and - * /WEB-INF/lib sub-directories are excluded from the search, as per the + * /WEB-INF/lib subdirectories are excluded from the search, as per the * JSP 2.0 spec. * - * @param startPath The path whose sub-directories are to be searched for + * @param resources The web application's resources + * @param rootPath The path whose subdirectories are to be searched for * TLDs - * - * Keep code in sync with o.a.j.compiler.TldLocationsCache */ - private void tldScanResourcePaths(String startPath) { + private void tldScanResourcePaths(DirContext resources, + String rootPath) { if (log.isTraceEnabled()) { - log.trace(sm.getString("tldConfig.webinfScan", startPath)); + log.trace(sm.getString("tldConfig.webinfScan", rootPath)); } - ServletContext ctxt = getContext().getServletContext(); - - Set dirList = ctxt.getResourcePaths(startPath); - if (dirList != null) { - Iterator it = dirList.iterator(); - while (it.hasNext()) { - String path = it.next(); - if (!path.endsWith(TLD_EXT) - && (path.startsWith("/WEB-INF/lib/") - || path.startsWith("/WEB-INF/classes/"))) { + try { + NamingEnumeration items = resources.list(rootPath); + while (items.hasMoreElements()) { + NameClassPair item = items.nextElement(); + String resourcePath = rootPath + item.getName(); + if (!resourcePath.endsWith(TLD_EXT) + && (resourcePath.equals("/WEB-INF/classes") + || resourcePath.equals("/WEB-INF/lib"))) { continue; } - if (path.endsWith(".tld")) { - if (path.startsWith("/WEB-INF/tags/") && - !path.endsWith("implicit.tld")) { + if (resourcePath.endsWith(TLD_EXT)) { + if (resourcePath.startsWith("/WEB-INF/tags") && + !resourcePath.endsWith("implicit.tld")) { continue; } try { - tldScanTld(path); + tldScanTld(resourcePath); } catch (Exception e) { log.warn(sm.getString( - "tldConfig.webinfFail", path),e); + "tldConfig.webinfFail", resourcePath),e); } } else { - tldScanResourcePaths(path); + tldScanResourcePaths(resources, resourcePath + '/'); } } + } catch (NamingException e) { + // Silent catch: it's valid that no /WEB-INF directory exists } } -- 2.11.0