Я использую 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')
Что может быть неправильным с моим кодом?
Я подозреваю, это то, что вы можете быть используя другое соединение из пула при последующем запросе. –
Действительно, проблема в том, что во второй итерации использовалось другое соединение. Пожалуйста, разместите его как ответ, чтобы я мог принять его, спасибо! – eparvan