Java 列出远程计算机上jndi中所有项的代码

Java 列出远程计算机上jndi中所有项的代码,java,jndi,Java,Jndi,任何人都可以告诉我或告诉我如何编写代码来列出远程机器中的所有jndi条目吗?可以列出InitialContext的所有条目。您可以使用以下代码段: InitialContext ctx = new InitialContext(); NamingEnumeration<NameClassPair> list = ctx.list(""); while (list.hasMore()) { System.out.println(list.next().getName()); }

任何人都可以告诉我或告诉我如何编写代码来列出远程机器中的所有jndi条目吗?

可以列出InitialContext的所有条目。您可以使用以下代码段:

InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("");
while (list.hasMore()) {
  System.out.println(list.next().getName());
}
InitialContext ctx=newinitialcontext();
NamingEnumeration list=ctx.list(“”);
while(list.hasMore()){
System.out.println(list.next().getName());
}

如果您使用的是应用服务器,通常可以选择浏览JNDI树

我知道,距离上一个答案还有很多时间,但我需要列出上下文中可用的所有jdbc数据源(TOME上下文)

在我的例子中,我需要的不仅仅是
列表(“”
(遗憾的是,这对我来说不起作用)来实现我的目标。 我在这里找到了命名环境列表:

有了这些,我使用下一个代码片段获得了所有可用的jdbc资源

InitialContext ctx = new InitialContext();
NamingEnumeration<NameClassPair> list = ctx.list("java:comp/env/jdbc");
while (list.hasMore()) {
    System.out.println(list.next().getName());
}
InitialContext ctx=newinitialcontext();
namingumerationlist=ctx.list(“java:comp/env/jdbc”);
while(list.hasMore()){
System.out.println(list.next().getName());
}
就这些


我希望这能帮助其他人,也能帮助我。

前面的答案没有给我“完整的画面”(在Tomcat7上),因此我将以下合并组合在一起,它将JNDI值转换为树映射(使用
toString
值):

在Tomcat7中提供以下输出:

toMap(new InitialContext());
{
  "comp": {
    "env": {
      "myCustomVar": "foobar"
    },
    "UserTransaction": "Cannot create resource instance",
    "Resources": {
      "index.html": "org.apache.naming.resources.FileDirContext$FileResource@32edeea8",
      "WEB-INF": {
        "ibm-web-ext.xml": "org.apache.naming.resources.FileDirContext$FileResource@6132b73b",
        "ibm-web-bnd.xml": "org.apache.naming.resources.FileDirContext$FileResource@22cf71b7"
      }
    }
  }
}
我正在使用以下代码(不用于生产):

public void discoverJndi(字符串路径,上下文)抛出TestClientException,NamingException{
试一试{
NamingEnumeration列表=context.list(路径);
while(list.hasMore()){
字符串名称=list.next().getName();
字符串child=path.equals(“”)name:path+“/”+name;
系统输出打印项次(子项);
发现JNDI(子对象、上下文);
}
}catch(NotContextException e){}
}

这不是tomcat中的完整树。仅限于用户在该实例中创建的内容。有没有办法在tomcat上做到这一点?@John-补充道(希望如此)可以解决您的问题(迟做总比不做好)。虽然这段代码片段可能是解决方案,但确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
{
  "comp": {
    "env": {
      "myCustomVar": "foobar"
    },
    "UserTransaction": "Cannot create resource instance",
    "Resources": {
      "index.html": "org.apache.naming.resources.FileDirContext$FileResource@32edeea8",
      "WEB-INF": {
        "ibm-web-ext.xml": "org.apache.naming.resources.FileDirContext$FileResource@6132b73b",
        "ibm-web-bnd.xml": "org.apache.naming.resources.FileDirContext$FileResource@22cf71b7"
      }
    }
  }
}
public void discoverJndi(String path, Context context) throws TestClientException, NamingException {
    try {
        NamingEnumeration<NameClassPair> list = context.list(path);
        while (list.hasMore()) {
            String name = list.next().getName();
            String child = path.equals("") ? name : path + "/" + name;
            System.out.println(child);
            discoverJndi(child, context);
        }
    } catch (NotContextException e) {}
}