2009-05-14 12 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(); 
     } 
    } 
} 

Meine Fehlerliste ist alsAttribut wird von diesem Code in LDAP umbenannt

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) 

Antwort

1

folgt nicht, dass ich jetzt, was Sie Code tun sollten, aber die Ausnahme gesagt, Sie setzen in nur

cn=John Smith,ou=Sales 

statt

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

oder nicht?

0

Fehlercode 32 ist das Objekt nicht gefunden, oder ein falscher DN-Pfadfehler. Sie müssen einen echten und gültigen DN angeben.

Haben Sie die Ausgabe so gesetzt, dass die Fehlerzeile: verbleibender Name 'cn = name1 name2, ou = meinefirma' die Werte geändert hat, oder ist das der echte Fehlercode?

Es sieht seltsam aus, da nirgendwo sonst verweisen Sie auf diesen Pfad in Ihrem Code. Ich beachte, dass Sie eine Domain (wahrscheinlich AD) mit dc = mydomain, dc = com verwenden.

Sie können wahrscheinlich mit relativen Pfaden entkommen, aber ich bezweifle es während einer Umbenennung, wo Sie die RDN ändern, ist es wichtig, genau zu wissen, was Sie ändern (und implizit) wo.