我需要对 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
“无效名称”而失败。
我知道我可以手动删除这些引号,但这感觉很笨拙。有没有办法避免这种逃避?或者也许有更清洁的方法来做我需要的?
PS 有趣的是,官方 JNDI 教程建议使用LdapName
来实现“简单的名称操作”,甚至提到了转义问题,但没有提供有关上述问题的任何链接。