2017-01-11 1 views
0

私は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')を返します。

私のコードに間違いがありますか?

+0

プールへの接続後続のリクエストでプールとは異なる接続を使用します。 –

+0

実際、問題は、2番目の反復で異なる接続が使用されたことです。私はそれを受け入れることができるので、答えとして投稿してください、ありがとう! – eparvan

答えて

1

通常、接続プールには複数の接続があり、最初のページングされた検索結果要求が発行された接続と同じ接続を返すことはできません。解決策はある

  1. プールから接続を取得するには、この接続を使用した結果による
  2. ページ、
  3. リターン私はそれはあなたができることである疑いがある