You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2006/01/05 22:41:14 UTC

svn commit: r366303 - in /tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming: NamingContext.java NamingContextBindingsEnumeration.java resources/FileDirContext.java resources/WARDirContext.java

Author: markt
Date: Thu Jan  5 13:41:08 2006
New Revision: 366303

URL: http://svn.apache.org/viewcvs?rev=366303&view=rev
Log:
Fix for bug 23950. Context.listBindings() should return Objects not References.

Modified:
    tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContext.java
    tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java
    tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java
    tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/WARDirContext.java

Modified: tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContext.java
URL: http://svn.apache.org/viewcvs/tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContext.java?rev=366303&r1=366302&r2=366303&view=diff
==============================================================================
--- tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContext.java (original)
+++ tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContext.java Thu Jan  5 13:41:08 2006
@@ -382,7 +382,8 @@
         while ((!name.isEmpty()) && (name.get(0).length() == 0))
             name = name.getSuffix(1);
         if (name.isEmpty()) {
-            return new NamingContextBindingsEnumeration(bindings.elements());
+            return new NamingContextBindingsEnumeration(bindings.elements(),
+                    this);
         }
         
         NamingEntry entry = (NamingEntry) bindings.get(name.get(0));

Modified: tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java
URL: http://svn.apache.org/viewcvs/tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java?rev=366303&r1=366302&r2=366303&view=diff
==============================================================================
--- tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java (original)
+++ tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java Thu Jan  5 13:41:08 2006
@@ -19,6 +19,9 @@
 
 import java.util.Vector;
 import java.util.Enumeration;
+
+import javax.naming.CompositeName;
+import javax.naming.Context;
 import javax.naming.NamingException;
 import javax.naming.NamingEnumeration;
 import javax.naming.Binding;
@@ -37,13 +40,16 @@
     // ----------------------------------------------------------- Constructors
 
 
-    public NamingContextBindingsEnumeration(Vector entries) {
+    public NamingContextBindingsEnumeration(Vector entries, Context ctx) {
         enumeration = entries.elements();
+        this.ctx = ctx;
     }
 
 
-    public NamingContextBindingsEnumeration(Enumeration enumeration) {
+    public NamingContextBindingsEnumeration(Enumeration enumeration,
+            Context ctx) {
         this.enumeration = enumeration;
+        this.ctx = ctx;
     }
 
 
@@ -54,6 +60,12 @@
      * Underlying enumeration.
      */
     protected Enumeration enumeration;
+    
+    /**
+     * The context for which this enumeration is being generated.
+     */
+    private Context ctx;
+    
 
 
     // --------------------------------------------------------- Public Methods
@@ -64,7 +76,7 @@
      */
     public Object next()
         throws NamingException {
-        return nextElement();
+        return nextElementInternal();
     }
 
 
@@ -89,13 +101,33 @@
         return enumeration.hasMoreElements();
     }
 
-
     public Object nextElement() {
+        try {
+            return nextElementInternal();
+        } catch (NamingException e) {
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+    
+    private Object nextElementInternal() throws NamingException {
         NamingEntry entry = (NamingEntry) enumeration.nextElement();
+        
+        // If the entry is a reference, resolve it
+        if (entry.type == NamingEntry.REFERENCE
+                || entry.type == NamingEntry.LINK_REF) {
+            try {
+                // A lookup will resolve the entry
+                ctx.lookup(new CompositeName(entry.name));
+            } catch (NamingException e) {
+                throw e;
+            } catch (Exception e) {
+                throw new NamingException(e.getMessage());
+            }
+        }
+        
         return new Binding(entry.name, entry.value.getClass().getName(), 
                            entry.value, true);
     }
-
 
 }
 

Modified: tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java
URL: http://svn.apache.org/viewcvs/tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java?rev=366303&r1=366302&r2=366303&view=diff
==============================================================================
--- tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java (original)
+++ tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java Thu Jan  5 13:41:08 2006
@@ -334,7 +334,7 @@
 
         Vector entries = list(file);
 
-        return new NamingContextBindingsEnumeration(entries);
+        return new NamingContextBindingsEnumeration(entries, this);
 
     }
 

Modified: tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/WARDirContext.java
URL: http://svn.apache.org/viewcvs/tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/WARDirContext.java?rev=366303&r1=366302&r2=366303&view=diff
==============================================================================
--- tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/WARDirContext.java (original)
+++ tomcat/container/branches/tc4.1.x/catalina/src/share/org/apache/naming/resources/WARDirContext.java Thu Jan  5 13:41:08 2006
@@ -319,12 +319,12 @@
     public NamingEnumeration listBindings(Name name)
         throws NamingException {
         if (name.isEmpty())
-            return new NamingContextBindingsEnumeration(list(entries));
+            return new NamingContextBindingsEnumeration(list(entries), this);
         Entry entry = treeLookup(name);
         if (entry == null)
             throw new NamingException
                 (sm.getString("resources.notFound", name));
-        return new NamingContextBindingsEnumeration(list(entry));
+        return new NamingContextBindingsEnumeration(list(entry), this);
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org