private static void rlist(NamingContext ctx, NameComponent[] base, StringBuffer buf) { BindingListHolder listHolder = new BindingListHolder(new Binding[0]); BindingIteratorHolder iterHolder = new BindingIteratorHolder(); ctx.list(0, listHolder, iterHolder); BindingHolder bindingHolder = new BindingHolder(); if (iterHolder.value == null) return; NameComponent[] name = new NameComponent[base.length + 1]; for (int i = 0; i < base.length; i++) name[i] = base[i]; while (iterHolder.value.next_one(bindingHolder)) { Binding binding = bindingHolder.value; name[name.length - 1] = binding.binding_name[0]; try { String stringName = namingService.to_string(name); buf.append(stringName); } catch (Exception e) { buf.append(e.getMessage()); } if (binding.binding_type.value() == BindingType._ncontext) { // this entry is for a subcontext // add trailing '/' just to distinguish // a subcontext from a regular object buf.append('/'); buf.append('\n'); // recursively list the subcontext contents try { NamingContext subCtx = NamingContextHelper.narrow(ctx.resolve(binding.binding_name)); rlist(subCtx, name, buf); } catch (Exception e) { buf.append(e.getMessage()); } } else { buf.append('\n'); } } }