--- D:/workspace/jakarta-tomcat-naming/org/apache/naming/NamingContextBindingsEnumeration.java (revision 365654) +++ D:/workspace/jakarta-tomcat-naming/org/apache/naming/NamingContextBindingsEnumeration.java (working copy) @@ -17,11 +17,15 @@ package org.apache.naming; +import java.util.Hashtable; import java.util.Iterator; import javax.naming.Binding; +import javax.naming.CompositeName; +import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; +import javax.naming.spi.NamingManager; /** * Naming enumeration implementation. @@ -37,8 +41,10 @@ // ----------------------------------------------------------- Constructors - public NamingContextBindingsEnumeration(Iterator entries) { + public NamingContextBindingsEnumeration(Iterator entries, Context ctx, Hashtable env) { iterator = entries; + this.ctx = ctx; + this.env = env; } @@ -49,8 +55,9 @@ * Underlying enumeration. */ protected Iterator iterator; + private Context ctx; + private Hashtable env; - // --------------------------------------------------------- Public Methods @@ -59,7 +66,15 @@ */ public Object next() throws NamingException { - return nextElement(); + try { + return nextElementInternal(); + } catch (RuntimeException e) { + throw (RuntimeException)e; + } catch (Exception e) { + NamingException ne = new NamingException(); + ne.setRootCause(e); + throw ne; + } } @@ -85,11 +100,26 @@ } - public Object nextElement() { + private Object nextElementInternal() throws Exception { NamingEntry entry = (NamingEntry) iterator.next(); - return new Binding(entry.name, entry.value.getClass().getName(), - entry.value, true); + + String name = entry.name; + Object obj = NamingManager.getObjectInstance(entry.value, + new CompositeName(name), ctx, env); + return new Binding(name, obj.getClass().getName(), + obj, true); } + + public Object nextElement() { + try { + return nextElementInternal(); + } catch (RuntimeException e) { + throw (RuntimeException)e; + } catch (Exception e) { + //TODO: better handling for nested Exceptions pre 1.4 + throw new RuntimeException(e.getMessage()); + } + } } --- D:/workspace/jakarta-tomcat-naming/org/apache/naming/NamingContext.java (revision 365636) +++ D:/workspace/jakarta-tomcat-naming/org/apache/naming/NamingContext.java (working copy) @@ -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, env); } NamingEntry entry = (NamingEntry) bindings.get(name.get(0)); --- D:/workspace/jakarta-tomcat-naming/org/apache/naming/resources/FileDirContext.java (revision 365636) +++ D:/workspace/jakarta-tomcat-naming/org/apache/naming/resources/FileDirContext.java (working copy) @@ -334,7 +334,7 @@ throw new NamingException (sm.getString("resources.notFound", name)); - return new NamingContextBindingsEnumeration(list(file).iterator()); + return new NamingContextBindingsEnumeration(list(file).iterator(), this, env); } --- D:/workspace/jakarta-tomcat-naming/org/apache/naming/resources/WARDirContext.java (revision 365636) +++ D:/workspace/jakarta-tomcat-naming/org/apache/naming/resources/WARDirContext.java (working copy) @@ -322,12 +322,12 @@ public NamingEnumeration listBindings(Name name) throws NamingException { if (name.isEmpty()) - return new NamingContextBindingsEnumeration(list(entries).iterator()); + return new NamingContextBindingsEnumeration(list(entries).iterator(), this, env); 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, env); }