--- a/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientImpl.java Fri Jan 12 15:36:28 2018 +0000
+++ b/src/jdk.incubator.httpclient/share/classes/jdk/incubator/http/HttpClientImpl.java Tue Jan 16 15:52:01 2018 +0000
@@ -61,7 +61,7 @@
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Stream;
import jdk.incubator.http.HttpResponse.BodyHandler;
-import jdk.incubator.http.HttpResponse.MultiSubscriber;
+import jdk.incubator.http.HttpResponse.PushPromiseHandler;
import jdk.incubator.http.internal.common.Log;
import jdk.incubator.http.internal.common.Pair;
import jdk.incubator.http.internal.common.Utils;
@@ -417,6 +417,16 @@
public <T> CompletableFuture<HttpResponse<T>>
sendAsync(HttpRequest userRequest, BodyHandler<T> responseHandler)
{
+ return sendAsync(userRequest, responseHandler, null);
+ }
+
+
+ @Override
+ public <T> CompletableFuture<HttpResponse<T>>
+ sendAsync(HttpRequest userRequest,
+ BodyHandler<T> responseHandler,
+ PushPromiseHandler<T> pushPromiseHandler)
+ {
AccessControlContext acc = null;
if (System.getSecurityManager() != null)
acc = AccessController.getContext();
@@ -431,10 +441,11 @@
try {
debugelapsed.log(Level.DEBUG, "ClientImpl (async) send %s", userRequest);
- MultiExchange<Void,T> mex = new MultiExchange<>(userRequest,
+ MultiExchange<T> mex = new MultiExchange<>(userRequest,
requestImpl,
this,
responseHandler,
+ pushPromiseHandler,
acc);
CompletableFuture<HttpResponse<T>> res =
mex.responseAsync().whenComplete((b,t) -> unreference());
@@ -456,48 +467,6 @@
}
}
- @Override
- public <U, T> CompletableFuture<U>
- sendAsync(HttpRequest userRequest, MultiSubscriber<U, T> responseHandler) {
- AccessControlContext acc = null;
- if (System.getSecurityManager() != null)
- acc = AccessController.getContext();
-
- // Clone the, possibly untrusted, HttpRequest
- HttpRequestImpl requestImpl = new HttpRequestImpl(userRequest, proxySelector, acc);
- if (requestImpl.method().equals("CONNECT"))
- throw new IllegalArgumentException("Unsupported method CONNECT");
-
- long start = DEBUGELAPSED ? System.nanoTime() : 0;
- reference();
- try {
- debugelapsed.log(Level.DEBUG, "ClientImpl (async) send multi %s", userRequest);
-
- MultiExchange<U,T> mex = new MultiExchange<>(userRequest,
- requestImpl,
- this,
- responseHandler,
- acc);
- CompletableFuture<U> res = mex.multiResponseAsync()
- .whenComplete((b,t) -> unreference());
- if (DEBUGELAPSED) {
- res = res.whenComplete(
- (b,t) -> debugCompleted("ClientImpl (async)", start, userRequest));
- }
- // makes sure that any dependent actions happen in the executor
- if (acc != null) {
- res.whenCompleteAsync((r, t) -> { /* do nothing */},
- new PrivilegedExecutor(executor, acc));
- }
-
- return res;
- } catch(Throwable t) {
- unreference();
- debugCompleted("ClientImpl (async)", start, userRequest);
- throw t;
- }
- }
-
// Main loop for this client's selector
private final static class SelectorManager extends Thread {