检索专有名称

原文: https://docs.oracle.com/javase/tutorial/jndi/newstuff/dn.html

在 5.0 之前的 JDK 版本中,没有直接的方法从搜索结果中获取专有名称(DN)。 SearchResults.getName()方法始终返回相对于执行搜索的上下文的名称。为了获得搜索条目的绝对名称或全名,需要一定量的簿记来跟踪祖先上下文。每当在上下文中执行搜索,列表或 listBindings 操作时,JDK 5.0 中将添加以下两个新 API 以从 NameClassPair 检索绝对名称:

以下是从 LDAP 搜索中检索 DN 的示例:

  1. public static void printSearchEnumeration(NamingEnumeration retEnum) {
  2. try {
  3. while (retEnum.hasMore()) {
  4. SearchResult sr = (SearchResult) retEnum.next();
  5. System.out.println(">>" + sr.getNameInNamespace());
  6. }
  7. } catch (NamingException e) {
  8. e.printStackTrace();
  9. }
  10. }

完整的例子可以从 here 获得。该程序生成如下输出:

  1. >>cn=Jon Ruiz, ou=People, o=JNDITutorial
  2. >>cn=Scott Seligman, ou=People, o=JNDITutorial
  3. >>cn=Samuel Clemens, ou=People, o=JNDITutorial
  4. >>cn=Rosanna Lee, ou=People, o=JNDITutorial
  5. >>cn=Maxine Erlund, ou=People, o=JNDITutorial
  6. >>cn=Niels Bohr, ou=People, o=JNDITutorial
  7. >>cn=Uri Geller, ou=People, o=JNDITutorial
  8. >>cn=Colleen Sullivan, ou=People, o=JNDITutorial
  9. >>cn=Vinnie Ryan, ou=People, o=JNDITutorial
  10. >>cn=Rod Serling, ou=People, o=JNDITutorial
  11. >>cn=Jonathan Wood, ou=People, o=JNDITutorial
  12. >>cn=Aravindan Ranganathan, ou=People, o=JNDITutorial
  13. >>cn=Ian Anderson, ou=People, o=JNDITutorial
  14. >>cn=Lao Tzu, ou=People, o=JNDITutorial
  15. >>cn=Don Knuth, ou=People, o=JNDITutorial
  16. >>cn=Roger Waters, ou=People, o=JNDITutorial
  17. >>cn=Ben Dubin, ou=People, o=JNDITutorial
  18. >>cn=Spuds Mackenzie, ou=People, o=JNDITutorial
  19. >>cn=John Fowler, ou=People, o=JNDITutorial
  20. >>cn=Londo Mollari, ou=People, o=JNDITutorial
  21. >>cn=Ted Geisel, ou=People,o=JNDITutorial