我一直在寻找使用 Apache Directory API 执行分页搜索的信息,但我没有找到任何示例或任何关于如何使用适当的 PagedResults 控件构建 SearchRequest 然后执行搜索的信息。
大家有什么秘诀吗?或者知道在哪里可以找到这些信息?
或者,也许您应该推荐我使用其他一些 API,例如 unboundid sdk
在此先感谢和亲切的问候。
我一直在寻找使用 Apache Directory API 执行分页搜索的信息,但我没有找到任何示例或任何关于如何使用适当的 PagedResults 控件构建 SearchRequest 然后执行搜索的信息。
大家有什么秘诀吗?或者知道在哪里可以找到这些信息?
或者,也许您应该推荐我使用其他一些 API,例如 unboundid sdk
在此先感谢和亲切的问候。
今天,我努力制作 kayyagara 中的链接示例。
它有一些问题:
以下是工作示例:
//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();
看看这个http://markmail.org/message/43qjepg6shvfvqud OTOH,总是建议在用户邮件列表上发布 ApacheDS 相关问题以获得快速回复,我们可能并不总是监控 SO