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:42:36 UTC

svn commit: r366304 - in /tomcat/container/tc5.5.x: catalina/src/share/org/apache/naming/ catalina/src/share/org/apache/naming/resources/ webapps/docs/

Author: markt
Date: Thu Jan  5 13:42:29 2006
New Revision: 366304

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

Modified:
    tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/NamingContext.java
    tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java
    tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java
    tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/resources/WARDirContext.java
    tomcat/container/tc5.5.x/webapps/docs/changelog.xml

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

Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java?rev=366304&r1=366303&r2=366304&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java (original)
+++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/NamingContextBindingsEnumeration.java Thu Jan  5 13:42:29 2006
@@ -20,6 +20,8 @@
 import java.util.Iterator;
 
 import javax.naming.Binding;
+import javax.naming.CompositeName;
+import javax.naming.Context;
 import javax.naming.NamingEnumeration;
 import javax.naming.NamingException;
 
@@ -37,11 +39,11 @@
     // ----------------------------------------------------------- Constructors
 
 
-    public NamingContextBindingsEnumeration(Iterator entries) {
+    public NamingContextBindingsEnumeration(Iterator entries, Context ctx) {
     	iterator = entries;
+        this.ctx = ctx;
     }
 
-
     // -------------------------------------------------------------- Variables
 
 
@@ -50,6 +52,12 @@
      */
     protected Iterator iterator;
 
+    
+    /**
+     * The context for which this enumeration is being generated.
+     */
+    private Context ctx;
+
 
     // --------------------------------------------------------- Public Methods
 
@@ -59,7 +67,7 @@
      */
     public Object next()
         throws NamingException {
-        return nextElement();
+        return nextElementInternal();
     }
 
 
@@ -86,7 +94,31 @@
 
 
     public Object nextElement() {
+        try {
+            return nextElementInternal();
+        } catch (NamingException e) {
+            throw new RuntimeException(e.getMessage(), e);
+        }
+    }
+    
+    private Object nextElementInternal() throws NamingException {
         NamingEntry entry = (NamingEntry) iterator.next();
+        
+        // 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) {
+                NamingException ne = new NamingException(e.getMessage());
+                ne.initCause(e);
+                throw ne;
+            }
+        }
+        
         return new Binding(entry.name, entry.value.getClass().getName(), 
                            entry.value, true);
     }

Modified: tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java?rev=366304&r1=366303&r2=366304&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java (original)
+++ tomcat/container/tc5.5.x/catalina/src/share/org/apache/naming/resources/FileDirContext.java Thu Jan  5 13:42:29 2006
@@ -334,7 +334,8 @@
             throw new NamingException
                 (sm.getString("resources.notFound", name));
 
-        return new NamingContextBindingsEnumeration(list(file).iterator());
+        return new NamingContextBindingsEnumeration(list(file).iterator(),
+                this);
 
     }
 

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

Modified: tomcat/container/tc5.5.x/webapps/docs/changelog.xml
URL: http://svn.apache.org/viewcvs/tomcat/container/tc5.5.x/webapps/docs/changelog.xml?rev=366304&r1=366303&r2=366304&view=diff
==============================================================================
--- tomcat/container/tc5.5.x/webapps/docs/changelog.xml (original)
+++ tomcat/container/tc5.5.x/webapps/docs/changelog.xml Thu Jan  5 13:42:29 2006
@@ -15,6 +15,13 @@
 <body>
 
 <section name="Tomcat 5.5.16">
+  <subsection name="Catalina">
+    <changelog>
+      <fix>
+        <bug>23950</bug>: Context.listBindings() should return objects not references. (markt)
+      </fix>
+    </changelog>
+  </subsection>
   <subsection name="Cluster">
     <changelog>
       <add>
@@ -26,7 +33,7 @@
       </update>
       <update>
         DataSender close connection and throw exception also even if waitForAck is false.  (pero)
-      </upodate>
+      </update>
       <fix>
         Active cluster junit test again. (pero)
       </fix>



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