2009-05-14 7 views
1
/** 
* 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(); 
     } 
    } 
} 

Ma liste d'erreurs est la suivanteattribut est pas renommé par ce code dans LDAP

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) 

Répondre

1

je ne maintenant ce que vous codez devriez faire, mais l'exception vous dit que vous ne mets que dans

cn=John Smith,ou=Sales 

au lieu de

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

ou non?

0

Le code d'erreur 32 est l'objet non trouvé ou une erreur de chemin d'accès incorrect. Vous devez lui donner un DN réel et valide à utiliser.

Avez-vous quantifié la sortie de sorte que la ligne d'erreur: nom restant 'cn = nom1 nom2, ou = monentreprise' a changé les valeurs, ou est-ce le vrai code d'erreur?

Cela semble étrange, car nulle part ailleurs vous faites référence à ce chemin dans votre code. Je remarque que vous utilisez un domaine (probablement AD) avec dc = mydomain, dc = com.

Vous pouvez probablement vous en tirer avec des chemins relatifs, mais j'en doute lors d'un renommage, où vous changez le RDN, il est important de savoir exactement ce que vous modifiez (et implicitement) vers où.

Questions connexes