モジュール jdk.incubator.httpclient
パッケージ jdk.incubator.http

インタフェースHttpResponse.MultiProcessor<U,T>

  • 型パラメータ:
    U - 集計結果を表す型
    T - すべてのレスポンス体を表す型
    含まれているクラス:
    HttpResponse < T>


    public static interface HttpResponse.MultiProcessor<U,T>
    HTTP/2マルチ・レスポンス用の応答プロセッサ。
    インキュベーション機能。将来のリリースで削除されます。

    マルチ・レスポンスは、メイン・レスポンスと、ゼロ以上の追加レスポンスを含んでいます。 各追加レスポンスは、サーバーが生成するリクエストにレスポンスしてサーバーによって送信されます。 追加のレスポンスは通常、クライアントが最初のリクエストに関連して必要とすることをサーバーが期待するリソースです。

    このインタフェースを実装するのではなく、アプリケーションはMultiProcessor.asMap()によって提供されるメカニズム(このインタフェースで構築)を最初に使用することを検討する必要があります。

    サーバーによって生成されたリクエストは、「プッシュ約束」とも呼ばれます。 サーバーは、主なレスポンスが完全に受信されるまで、これらのリクエストをいくつでも送信することができます。 したがって、主レスポンスの完了後に、追加の追加レスポンスの数が分かる。 追加のレスポンスは取消される可能性がありますが、サーバーがレスポンスを送信する前に確認レスポンスを待機しない場合は、不要なデータ送信を避けるためにこれをすばやく実行する必要があります。

    MultiProcessorは、受け取ったレスポンスのいくつかの意味のある集約を表す型Uでパラメータ化されています。 これは、典型的には、レスポンスまたはレスポンス本文オブジェクトの集合である。

    導入されたバージョン:
    9
    • メソッドの詳細

      • onRequest

        Optional<HttpResponse.BodyHandler<T>> onRequest​(HttpRequest request)
        主なリクエストと受信されたプッシュ・プロ・ミスがそれぞれ呼び出されます。 最初の呼び出しは、常に呼び出し元によって送信されたメイン・リクエストに対して行われます。 このHttpRequestパラメータは、最初のリクエストまたは後続のPUSH_PROMISEを表します。 実装は、レスポンス本文に対してOptionalHttpResponse.BodyHandlerを返す必要があります。 異なるハンドラ(同じタイプの)は、同じマルチ送信内の異なるプッシュに対して返すことができます。 ハンドラ(空のOptional)が返されない場合、プッシュは取消されます。 最初の(main)リクエストに対して有効なBodyHandlerを戻さないとエラーになります。
        パラメータ:
        request - 主なリクエストまたは後続のプッシュ・プロ・ミス
        戻り値:
        オプションの本文ハンドラ
      • onResponse

        void onResponse​(HttpResponse<T> response)
        受信したレスポンスごとに呼び出されます。 リクエストごとに、onResponse()またはonError()のいずれか1つが呼び出されることが保証されていますが、両方ではありません。[ノート] onRequest()に提供されたCompletableFuturesを使用するのではなく、このコールバック・インタフェースに切り替える理由は、これらのCFとcompletion() (onComplete()が以前に呼び出されたとき)から返されたCFとの間に微妙な相互作用があるからです。 completion() CFは、onResponse()呼び出しによって行われたすべての作業が完了するまで完了しません。 ただし、提供されたCF (onRequest()へ)に依存するCFを作成すると、その実装では従属CFの可視性がなく、依存CFが完了した後にonComplete() (またはcompletion() CFを完了)を呼び出すことは保証できません。
        パラメータ:
        response - 受信したレスポンス
      • onError

        void onError​(HttpRequest request,
                     Throwable t)
        レスポンスを受信中にエラーが発生した場合に呼び出されます。 リクエストごとに、onResponse()またはonError()のいずれか1つが呼び出されることが保証されていますが、両方ではありません。
        パラメータ:
        request - 主なリクエストまたは後続のプッシュ・プロ・ミス
        t - エラーの原因となったThrowable
      • completion

        CompletableFuture<U> completion​(CompletableFuture<Void> onComplete,
                                        CompletableFuture<Void> onFinalPushPromise)
        集計結果オブジェクト自体が利用可能な場合に完了するCompletableFuture <U>を返します。 返されたCompletableFutureは、マルチ・レスポンスに関連するすべての個々の応答が完了した後、またはすべてのプッシュ・プロビジョニングが受信された後に、それ自身が完了する特定のCompletableFuture<Voidの1つに依存することが期待されます。

        実装上の注意:
        実装は以下のパターンに従うかもしれません
         
              CompletableFuture<U> completion(
                      CompletableFuture<Void> onComplete,
                      CompletableFuture<Void> onFinalPushPromise)
              {
                  return onComplete.thenApply((v) -> {
                      U u = ... instantiate and populate a U instance
                      return u;
                  });
              }
         
         

        パラメータ:
        onComplete - このマルチ・リクエストに関連するすべてのレスポンスが受信された後に完了するCompletableFuture。
        onFinalPushPromise - すべてのプッシュ・プロビジョニングを受信した後に完了するCompletableFuture。
        戻り値:
        集約CFレスポンス・オブジェクト
      • asMap

        static <V> HttpResponse.MultiProcessor<MultiMapResult<V>,V> asMap​(Function<HttpRequest,Optional<HttpResponse.BodyHandler<V>>> pushHandler,
                                                                          boolean completion)
        マルチ・レスポンス用の汎用ハンドラを返します。 このハンドラによって生成された集計結果オブジェクトは、Map<HttpRequest,CompletableFuture<HttpResponse<V>>>です。 各リクエスト(元のユーザー生成リクエストと各サーバーがプッシュ・プロビジョニングを生成した)はマップのキーとして返されます。 各キーに対応する値は、CompletableFuture<HttpResponse<V>>です。

        completionパラメータの値に応じて、これらのハンドラを使用する方法は2つあります。 補完がtrueであれば、すべてのレスポンス自体が完了した後で集計結果が利用可能になります。 completionがfalseの場合、最後のプッシュ・プロビジョニングが受信された直後に集約結果が使用可能になります。 前者の場合、これはマップ値のすべてのCompletableFuturesが完了したことを意味します。 後者の場合、それらはまだ完了していないかもしれません。

        これらのハンドラを使用する最も簡単な方法は、完了をtrueに設定することです。その後、マップ内のすべての(results)値はブロックせずにアクセスできます。

        このインタフェースを使用するコード・サンプルについては、asMap(java.util.function.Function, boolean)を参照してください。

        型パラメータ:
        V - すべてのレスポンスに使用される本文型
        パラメータ:
        pushHandler - リクエストごとに呼び出される関数またはプッシュ・プロ・ミス
        completion - trueすべてのレスポンスが受信された後に集合CompletableFutureが完了するか、すべてのプッシュ・プロビジョニングが受信された後にfalseが完了した場合。
        戻り値:
        MultiProcessor
      • asMap

        static <V> HttpResponse.MultiProcessor<MultiMapResult<V>,V> asMap​(Function<HttpRequest,Optional<HttpResponse.BodyHandler<V>>> pushHandler)
        マルチ・レスポンス用の汎用ハンドラを返します。 これは、asMap(Function, true)を呼び出す便利なメソッドであり、すべてのレスポンスを受け取った後に集計結果オブジェクトが完了することを意味します。

        使用例:

         
                  HttpRequest request = HttpRequest.newBuilder()
                          .uri(URI.create("https://www.foo.com/"))
                          .GET()
                          .build();
        
                  HttpClient client = HttpClient.newHttpClient();
        
                  Map<HttpRequest,CompletableFuture<HttpResponse<String>>> results = client
                      .sendAsync(request, MultiProcessor.asMap(
                          (req) -> Optional.of(HttpResponse.BodyHandler.asString())))
                      .join();
         

        この例のラムダは、可能な限り単純な実装であり、着信リクエストを調べたり、レスポンス・ヘッダーを送信したり、サーバーが送信するすべてのプッシュを受け付けたりすることはありません。 join()呼び出しが戻ると、すべてのHttpResponseとそれに関連する本文オブジェクトが使用可能になります。

        型パラメータ:
        V - すべてのレスポンスに使用される本文型
        パラメータ:
        pushHandler - リクエストごとに呼び出される関数またはプッシュ・プロ・ミス
        戻り値:
        MultiProcessor