From 26cec90d819c0968eec96989192e5e473fb715d7 Mon Sep 17 00:00:00 2001 From: markt Date: Thu, 17 Feb 2011 20:38:49 +0000 Subject: [PATCH] Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50802 Ensure that ServletContext.getResourcePaths() includes static resources packaged in JAR files in its output. git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@1071774 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/naming/resources/BaseDirContext.java | 33 +++++++++++++--------- .../apache/naming/resources/FileDirContext.java | 12 ++++---- .../apache/naming/resources/VirtualDirContext.java | 4 +-- .../org/apache/naming/resources/WARDirContext.java | 12 ++++---- webapps/docs/changelog.xml | 5 ++++ 5 files changed, 36 insertions(+), 30 deletions(-) diff --git a/java/org/apache/naming/resources/BaseDirContext.java b/java/org/apache/naming/resources/BaseDirContext.java index ea09c726d..4baed1ea6 100644 --- a/java/org/apache/naming/resources/BaseDirContext.java +++ b/java/org/apache/naming/resources/BaseDirContext.java @@ -47,6 +47,8 @@ import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import org.apache.naming.NameParserImpl; +import org.apache.naming.NamingContextBindingsEnumeration; +import org.apache.naming.NamingEntry; import org.apache.naming.StringManager; /** @@ -703,25 +705,28 @@ public abstract class BaseDirContext implements DirContext { } // Next do a standard lookup - NamingEnumeration bindings = doListBindings(name); + List bindings = doListBindings(name); - if (bindings != null) - return bindings; - // Check the alternate locations + List altBindings = null; + for (DirContext altDirContext : altDirContexts) { - if (altDirContext instanceof BaseDirContext) - bindings = ((BaseDirContext) altDirContext).doListBindings( + if (altDirContext instanceof BaseDirContext) { + altBindings = ((BaseDirContext) altDirContext).doListBindings( "/META-INF/resources" + name); - else { - try { - bindings = altDirContext.listBindings(name); - } catch (NamingException ne) { - // Ignore + } + if (altBindings != null) { + if (bindings == null) { + bindings = altBindings; + } else { + bindings.addAll(altBindings); } } - if (bindings != null) - return bindings; + } + + if (bindings != null) { + return new NamingContextBindingsEnumeration(bindings.iterator(), + this); } // Really not found @@ -1590,7 +1595,7 @@ public abstract class BaseDirContext implements DirContext { protected abstract Object doLookup(String name); - protected abstract NamingEnumeration doListBindings(String name) + protected abstract List doListBindings(String name) throws NamingException; protected abstract String doGetRealPath(String name); diff --git a/java/org/apache/naming/resources/FileDirContext.java b/java/org/apache/naming/resources/FileDirContext.java index eff0f30f8..b8fdc2c37 100644 --- a/java/org/apache/naming/resources/FileDirContext.java +++ b/java/org/apache/naming/resources/FileDirContext.java @@ -27,8 +27,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.Hashtable; +import java.util.List; -import javax.naming.Binding; import javax.naming.NameAlreadyBoundException; import javax.naming.NameClassPair; import javax.naming.NameNotFoundException; @@ -42,7 +42,6 @@ import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; import org.apache.catalina.util.RequestUtil; -import org.apache.naming.NamingContextBindingsEnumeration; import org.apache.naming.NamingContextEnumeration; import org.apache.naming.NamingEntry; @@ -318,7 +317,7 @@ public class FileDirContext extends BaseDirContext { * @exception NamingException if a naming exception is encountered */ @Override - protected NamingEnumeration doListBindings(String name) + protected List doListBindings(String name) throws NamingException { File file = file(name); @@ -326,8 +325,7 @@ public class FileDirContext extends BaseDirContext { if (file == null) return null; - return new NamingContextBindingsEnumeration(list(file).iterator(), - this); + return list(file); } @@ -848,9 +846,9 @@ public class FileDirContext extends BaseDirContext { * @param file Collection * @return Vector containing NamingEntry objects */ - protected ArrayList list(File file) { + protected List list(File file) { - ArrayList entries = new ArrayList(); + List entries = new ArrayList(); if (!file.isDirectory()) return entries; String[] names = file.list(); diff --git a/java/org/apache/naming/resources/VirtualDirContext.java b/java/org/apache/naming/resources/VirtualDirContext.java index 6974c09ea..08dd8347a 100644 --- a/java/org/apache/naming/resources/VirtualDirContext.java +++ b/java/org/apache/naming/resources/VirtualDirContext.java @@ -147,8 +147,8 @@ public class VirtualDirContext extends FileDirContext { } @Override - protected ArrayList list(File file) { - ArrayList entries = super.list(file); + protected List list(File file) { + List entries = super.list(file); // adds virtual tlds for WEB-INF listing if ("WEB-INF".equals(file.getName())) { diff --git a/java/org/apache/naming/resources/WARDirContext.java b/java/org/apache/naming/resources/WARDirContext.java index 778c18c22..82652ba2f 100644 --- a/java/org/apache/naming/resources/WARDirContext.java +++ b/java/org/apache/naming/resources/WARDirContext.java @@ -26,11 +26,11 @@ import java.util.Arrays; import java.util.Date; import java.util.Enumeration; import java.util.Hashtable; +import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipException; import java.util.zip.ZipFile; -import javax.naming.Binding; import javax.naming.CompositeName; import javax.naming.InvalidNameException; import javax.naming.Name; @@ -45,7 +45,6 @@ import javax.naming.directory.ModificationItem; import javax.naming.directory.SearchControls; import javax.naming.directory.SearchResult; -import org.apache.naming.NamingContextBindingsEnumeration; import org.apache.naming.NamingContextEnumeration; import org.apache.naming.NamingEntry; @@ -331,20 +330,19 @@ public class WARDirContext extends BaseDirContext { * @exception NamingException if a naming exception is encountered */ @Override - protected NamingEnumeration doListBindings(String strName) + protected List doListBindings(String strName) throws NamingException { Name name = getEscapedJndiName(strName); if (name.isEmpty()) - return new NamingContextBindingsEnumeration(list(entries).iterator(), - this); + return list(entries); + Entry entry = treeLookup(name); if (entry == null) return null; - return new NamingContextBindingsEnumeration(list(entry).iterator(), - this); + return list(entry); } diff --git a/webapps/docs/changelog.xml b/webapps/docs/changelog.xml index 3021d7bd1..437416648 100644 --- a/webapps/docs/changelog.xml +++ b/webapps/docs/changelog.xml @@ -97,6 +97,11 @@ that the requestInitialized and requestDestroyed events are only fired once per request at the correct times. (markt) + + 50802: Ensure that + ServletContext.getResourcePaths() includes static resources + packaged in JAR files in its output. (markt) + -- 2.11.0