Add support for OkHttp 3.
Fixes gh-39.
This commit is contained in:
@@ -57,6 +57,12 @@
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp</artifactId>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-test</artifactId>
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.security.GeneralSecurityException;
|
||||
import java.security.KeyStore;
|
||||
import java.security.NoSuchAlgorithmException;
|
||||
import java.security.cert.CertificateException;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.net.ssl.KeyManager;
|
||||
import javax.net.ssl.KeyManagerFactory;
|
||||
@@ -31,6 +32,7 @@ import javax.net.ssl.TrustManagerFactory;
|
||||
import com.squareup.okhttp.OkHttpClient;
|
||||
import io.netty.handler.ssl.SslContextBuilder;
|
||||
import io.netty.handler.ssl.SslProvider;
|
||||
import okhttp3.OkHttpClient.Builder;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.http.client.config.RequestConfig;
|
||||
@@ -42,6 +44,7 @@ import org.springframework.core.io.Resource;
|
||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||
import org.springframework.http.client.Netty4ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.OkHttpClientHttpRequestFactory;
|
||||
import org.springframework.http.client.SimpleClientHttpRequestFactory;
|
||||
import org.springframework.util.Assert;
|
||||
@@ -70,6 +73,10 @@ public class ClientHttpRequestFactoryFactory {
|
||||
"com.squareup.okhttp.OkHttpClient",
|
||||
ClientHttpRequestFactoryFactory.class.getClassLoader());
|
||||
|
||||
private static final boolean OKHTTP3_PRESENT = ClassUtils.isPresent(
|
||||
"okhttp3.OkHttpClient",
|
||||
ClientHttpRequestFactoryFactory.class.getClassLoader());
|
||||
|
||||
private static final boolean NETTY_PRESENT = ClassUtils.isPresent(
|
||||
"io.netty.channel.nio.NioEventLoopGroup",
|
||||
ClientHttpRequestFactoryFactory.class.getClassLoader());
|
||||
@@ -95,6 +102,10 @@ public class ClientHttpRequestFactoryFactory {
|
||||
return HttpComponents.usingHttpComponents(options, sslConfiguration);
|
||||
}
|
||||
|
||||
if (OKHTTP3_PRESENT) {
|
||||
return OkHttp3.usingOkHttp3(options, sslConfiguration);
|
||||
}
|
||||
|
||||
if (OKHTTP_PRESENT) {
|
||||
return OkHttp.usingOkHttp(options, sslConfiguration);
|
||||
}
|
||||
@@ -102,7 +113,6 @@ public class ClientHttpRequestFactoryFactory {
|
||||
if (NETTY_PRESENT) {
|
||||
return Netty.usingNetty(options, sslConfiguration);
|
||||
}
|
||||
|
||||
}
|
||||
catch (GeneralSecurityException e) {
|
||||
throw new IllegalStateException(e);
|
||||
@@ -263,6 +273,31 @@ public class ClientHttpRequestFactoryFactory {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link ClientHttpRequestFactory} for the {@link OkHttpClient}.
|
||||
*
|
||||
* @author Mark Paluch
|
||||
*/
|
||||
static class OkHttp3 {
|
||||
|
||||
static ClientHttpRequestFactory usingOkHttp3(ClientOptions options,
|
||||
SslConfiguration sslConfiguration) throws GeneralSecurityException,
|
||||
IOException {
|
||||
|
||||
Builder builder = new Builder();
|
||||
|
||||
if (hasSslConfiguration(sslConfiguration)) {
|
||||
builder.sslSocketFactory(getSSLContext(sslConfiguration)
|
||||
.getSocketFactory());
|
||||
}
|
||||
|
||||
builder.connectTimeout(options.getConnectionTimeout(), TimeUnit.MILLISECONDS)
|
||||
.readTimeout(options.getReadTimeout(), TimeUnit.MILLISECONDS);
|
||||
|
||||
return new OkHttp3ClientHttpRequestFactory(builder.build());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link ClientHttpRequestFactory} for Netty.
|
||||
*
|
||||
|
||||
@@ -25,11 +25,13 @@ import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.http.client.ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||
import org.springframework.http.client.Netty4ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.OkHttp3ClientHttpRequestFactory;
|
||||
import org.springframework.http.client.OkHttpClientHttpRequestFactory;
|
||||
import org.springframework.vault.client.VaultEndpoint;
|
||||
import org.springframework.vault.config.ClientHttpRequestFactoryFactory.HttpComponents;
|
||||
import org.springframework.vault.config.ClientHttpRequestFactoryFactory.Netty;
|
||||
import org.springframework.vault.config.ClientHttpRequestFactoryFactory.OkHttp;
|
||||
import org.springframework.vault.config.ClientHttpRequestFactoryFactory.OkHttp3;
|
||||
import org.springframework.vault.support.ClientOptions;
|
||||
import org.springframework.vault.util.Settings;
|
||||
import org.springframework.web.client.HttpStatusCodeException;
|
||||
@@ -93,6 +95,21 @@ public class ClientHttpRequestFactoryFactoryIntegrationTests {
|
||||
((DisposableBean) factory).destroy();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void okHttp3ClientShouldWork() throws Exception {
|
||||
|
||||
ClientHttpRequestFactory factory = OkHttp3.usingOkHttp3(new ClientOptions(),
|
||||
Settings.createSslConfiguration());
|
||||
RestTemplate template = new RestTemplate(factory);
|
||||
|
||||
String response = request(template);
|
||||
|
||||
assertThat(factory).isInstanceOf(OkHttp3ClientHttpRequestFactory.class);
|
||||
assertThat(response).isNotNull().contains("initialized");
|
||||
|
||||
((DisposableBean) factory).destroy();
|
||||
}
|
||||
|
||||
private String request(RestTemplate template) {
|
||||
|
||||
// Uninitialized and sealed can cause status 500
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
<httpcore.version>4.4.5</httpcore.version>
|
||||
<netty.version>4.1.6.Final</netty.version>
|
||||
<okhttp.version>2.7.5</okhttp.version>
|
||||
<okhttp3.version>3.4.2</okhttp3.version>
|
||||
<jackson.version>2.8.2</jackson.version>
|
||||
</properties>
|
||||
|
||||
@@ -70,6 +71,13 @@
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.squareup.okhttp3</groupId>
|
||||
<artifactId>okhttp</artifactId>
|
||||
<version>${okhttp3.version}</version>
|
||||
<optional>true</optional>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user