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: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]