【发布时间】:2012-07-27 15:04:48
【问题描述】:
我需要对 LDAP 目录服务器进行多次查询,并且我正在使用 JNDI 目录工具。然后我需要使用它们的专有名称对查询结果中的对象进行一些处理。服务器返回的某些条目包含正斜杠字符,因此 JNDI 使用双引号对整个名称进行转义:
NamingEnumeration<SearchResult> results = dirContext.search(queryRoot, queryFilter, controls);
for (SearchResult result : Collections.list(results)) {
String objectName = result.getName();
System.out.println(objectName);
}
如果查询结果中的一个对象有一个名称,比如'b=id/10,a=1',它会像这样打印
"b=id/10,a=1"
注意名称周围的双引号。由于这些引号,我无法直接从中创建javax.naming.ldap.LdapName:它以NamingException "Invalid name" 失败。
我知道我可以手动删除这些引号,但这感觉很老套。有没有办法避免这种逃避?或者也许有更清洁的方法来做我需要的事情?
附:有趣的是,official JNDI tutorial 建议使用LdapName 来实现“简单的名称操作”,甚至提到了转义问题,但没有提供有关上述问题的任何链接。
【问题讨论】: