# 检索专有名称

> 原文： [https://docs.oracle.com/javase/tutorial/jndi/newstuff/dn.html](https://docs.oracle.com/javase/tutorial/jndi/newstuff/dn.html)

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

*   [`NameClassPair.getNameInNameSpace（名称名称）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/NameClassPair.html#getNameInNamespace-Name-)
*   [`NameClassPair.getNameInNameSpace（String name）`](https://docs.oracle.com/javase/8/docs/api/javax/naming/NameClassPair.html#getNameInNamespace-String-)

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

```
     public static void printSearchEnumeration(NamingEnumeration retEnum) {
         try {
             while (retEnum.hasMore()) {
                 SearchResult sr = (SearchResult) retEnum.next();
                 System.out.println(">>" + sr.getNameInNamespace());
             }
         } catch (NamingException e) {
             e.printStackTrace();
         }
     }

```

完整的例子可以从 [`here`](examples/FullName.java) 获得。该程序生成如下输出：

```
        >>cn=Jon Ruiz, ou=People, o=JNDITutorial
        >>cn=Scott Seligman, ou=People, o=JNDITutorial
        >>cn=Samuel Clemens, ou=People, o=JNDITutorial
        >>cn=Rosanna Lee, ou=People, o=JNDITutorial
        >>cn=Maxine Erlund, ou=People, o=JNDITutorial
        >>cn=Niels Bohr, ou=People, o=JNDITutorial
        >>cn=Uri Geller, ou=People, o=JNDITutorial
        >>cn=Colleen Sullivan, ou=People, o=JNDITutorial
        >>cn=Vinnie Ryan, ou=People, o=JNDITutorial
        >>cn=Rod Serling, ou=People, o=JNDITutorial
        >>cn=Jonathan Wood, ou=People, o=JNDITutorial
        >>cn=Aravindan Ranganathan, ou=People, o=JNDITutorial
        >>cn=Ian Anderson, ou=People, o=JNDITutorial
        >>cn=Lao Tzu, ou=People, o=JNDITutorial
        >>cn=Don Knuth, ou=People, o=JNDITutorial
        >>cn=Roger Waters, ou=People, o=JNDITutorial
        >>cn=Ben Dubin, ou=People, o=JNDITutorial
        >>cn=Spuds Mackenzie, ou=People, o=JNDITutorial
        >>cn=John Fowler, ou=People, o=JNDITutorial
        >>cn=Londo Mollari, ou=People, o=JNDITutorial
        >>cn=Ted Geisel, ou=People,o=JNDITutorial 

```