Fix https://issues.apache.org/bugzilla/show_bug.cgi?id=50802
authormarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 17 Feb 2011 20:38:49 +0000 (20:38 +0000)
committermarkt <markt@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 17 Feb 2011 20:38:49 +0000 (20:38 +0000)
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

java/org/apache/naming/resources/BaseDirContext.java
java/org/apache/naming/resources/FileDirContext.java
java/org/apache/naming/resources/VirtualDirContext.java
java/org/apache/naming/resources/WARDirContext.java
webapps/docs/changelog.xml

index ea09c72..4baed1e 100644 (file)
@@ -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<Binding> bindings = doListBindings(name);
+        List<NamingEntry> bindings = doListBindings(name);
 
-        if (bindings != null)
-            return bindings;
-        
         // Check the alternate locations
+        List<NamingEntry> 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<Binding> doListBindings(String name)
+    protected abstract List<NamingEntry> doListBindings(String name)
         throws NamingException;
 
     protected abstract String doGetRealPath(String name);
index eff0f30..b8fdc2c 100644 (file)
@@ -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<Binding> doListBindings(String name)
+    protected List<NamingEntry> 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<NamingEntry> list(File file) {
+    protected List<NamingEntry> list(File file) {
 
-        ArrayList<NamingEntry> entries = new ArrayList<NamingEntry>();
+        List<NamingEntry> entries = new ArrayList<NamingEntry>();
         if (!file.isDirectory())
             return entries;
         String[] names = file.list();
index 6974c09..08dd834 100644 (file)
@@ -147,8 +147,8 @@ public class VirtualDirContext extends FileDirContext {
     }
 
     @Override
-    protected ArrayList<NamingEntry> list(File file) {
-        ArrayList<NamingEntry> entries = super.list(file);
+    protected List<NamingEntry> list(File file) {
+        List<NamingEntry> entries = super.list(file);
 
         // adds virtual tlds for WEB-INF listing
         if ("WEB-INF".equals(file.getName())) {
index 778c18c..82652ba 100644 (file)
@@ -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<Binding> doListBindings(String strName)
+    protected List<NamingEntry> 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);
     }
 
 
index 3021d7b..4374166 100644 (file)
         that the requestInitialized and requestDestroyed events are only fired
         once per request at the correct times. (markt)
       </fix>
+      <fix>
+        <bug>50802</bug>: Ensure that
+        <code>ServletContext.getResourcePaths()</code> includes static resources
+        packaged in JAR files in its output. (markt)
+      </fix>
     </changelog>
   </subsection>
   <subsection name="Coyote">