Reputation: 1729
I'm using unboundid-ldapsdk-3.1.1 and trying to iterate through entries using SimplePagedResultsControl
.
Here is the snippet that I'm using:
...
searchRequest = new SearchRequest(dn, scope.getLdapSearchScope(), filter);
ASN1OctetString resumeCookie = null;
while (true)
{
searchRequest.setControls(new Control[] { new SimplePagedResultsControl(searchLimit, resumeCookie) });
setControls(searchRequest, controls);
searchResult = getConnectionPool().search(searchRequest);
numSearches++;
totalEntriesReturned += searchResult.getEntryCount();
for (SearchResultEntry e : searchResult.getSearchEntries()) {
// Do something with each entry...
}
LDAPTestUtils.assertHasControl(searchResult, SimplePagedResultsControl.PAGED_RESULTS_OID);
try {
SimplePagedResultsControl responseControl = SimplePagedResultsControl.get(searchResult);
if (responseControl.moreResultsToReturn())
resumeCookie = responseControl.getCookie();
else
break;
} catch (LDAPException ex) {
log.error("Error while accessing cookies" + ex.getMessage());
}
}
I keep getting error, when total entries is 100 and searchLimit is 100:
At first iteration responseControl.moreResultsToReturn()
returns true
, and at second iteration getConnectionPool().search(searchRequest);
throws the LDAPSearchException(resultCode=2 (protocol error), numEntries=0, numReferences=0, errorMessage='paged results cookie is invalid')
What could be wrong with my code?
Upvotes: 0
Views: 384
Reputation: 900
The connection pool typically has multiple connections and may not return the same connection where the initial paged search result request was issued. The solution is
Upvotes: 1