/**
* 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)
答案 0 :(得分:1)
我现在不用你的代码应该做什么,但例外告诉你你只是放入
cn=John Smith,ou=Sales
而不是
cn=John Smith,ou=Sales,ou=People
是不是?
答案 1 :(得分:0)
错误代码32是未找到的对象,或错误的DN路径错误。您需要为其提供真实有效的DN。
您是否对输出进行了处理以使错误行: 剩余名称'cn = name1 name2,ou = mycompany'更改了值,还是真正的错误代码?
看起来很奇怪,因为在您的代码中没有其他地方引用该路径。我注意到你使用的域名(可能是AD)与dc = mydomain,dc = com。
你可能可以通过相对路径逃脱,但我怀疑它在重命名期间,你正在改变RDN,重要的是要确切知道你正在改变(并隐含)到哪里。