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