diff options
Diffstat (limited to 'spring-web/src/main/java/org/springframework/http/client/OkHttpClientHttpRequest.java')
-rw-r--r-- | spring-web/src/main/java/org/springframework/http/client/OkHttpClientHttpRequest.java | 89 |
1 files changed, 8 insertions, 81 deletions
diff --git a/spring-web/src/main/java/org/springframework/http/client/OkHttpClientHttpRequest.java b/spring-web/src/main/java/org/springframework/http/client/OkHttpClientHttpRequest.java index fe519f06..a2f75be4 100644 --- a/spring-web/src/main/java/org/springframework/http/client/OkHttpClientHttpRequest.java +++ b/spring-web/src/main/java/org/springframework/http/client/OkHttpClientHttpRequest.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2015 the original author or authors. + * Copyright 2002-2016 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,35 +18,24 @@ package org.springframework.http.client; import java.io.IOException; import java.net.URI; -import java.net.URL; -import java.util.List; -import java.util.Map; -import java.util.concurrent.ExecutionException; - -import com.squareup.okhttp.Call; -import com.squareup.okhttp.Callback; -import com.squareup.okhttp.MediaType; + import com.squareup.okhttp.OkHttpClient; import com.squareup.okhttp.Request; -import com.squareup.okhttp.RequestBody; -import com.squareup.okhttp.Response; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; -import org.springframework.util.StringUtils; -import org.springframework.util.concurrent.ListenableFuture; -import org.springframework.util.concurrent.SettableListenableFuture; /** - * {@link ClientHttpRequest} implementation that uses OkHttp to execute requests. + * {@link ClientHttpRequest} implementation that uses OkHttp 2.x to execute requests. * * <p>Created via the {@link OkHttpClientHttpRequestFactory}. * * @author Luciano Leggieri * @author Arjen Poutsma * @since 4.2 + * @see org.springframework.http.client.OkHttp3ClientHttpRequest */ -class OkHttpClientHttpRequest extends AbstractBufferingAsyncClientHttpRequest implements ClientHttpRequest { +class OkHttpClientHttpRequest extends AbstractBufferingClientHttpRequest { private final OkHttpClient client; @@ -72,73 +61,11 @@ class OkHttpClientHttpRequest extends AbstractBufferingAsyncClientHttpRequest im return this.uri; } - @Override - protected ListenableFuture<ClientHttpResponse> executeInternal(HttpHeaders headers, byte[] content) - throws IOException { - - MediaType contentType = getContentType(headers); - RequestBody body = (content.length > 0 ? RequestBody.create(contentType, content) : null); - - URL url = this.uri.toURL(); - String methodName = this.method.name(); - Request.Builder builder = new Request.Builder().url(url).method(methodName, body); - - for (Map.Entry<String, List<String>> entry : headers.entrySet()) { - String headerName = entry.getKey(); - for (String headerValue : entry.getValue()) { - builder.addHeader(headerName, headerValue); - } - } - Request request = builder.build(); - - return new OkHttpListenableFuture(this.client.newCall(request)); - } - - private MediaType getContentType(HttpHeaders headers) { - String rawContentType = headers.getFirst("Content-Type"); - return (StringUtils.hasText(rawContentType) ? MediaType.parse(rawContentType) : null); - } @Override - public ClientHttpResponse execute() throws IOException { - try { - return executeAsync().get(); - } - catch (InterruptedException ex) { - throw new IOException(ex.getMessage(), ex); - } - catch (ExecutionException ex) { - Throwable cause = ex.getCause(); - if (cause instanceof IOException) { - throw (IOException) cause; - } - throw new IOException(cause.getMessage(), cause); - } - } - - - private static class OkHttpListenableFuture extends SettableListenableFuture<ClientHttpResponse> { - - private final Call call; - - public OkHttpListenableFuture(Call call) { - this.call = call; - this.call.enqueue(new Callback() { - @Override - public void onResponse(Response response) { - set(new OkHttpClientHttpResponse(response)); - } - @Override - public void onFailure(Request request, IOException ex) { - setException(ex); - } - }); - } - - @Override - protected void interruptTask() { - this.call.cancel(); - } + protected ClientHttpResponse executeInternal(HttpHeaders headers, byte[] content) throws IOException { + Request request = OkHttpClientHttpRequestFactory.buildRequest(headers, content, this.uri, this.method); + return new OkHttpClientHttpResponse(this.client.newCall(request).execute()); } } |