I've looking for information to perform paged searches using the Apache Directory API, but I haven't found any example or any information about how build a SearchRequest with the proper PagedResults control and then perform the search.
Any of you have some tip? Or knows where to find such information?
Or, maybe you should recommend me to use some other API, like unboundid sdk
Thanks in advance and kind regards.
Today I struggled with making the linked example from kayyagara work.
It has some problems:
The following is working example:
//Without this you get a class Cast Exception:
//java.lang.ClassCastException: org.apache.directory.api.ldap.codec.BasicControlDecorator cannot be cast to org.apache.directory.api.ldap.model.message.controls.PagedResults
System.setProperty(StandaloneLdapApiService.CONTROLS_LIST,
PagedResultsFactory.class.getName());
PagedResults pagedSearchControl = new PagedResultsDecorator(
connection.getCodecService());
pagedSearchControl.setSize(300);
// Loop over all the elements
List<Entry> results = new ArrayList<Entry>();
boolean hasUnwillingToPerform = false;
//inspired by http://markmail.org/message/43qjepg6shvfvqud
while (true) {
EntryCursor cursor = null;
try {
SearchRequest searchRequest = new SearchRequestImpl();
searchRequest.setBase(new Dn(searchRoot));
searchRequest.setFilter(searchFilter);
searchRequest.setScope(SearchScope.SUBTREE);
searchRequest.addAttributes("*");
searchRequest.addControl(pagedSearchControl);
cursor = new EntryCursorImpl(
connection.search(searchRequest));
while (cursor.next()) {
Entry result = cursor.get();
results.add(result);
}
SearchResultDone result = cursor.getSearchResultDone();
pagedSearchControl = (PagedResults) result
.getControl(PagedResults.OID);
if (result.getLdapResult().getResultCode() == ResultCodeEnum.UNWILLING_TO_PERFORM) {
hasUnwillingToPerform = true;
break;
}
} finally {
if (cursor != null) {
cursor.close();
}
}
// check if this is over
byte[] cookie = pagedSearchControl.getCookie();
if (Strings.isEmpty(cookie)) {
// If so, exit the loop
break;
}
// Prepare the next iteration
pagedSearchControl.setSize(300);
}
if (hasUnwillingToPerform) {
throw new IllegalStateException("AD can't handle paging");
}
// Cleanup the session
connection.unBind();
connection.close();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With