2014-06-11 53 views
0

我試圖查詢基於Oracle數據庫中獲取的用戶id列表上的LDAP。如果帳戶存在於LDAP中,我想要更改給定對象的兩個值。我遇到的問題是,出於某種原因,結果永遠不會爲空,所以即使用戶在LDAP上不存在,我的代碼也會嘗試更改值。您會看到我爲測試目的而打印了「結果」的值。對於結果的輸出:NamingEnumeration中的LDAP查詢不返回null

[email protected]

以「@」對於每個查詢隨機值之後的一切。有什麼我做錯了嗎?

這裏是我的代碼:

public void queryLdap(String netId, LdapContext context) 
{ 
    String uId = "(uid=" + netId + ")"; 
    String userDn="uid=" + netId + "," + domainRoot; 
    try{ 
     SearchResult searchResult = null; 
     SearchControls controls = new SearchControls(); 
     controls.setSearchScope(SearchControls.SUBTREE_SCOPE); 
     String[] attrIDs = {"pdsAccountStatus", "inetUserStatus"}; 

     //controls.setReturningAttributes(attrIDs); 

     NamingEnumeration<SearchResult> result = context.search(domainRoot, uId, controls); 

     System.out.println(result); 

     if(result != null){ 
      changeLdap(userDn); 
     } 


    } 
    catch(Exception ex){ 
     System.out.println("NamingEnumeration Error in queryLdap: " + ex); 

    } 


} 
+0

究竟哪裏不說,它可以爲空?我建議你再看看Javadoc。 – EJP

回答

1

的返回類型是NamingEnumeration<SearchResult>這是從來沒有空。 你需要改變你的結果檢查使用的NamingEnumeration中有可用的方法:

if (result.hasMore()) 
{ 
    changeLdap(userDn); 
} 

但它甚至會更好地利用while環路實際使用的結果,但是這取決於你的用例:

while (result.hasMore()) 
{ 
    try { 
     SearchResult res = result.next(); 
     String objDn = res.getNameInNamespace(); 
     // Use the Dn of the returned object 
    } catch (NamingException e) { 
     // Whatever 
    } 
}