1

LDAP の検索に UnboundId SDK を使用し、結果のページングに SimplePagedResultsControl を使用しています。ページ サイズに基づいて適切に検索し、目的の結果の最初のセットを取得できますが、SearchResult からの応答制御オブジェクトが NULL であるため、後続の結果セットを取得できません。残りの結果の取得を続行するには、Cookie の値を取得し、検索要求の次の検索要求に設定する必要があります。

UnboundId SDK Web サイトや他のサイトで提供されている同様のコードを使用しています。これを解決するための助けをいただければ幸いです。

// Perform a search to retrieve all users in the server, but only retrieving
// ten at a time.

int numSearches = 0;
int totalEntriesReturned = 0;

SearchRequest searchRequest = new SearchRequest("dc=example,dc=com",
   SearchScope.SUB, Filter.createEqualityFilter("objectClass", "person"));

ASN1OctetString resumeCookie = null;

while (true)
{
  searchRequest.setControls(
       new SimplePagedResultsControl(10, resumeCookie));
  SearchResult searchResult = connection.search(searchRequest);
  numSearches++;
  totalEntriesReturned += searchResult.getEntryCount();

 for (SearchResultEntry e : searchResult.getSearchEntries())
 {
   // Do something with each entry...
 }

 LDAPTestUtils.assertHasControl(searchResult,
    SimplePagedResultsControl.PAGED_RESULTS_OID); -*Failing here as the SearchResult obj
                                                    is not having any Response Control*
 SimplePagedResultsControl responseControl =
     SimplePagedResultsControl.get(searchResult);

 if (responseControl.moreResultsToReturn())
 {
   // The resume cookie can be included in the simple paged results
   // control included in the next search to get the next page of results.
   resumeCookie = responseControl.getCookie();
 }
 else
 {
   break;
 }
}
4

1 に答える 1

1

コードに明らかな問題は見られないので、最初に推測するに、使用しているサーバーがコントロールをサポートしていない可能性があります (サポートしている場合は、「1.2.840.113556.1.4.319」がルートに表示されるはずです)。 DSE の supportedControl 属性)、または接続がそれを使用する権限を持たないユーザーとして認証されていること (この場合、より強力なユーザーとして認証すると、コントロールが期待どおりに処理されるはずです)。コントロールはクリティカルとマークされていないため、サーバーはそれをサポートしていない場合はコントロールを無視する必要があり、一部のサーバーは、リクエスターがそれを使用する権限を持っていない場合、リクエストを拒否する代わりにコントロールを無視することを選択する場合があります。

コントロールが処理されているかどうかを判断する最善の方法は、おそらく、ページ サイズで指定された数のエントリのみが検索で返されたか、または検索に一致する結果のセット全体が返されたかを確認することです。検索で 1 ページの結果しか返されなかった場合、サーバーは間違いなく応答コントロールを返しているはずです。サーバーがコントロールを無視し、コントロールが提供されていないかのように要求を処理した場合、結果セットには、検索条件に一致するサーバー内のすべてのエントリが含まれる必要があります。

于 2014-06-20T05:32:08.560 に答える