package jnditest;/** * <p>Title: JNDI使用LDAP</p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * @author lifeis * @version 1.0 */import com.sun.jndi.ldap.LdapCtxFactory; import java.lang.String; import java.util.Hashtable; import java.util.Enumeration; import javax.naming.*; import javax.naming.directory.*; import javax.naming.directory.InitialDirContext; import java.util.Vector;public class ldap { public static String INITCTX="com.sun.jndi.ldap.LdapCtxFactory"; public static String MY_HOST="ldap://localhost:389"; public static String MY_SEARCHBASE="dc=lifeis,dc=lifeis,dc=net,dc=cn"; public static String MY_FILTER="(cn=lifeis)"; public static String MY_ATTRS[]={"cn","mail"}; public static void main(String[] args) { try { Hashtable env=new Hashtable(); //specify which class to use for our JNDI provider env.put(Context.INITIAL_CONTEXT_FACTORY,INITCTX); //security information //authenticates us to the server env.put(Context.SECURITY_AUTHENTICATION,"simple"); env.put(Context.SECURITY_PRINCIPAL,"lifeis"); env.put(Context.SECURITY_CREDENTIALS,"lifeis"); //specify host and port to use for directory service env.put(Context.PROVIDER_URL,MY_HOST); //get a reference to a directory context Context context = new InitialContext(env); DirContext ctx=new InitialDirContext(env); //specify the scope to the search SearchControls constraints=new SearchControls(); constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); //perform the actual search //we give it a searchbase,a filter and the constraints //containing the scope of the search NamingEnumeration results=ctx.search(MY_SEARCHBASE,MY_FILTER,constraints); while(results!=null && results.hasMoreElements()) { SearchResult sr=(SearchResult)results.next(); String dn=sr.getName()+","+MY_SEARCHBASE; System.out.println("Distinguished Name is "+dn); Attributes ars=ctx.getAttributes(dn,MY_ATTRS); if(ars==null) { System.out.println("Entry "+dn+" has none of the specified attributes\n"); } else { for(int i=0;i<MY_ATTRS.length;i++) { Attribute attr=ars.get(MY_ATTRS[i]); if(attr!=null) { System.out.print(MY_ATTRS[i]+":"); for(Enumeration vals=attr.getAll();vals.hasMoreElements();) { System.out.print("\t"+vals.nextElement()); } System.out.print("\n"); } else { System.out.println(MY_ATTRS[i]+":\tnull"); } } System.out.println("\n"); } } } catch(Exception e) { e.printStackTrace(); System.exit(1); } } }
javax.njavax.naming.NoInitialContextException: Cannot instantiate class: com.sun.jndi.l dap.ldapCtxFactory. Root exception is java.lang.ClassNotFoundException: com.sun .jndi.ldap.ldapCtxFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:198) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:186) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265) at java.lang.ClassLoader.loadClass(ClassLoader.java:262) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:207) at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.jav a:42) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6 49) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243 ) at javax.naming.InitialContext.init(InitialContext.java:219) at javax.naming.InitialContext.<init>(InitialContext.java:195) at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav a:80) at JNDISearch.main(JNDISearch.java:21)
import java.util.Hashtable; import java.util.Enumeration; import javax.naming.*; import javax.naming.directory.*;public class JNDISearch { public static String INITCTX="com.sun.jndi.ldap.ldapCtxFactory"; public static String MY_HOST="ladp://localhost:389"; public static String MY_SEARCHBASE="o=Airius.com"; public static String MY_FILTER="(sn=Carter)";
是set j2EE_HOME=d:\jdk; set JNDI_HOME=d:\jdk; 吗?(d:\jdk 是我的java sdk的安装目录)
你的这里写错了吧! public static String INITCTX="com.sun.jndi.ldap.ldapCtxFactory"; 应该是: public static String INITCTX="com.sun.jndi.ldap.LdapCtxFactory"; sun公司是不会把类名的开头小写的!呵呵!
赋值得时候是作为一个字符串,大写小写编译的时候当然不会报错, 但根据这个字符串去找类名当然就找不到了,所以运行才出错。 Root exception is java.lang.ClassNotFoundException: com.sun .jndi.ldap.ldapCtxFactory
javax.naming.NamingException: Cannot parse url: ladp://localhost:389. Root exce ption is java.net.MalformedURLException: Not an LDAP URL: ladp://localhost:389 at com.sun.jndi.ldap.LdapURL.<init>(LdapURL.java:68) at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav a:58) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6 62) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243 ) at javax.naming.InitialContext.init(InitialContext.java:219) at javax.naming.InitialContext.<init>(InitialContext.java:195) at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav a:80) at JNDISearch.main(JNDISearch.java:21)恩人啊,多谢了,可是改过了还有上面的错误。
我把拼写错误改过来后怎么还是有错误:javax.naming.CommunicationException: localhost:389. Root exception is java.net. ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:295) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:161) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:148) at java.net.Socket.connect(Socket.java:425) at java.net.Socket.connect(Socket.java:375) at java.net.Socket.<init>(Socket.java:290) at java.net.Socket.<init>(Socket.java:118) at com.sun.jndi.ldap.Connection.createSocket(Connection.java:342) at com.sun.jndi.ldap.Connection.<init>(Connection.java:177) at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:112) at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2504) at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:263) at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav a:76) at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6 62) at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243 ) at javax.naming.InitialContext.init(InitialContext.java:219) at javax.naming.InitialContext.<init>(InitialContext.java:195) at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav a:80) at JNDISearch.main(JNDISearch.java:21)
那weblogic又是怎么一回事呢?请教。
* <p>Title: JNDI使用LDAP</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author lifeis
* @version 1.0
*/import com.sun.jndi.ldap.LdapCtxFactory;
import java.lang.String;
import java.util.Hashtable;
import java.util.Enumeration;
import javax.naming.*;
import javax.naming.directory.*;
import javax.naming.directory.InitialDirContext;
import java.util.Vector;public class ldap
{
public static String INITCTX="com.sun.jndi.ldap.LdapCtxFactory";
public static String MY_HOST="ldap://localhost:389";
public static String MY_SEARCHBASE="dc=lifeis,dc=lifeis,dc=net,dc=cn";
public static String MY_FILTER="(cn=lifeis)";
public static String MY_ATTRS[]={"cn","mail"}; public static void main(String[] args)
{
try
{
Hashtable env=new Hashtable(); //specify which class to use for our JNDI provider
env.put(Context.INITIAL_CONTEXT_FACTORY,INITCTX);
//security information
//authenticates us to the server
env.put(Context.SECURITY_AUTHENTICATION,"simple");
env.put(Context.SECURITY_PRINCIPAL,"lifeis");
env.put(Context.SECURITY_CREDENTIALS,"lifeis"); //specify host and port to use for directory service
env.put(Context.PROVIDER_URL,MY_HOST); //get a reference to a directory context
Context context = new InitialContext(env);
DirContext ctx=new InitialDirContext(env); //specify the scope to the search
SearchControls constraints=new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); //perform the actual search
//we give it a searchbase,a filter and the constraints
//containing the scope of the search
NamingEnumeration results=ctx.search(MY_SEARCHBASE,MY_FILTER,constraints);
while(results!=null && results.hasMoreElements())
{
SearchResult sr=(SearchResult)results.next(); String dn=sr.getName()+","+MY_SEARCHBASE; System.out.println("Distinguished Name is "+dn);
Attributes ars=ctx.getAttributes(dn,MY_ATTRS); if(ars==null)
{
System.out.println("Entry "+dn+" has none of the specified attributes\n");
}
else
{
for(int i=0;i<MY_ATTRS.length;i++)
{
Attribute attr=ars.get(MY_ATTRS[i]);
if(attr!=null)
{
System.out.print(MY_ATTRS[i]+":");
for(Enumeration vals=attr.getAll();vals.hasMoreElements();)
{
System.out.print("\t"+vals.nextElement());
}
System.out.print("\n");
}
else
{
System.out.println(MY_ATTRS[i]+":\tnull");
}
}
System.out.println("\n");
}
} }
catch(Exception e)
{
e.printStackTrace();
System.exit(1);
}
}
}
我的程序访问的是ADS中的内容,程序在WIN2000 SERVER中通过
在http://java.sun.com/jndi/下载
dap.ldapCtxFactory. Root exception is java.lang.ClassNotFoundException: com.sun
.jndi.ldap.ldapCtxFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:207)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.jav
a:42)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
49)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243
)
at javax.naming.InitialContext.init(InitialContext.java:219)
at javax.naming.InitialContext.<init>(InitialContext.java:195)
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav
a:80)
at JNDISearch.main(JNDISearch.java:21)
import java.util.Enumeration;
import javax.naming.*;
import javax.naming.directory.*;public class JNDISearch
{
public static String INITCTX="com.sun.jndi.ldap.ldapCtxFactory";
public static String MY_HOST="ladp://localhost:389";
public static String MY_SEARCHBASE="o=Airius.com";
public static String MY_FILTER="(sn=Carter)";
public static void main(String args[])
{
try
{
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,INITCTX);
env.put(Context.PROVIDER_URL,MY_HOST);
DirContext ctx=new InitialDirContext(env);
SearchControls constraints=new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration results=ctx.search(MY_SEARCHBASE,MY_FILTER,constraints);
while(results!=null && results.hasMore())
{
SearchResult sr=(SearchResult)results.next();
String dn=sr.getName();
System.out.println("Distinguished Name is "+dn);
Attributes attrs=sr.getAttributes();
for(NamingEnumeration ne=attrs.getAll();ne.hasMoreElements(); )
{
Attribute attr=(Attribute)ne.next();
String attrID=attr.getID();
System.out.println(attrID+":");
for(Enumeration vals=attr.getAll();vals.hasMoreElements();)
{
System.out.println("\t"+vals.nextElement());
}
}
System.out.println("\n");
}
}
catch(Exception e)
{
e.printStackTrace();
System.exit(1);
}
}
}
set JNDI_HOME=d:\jdk;
吗?(d:\jdk 是我的java sdk的安装目录)
public static String INITCTX="com.sun.jndi.ldap.ldapCtxFactory";
应该是:
public static String INITCTX="com.sun.jndi.ldap.LdapCtxFactory";
sun公司是不会把类名的开头小写的!呵呵!
但根据这个字符串去找类名当然就找不到了,所以运行才出错。
Root exception is java.lang.ClassNotFoundException: com.sun
.jndi.ldap.ldapCtxFactory
ption is java.net.MalformedURLException: Not an LDAP URL: ladp://localhost:389
at com.sun.jndi.ldap.LdapURL.<init>(LdapURL.java:68)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav
a:58)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
62)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243
)
at javax.naming.InitialContext.init(InitialContext.java:219)
at javax.naming.InitialContext.<init>(InitialContext.java:195)
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav
a:80)
at JNDISearch.main(JNDISearch.java:21)恩人啊,多谢了,可是改过了还有上面的错误。
ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:295)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:161)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:148)
at java.net.Socket.connect(Socket.java:425)
at java.net.Socket.connect(Socket.java:375)
at java.net.Socket.<init>(Socket.java:290)
at java.net.Socket.<init>(Socket.java:118)
at com.sun.jndi.ldap.Connection.createSocket(Connection.java:342)
at com.sun.jndi.ldap.Connection.<init>(Connection.java:177)
at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:112)
at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2504)
at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:263)
at com.sun.jndi.ldap.LdapCtxFactory.getInitialContext(LdapCtxFactory.jav
a:76)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:6
62)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243
)
at javax.naming.InitialContext.init(InitialContext.java:219)
at javax.naming.InitialContext.<init>(InitialContext.java:195)
at javax.naming.directory.InitialDirContext.<init>(InitialDirContext.jav
a:80)
at JNDISearch.main(JNDISearch.java:21)