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);
}
クエリ結果のオブジェクトの 1 つに名前 (たとえば、'b=id/10,a=1') がある場合、次のように出力されます。
"b=id/10,a=1"
名前の前後の二重引用符に注意してください。これらの引用符があるため、直接作成することはできません。「無効な名前」javax.naming.ldap.LdapName
で失敗します。NamingException
これらの引用符を手動で削除できることは理解していますが、これはハッキリしています。そのようなエスケープを回避する方法はありますか? または、必要なことを行うためのよりクリーンな方法がありますか?
PS公式のJNDIチュートリアルが「簡単な名前操作」を実現するために使用することを提案しLdapName
、エスケープの問題についても言及しているのに、上記の問題に関するリンクを提供していないのは面白いです。