Атрибут не переименовывается этим кодом в LDAP - PullRequest
1 голос
/ 14 мая 2009
/**
 * ModifyRDN .java
 * Sample code to demostrate how ModifyRDN/ModifyDN works.
 */

import javax.naming.*;
import javax.naming.directory.*;

import java.util.Hashtable;

public class ModifyRDN 
{
    public static void main(String[] args) 
    {
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

        env.put(Context.PROVIDER_URL, "ldap://myLdapServer:389/dc=myDomain,dc=com");
        env.put(Context.SECURITY_AUTHENTICATION, "simple");
        env.put(Context.SECURITY_PRINCIPAL, "cn=directory manager");
        env.put(Context.SECURITY_CREDENTIALS, "password");

        /*
          Whether the old RDN attribute values are to be retained 
          as attributes of the entry, or deleted from the entry
        */
        env.put("java.naming.ldap.deleteRDN", "true");  // default is 'true'

        try {
            /* Create the initial context */
            DirContext ctx = new InitialDirContext(env);

            ctx.rename("cn=John Smith,ou=Sales,ou=People", 
                       "cn=John Cougar Smith,ou=Sales,ou=People");

            /* Close the context when it's done */
            ctx.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Мой список ошибок выглядит следующим образом

javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'cn=name1 name2,ou=mycompany'
    at com.sun.jndi.ldap.LdapCtx.mapErrorCode(LdapCtx.java:3025)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2946)
    at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2752)
    at com.sun.jndi.ldap.LdapCtx.c_rename(LdapCtx.java:700)
    at com.sun.jndi.toolkit.ctx.ComponentContext.p_rename(ComponentContext.java:708)
    at com.sun.jndi.toolkit.ctx.PartialCompositeContext.rename(PartialCompositeContext.java:266)
    at com.sun.jndi.toolkit.ctx.PartialCompositeContext.rename(PartialCompositeContext.java:255)
    at javax.naming.InitialContext.rename(InitialContext.java:395)
    at ModifyRDN.main(ModifyRDN.java:22)

Ответы [ 2 ]

1 голос
/ 14 мая 2009

Я не знаю, что должен делать ваш код, но исключение говорило, что вы вставили только

cn=John Smith,ou=Sales

вместо

cn=John Smith,ou=Sales,ou=People

или нет?

0 голосов
/ 01 июня 2009

Код ошибки 32 - объект не найден или ошибка пути DN. Вы должны дать ему реальный и действительный DN для использования.

Вы санировали вывод так, что строка ошибки: оставшееся имя 'cn = name1 name2, ou = mycompany' изменило значения или это реальный код ошибки?

Это выглядит странно, так как нигде вы не ссылаетесь на этот путь в своем коде. Я заметил, что вы используете домен (возможно, AD) с dc = mydomain, dc = com.

Вы, вероятно, можете избежать неприятностей с относительными путями, но я сомневаюсь в этом во время переименования, когда вы меняете RDN, важно точно знать, что вы меняете (и неявно), куда.

...