0

Active Directory サーバーから名前を取得するときに、常にエラーが発生します。エラーは次のとおりです。

javax.naming.InvalidNameException: Invalid name: "CN=»OGMA Serviço LAN/WAN",cn=Recipients,cn=Users,,dc=intra

少しググったら以下の情報を見つけました

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4307193 http://docs.oracle.com/javase/jndi/tutorial/beyond/names/syntax.html

ご覧のとおり、パーサー アプローチと複合名アプローチの両方を試しましたが、エラーが続きます。私は何が欠けていますか?

これらの操作を行うコードは次のとおりです。

DirContext ctx = new InitialDirContext( (Hashtable<String,String>) env);

Name n2 = new CompositeName().add(usersContainer);
NamingEnumeration contentsEnum = ctx.list(n2);

String[] attName = {"cn"};

while ( contentsEnum.hasNext() ) {
    NameClassPair ncp = (NameClassPair) contentsEnum.next();
    NameParser ldapParser = ctx.getNameParser("");

    String name = ncp.getName() + "," + usersContainer;
    Name n = ldapParser.parse(name);

    ctx.lookup(n);

変数name"CN=»OGMA Serviço LAN/WAN" + cn=Recipients,cn=Users,,dc=intra

4

1 に答える 1

0

そもそもなんでそんなに凝ったことをするのか理解できません。Context.listBindings()代わりに使用した場合はContext.list(),、名前とバインディングの両方が既にあるため、名前とルックアップを完全に構築することを避けることができます。コードは次のようになります。

NamingEnumeration<Binding> contentsEnum = ctx.listBindings(n2);

String[] attName = {"cn"};

while ( contentsEnum.hasNext() ) {
    Binding binding = contentsEnum.next();
    Object o = binding.getObject();
    // etc, whatever you were intending to do with the result of lookup(), which is now in 'o'.
}
于 2012-06-17T11:50:07.983 に答える