ldap连接的java程序中的NullPointerException
运行程序时获取NullPointer异常。请帮忙 代码如下:ldap连接的java程序中的NullPointerException,java,nullpointerexception,Java,Nullpointerexception,运行程序时获取NullPointer异常。请帮忙 代码如下: import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDi
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class LdapTest {
public static void main(String[] args) throws Exception
{
final String PROVIDER_URL = "http://localhost:1389/dc=vysbank,dc=com"; //Enter LDAP URL here
final Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, PROVIDER_URL);
try {
DirContext ctx = new InitialDirContext(env);
String filter = "(uid=1234)"; // Enter User ID here.
String[] attrIDs = {"uid","cn","mail"}; // Enter list of attributes to retrieve from LDAP here
SearchControls ctls = new SearchControls();
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
ctls.setReturningAttributes(attrIDs);
NamingEnumeration answer = ctx.search("ou=People", filter, ctls);
SearchResult searchResult = null;
String cn=null;
String uid=null;
String mail=null;
while (answer.hasMore()) {
searchResult = (SearchResult) answer.next();
Attributes attr = searchResult.getAttributes();
cn=attr.get("cn").get(0).toString();
uid=attr.get("uid").get(0).toString();
mail=attr.get("mail").get(0).toString();
System.out.println("Name: "+cn);
System.out.println("User ID: "+uid);
System.out.println("E-mail Address: "+mail);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
当应用程序在需要对象的情况下尝试使用null时抛出
下面的代码段抛出NPE,因为您正在对未正确初始化的字符串a调用方法
String a = null;
a.toString();
调试您的代码以找到这种情况。您可能有
null
指针:
searchResult = (SearchResult) answer.next();
Attributes attr = searchResult.getAttributes();
cn=attr.get("cn").get(0).toString();
uid=attr.get("uid").get(0).toString();
mail=attr.get("mail").get(0).toString();
我将执行null
指针检查,查看是否有任何值为null,如果是,则给出默认的空字符串值:
if(attr != null){
if(attr.get("cn") != null && attr.get("cn").get(0) != null)
cn=attr.get("cn").get(0).toString();
else
cn = "";
if(attr.get("uid") != null && attr.get("cn").get(0) != null)
uid=attr.get("uid").get(0).toString();
else
uid = "";
if(attr.get("mail") != null && attr.get("cn").get(0) != null)
mail=attr.get("mail").get(0).toString();
else
mail = "";
}
然而,这一切都取决于代码的目标。如果您从前端(例如网页)接收值,则应始终将其设置为空或
null
检查。如果您正在创建变量并计划使用它们,请确保这些变量在使用它们时包含值。请发布正确的错误消息。NPE在哪一行?发布堆栈跟踪,空指针在哪里,样本输入,预期输出和代码目标。我还得到LdapTest.java使用未检查或不安全的操作。注意:使用-Xlint重新编译:未选中以获取详细信息。原因可能是什么?在上面的代码中,如何使用cn=目录管理器连接到ldap?它不允许我获取o中所有用户的属性=People@user3150734您可能想发布另一个问题,因为这似乎是另一个问题|=^/