私はunboundid-ldapsdk-3.1.1を使用しており、SimplePagedResultsControl
を使用してエントリを反復しようとしています。ここでページコントロールでの検索LDAPSearchException
は、私が使用しているスニペットです:
...
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());
}
}
合計エントリが100であるとsearchLimitが100のとき、私は、エラーを取得しておいてください。
最初の繰り返しでresponseControl.moreResultsToReturn()
戻りtrue
、第二に反復getConnectionPool().search(searchRequest);
はLDAPSearchException(resultCode=2 (protocol error), numEntries=0, numReferences=0, errorMessage='paged results cookie is invalid')
を返します。
私のコードに間違いがありますか?
プールへの接続後続のリクエストでプールとは異なる接続を使用します。 –
実際、問題は、2番目の反復で異なる接続が使用されたことです。私はそれを受け入れることができるので、答えとして投稿してください、ありがとう! – eparvan