1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.http.impl.nio.client;
28
29 import java.util.ArrayList;
30 import java.util.List;
31 import java.util.concurrent.Future;
32
33 import org.apache.http.HttpHost;
34 import org.apache.http.HttpRequest;
35 import org.apache.http.HttpResponse;
36 import org.apache.http.annotation.Contract;
37 import org.apache.http.annotation.ThreadingBehavior;
38 import org.apache.http.client.protocol.HttpClientContext;
39 import org.apache.http.concurrent.FutureCallback;
40 import org.apache.http.nio.client.HttpPipeliningClient;
41 import org.apache.http.nio.client.methods.HttpAsyncMethods;
42 import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
43 import org.apache.http.nio.protocol.HttpAsyncResponseConsumer;
44 import org.apache.http.protocol.HttpContext;
45 import org.apache.http.util.Args;
46
47
48
49
50
51
52
53 @Contract(threading = ThreadingBehavior.SAFE)
54 public abstract class CloseableHttpPipeliningClient
55 extends CloseableHttpAsyncClient implements HttpPipeliningClient {
56
57 @Override
58 public <T> Future<List<T>> execute(
59 final HttpHost target,
60 final List<? extends HttpAsyncRequestProducer> requestProducers,
61 final List<? extends HttpAsyncResponseConsumer<T>> responseConsumers,
62 final FutureCallback<List<T>> callback) {
63 return execute(target, requestProducers, responseConsumers, HttpClientContext.create(), callback);
64 }
65
66 @Override
67 public Future<List<HttpResponse>> execute(
68 final HttpHost target,
69 final List<HttpRequest> requests,
70 final FutureCallback<List<HttpResponse>> callback) {
71 return execute(target, requests, HttpClientContext.create(), callback);
72 }
73
74 @Override
75 public Future<List<HttpResponse>> execute(
76 final HttpHost target,
77 final List<HttpRequest> requests,
78 final HttpContext context,
79 final FutureCallback<List<HttpResponse>> callback) {
80 Args.notEmpty(requests, "HTTP request list");
81 final List<HttpAsyncRequestProducer> requestProducers = new ArrayList<HttpAsyncRequestProducer>(
82 requests.size());
83 final List<HttpAsyncResponseConsumer<HttpResponse>> responseConsumers = new ArrayList<HttpAsyncResponseConsumer<HttpResponse>>(
84 requests.size());
85 for (int i = 0; i < requests.size(); i++) {
86 final HttpRequest request = requests.get(i);
87 requestProducers.add(HttpAsyncMethods.create(target, request));
88 responseConsumers.add(HttpAsyncMethods.createConsumer());
89 }
90 return execute(target, requestProducers, responseConsumers, context, callback);
91 }
92
93 }