Java DirContext只需要几条记录

时间:2017-08-14 18:56:13

标签: java ldap

当我尝试在Apache Directory Studio中使用查询(testAtt=1)搜索记录时,他们会显示17062条记录,当我在Java代码上运行相同的查询时,它们只获得8531条记录。我的Java代码如下所示

String searchFilter = propFile.getProperty(Constants.GetAllUsersQuery);
String ldapSearchBase = propFile.getProperty(Constants.eDir_SearchBase);
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> resultsApp = ctx.search(ldapSearchBase, searchFilter, searchControls);
int i = 0;
while (resultsApp.hasMoreElements()) {
    SearchResult result = (SearchResult) resultsApp.next();
    String DN = "";
    DN = result.getNameInNamespace();
    if (!DN.isEmpty()) {
        eDir_AllUsersDNList.add(i, DN);
        i++;
    }
    resultsApp.nextElement();
}

System.out.println("eDir_AllUsersDNList : "+eDir_AllUsersDNList.size());

请帮我找出问题所在。 我使用的是Java 8。

1 个答案:

答案 0 :(得分:0)

while (resultsApp.hasMoreElements()) {
    SearchResult result = (SearchResult) resultsApp.next();
    String DN = "";
    DN = result.getNameInNamespace();
    if (!DN.isEmpty()) {
        eDir_AllUsersDNList.add(i, DN);
        i++;
    }
    resultsApp.nextElement();
}

删除最终的nextElement()电话。它没有任何用处,它正在跳过所有偶数元素。请注意,8531是17062的一半。

注意,转换是多余的,并且DN不能为空,并且当你在下一行分配它时为它提供初始化器是没有意义的。