diff --git a/spring-boot-project/spring-boot-dependencies/build.gradle b/spring-boot-project/spring-boot-dependencies/build.gradle index f96befa2f6..688035fce8 100644 --- a/spring-boot-project/spring-boot-dependencies/build.gradle +++ b/spring-boot-project/spring-boot-dependencies/build.gradle @@ -1441,13 +1441,6 @@ bom { site("https://netty.io") } } - library("OkHttp", "4.12.0") { - group("com.squareup.okhttp3") { - imports = [ - "okhttp-bom" - ] - } - } library("OpenTelemetry", "1.43.0") { group("io.opentelemetry") { imports = [ diff --git a/spring-boot-project/spring-boot-parent/build.gradle b/spring-boot-project/spring-boot-parent/build.gradle index 619e6381a4..9869833911 100644 --- a/spring-boot-project/spring-boot-parent/build.gradle +++ b/spring-boot-project/spring-boot-parent/build.gradle @@ -158,6 +158,13 @@ bom { ] } } + library("OkHttp", "4.12.0") { + group("com.squareup.okhttp3") { + imports = [ + "okhttp-bom" + ] + } + } library("OpenTelemetry Logback Appender", "2.7.0-alpha") { group("io.opentelemetry.instrumentation") { modules = [ diff --git a/spring-boot-project/spring-boot/build.gradle b/spring-boot-project/spring-boot/build.gradle index 04e7388ece..d48ecf6595 100644 --- a/spring-boot-project/spring-boot/build.gradle +++ b/spring-boot-project/spring-boot/build.gradle @@ -29,7 +29,6 @@ dependencies { optional("com.oracle.database.jdbc:ucp11") optional("com.oracle.database.jdbc:ojdbc11") optional("com.samskivert:jmustache") - optional("com.squareup.okhttp3:okhttp") optional("com.zaxxer:HikariCP") optional("io.netty:netty-tcnative-boringssl-static") optional("io.projectreactor:reactor-tools") diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactories.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactories.java index 871c886c7a..ca6898d3d9 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactories.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactories.java @@ -29,11 +29,8 @@ import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLException; import javax.net.ssl.SSLSocketFactory; -import javax.net.ssl.TrustManager; -import javax.net.ssl.X509TrustManager; import io.netty.handler.ssl.SslContextBuilder; -import okhttp3.OkHttpClient; import org.apache.hc.client5.http.classic.HttpClient; import org.apache.hc.client5.http.impl.classic.HttpClientBuilder; import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; @@ -77,10 +74,6 @@ public final class ClientHttpRequestFactories { private static final boolean APACHE_HTTP_CLIENT_PRESENT = ClassUtils.isPresent(APACHE_HTTP_CLIENT_CLASS, null); - static final String OKHTTP_CLIENT_CLASS = "okhttp3.OkHttpClient"; - - private static final boolean OKHTTP_CLIENT_PRESENT = ClassUtils.isPresent(OKHTTP_CLIENT_CLASS, null); - static final String JETTY_CLIENT_CLASS = "org.eclipse.jetty.client.HttpClient"; private static final boolean JETTY_CLIENT_PRESENT = ClassUtils.isPresent(JETTY_CLIENT_CLASS, null); @@ -100,14 +93,11 @@ public final class ClientHttpRequestFactories { *
  • {@link HttpComponentsClientHttpRequestFactory}
  • *
  • {@link JettyClientHttpRequestFactory}
  • *
  • {@link ReactorClientHttpRequestFactory}
  • - *
  • {@link org.springframework.http.client.OkHttp3ClientHttpRequestFactory - * OkHttp3ClientHttpRequestFactory} (deprecated)
  • *
  • {@link SimpleClientHttpRequestFactory}
  • * * @param settings the settings to apply * @return a new {@link ClientHttpRequestFactory} */ - @SuppressWarnings("removal") public static ClientHttpRequestFactory get(ClientHttpRequestFactorySettings settings) { Assert.notNull(settings, "Settings must not be null"); if (APACHE_HTTP_CLIENT_PRESENT) { @@ -119,9 +109,6 @@ public final class ClientHttpRequestFactories { if (REACTOR_CLIENT_PRESENT) { return Reactor.get(settings); } - if (OKHTTP_CLIENT_PRESENT) { - return OkHttp.get(settings); - } return Simple.get(settings); } @@ -135,8 +122,6 @@ public final class ClientHttpRequestFactories { *
  • {@link JdkClientHttpRequestFactory}
  • *
  • {@link JettyClientHttpRequestFactory}
  • *
  • {@link ReactorClientHttpRequestFactory}
  • - *
  • {@link org.springframework.http.client.OkHttp3ClientHttpRequestFactory - * OkHttp3ClientHttpRequestFactory} (deprecated)
  • *
  • {@link SimpleClientHttpRequestFactory}
  • * * A {@code requestFactoryType} of {@link ClientHttpRequestFactory} is equivalent to @@ -146,7 +131,7 @@ public final class ClientHttpRequestFactories { * @param settings the settings to apply * @return a new {@link ClientHttpRequestFactory} instance */ - @SuppressWarnings({ "unchecked", "removal" }) + @SuppressWarnings("unchecked") public static T get(Class requestFactoryType, ClientHttpRequestFactorySettings settings) { Assert.notNull(settings, "Settings must not be null"); @@ -168,9 +153,6 @@ public final class ClientHttpRequestFactories { if (requestFactoryType == SimpleClientHttpRequestFactory.class) { return (T) Simple.get(settings); } - if (requestFactoryType == org.springframework.http.client.OkHttp3ClientHttpRequestFactory.class) { - return (T) OkHttp.get(settings); - } return get(() -> createRequestFactory(requestFactoryType), settings); } @@ -237,44 +219,6 @@ public final class ClientHttpRequestFactories { } - /** - * Support for - * {@link org.springframework.http.client.OkHttp3ClientHttpRequestFactory}. - * - * @deprecated since 3.2.0 for removal in 3.4.0 - */ - @Deprecated(since = "3.2.0", forRemoval = true) - @SuppressWarnings("removal") - static class OkHttp { - - static org.springframework.http.client.OkHttp3ClientHttpRequestFactory get( - ClientHttpRequestFactorySettings settings) { - org.springframework.http.client.OkHttp3ClientHttpRequestFactory requestFactory = createRequestFactory( - settings.sslBundle()); - PropertyMapper map = PropertyMapper.get().alwaysApplyingWhenNonNull(); - map.from(settings::connectTimeout).asInt(Duration::toMillis).to(requestFactory::setConnectTimeout); - map.from(settings::readTimeout).asInt(Duration::toMillis).to(requestFactory::setReadTimeout); - return requestFactory; - } - - private static org.springframework.http.client.OkHttp3ClientHttpRequestFactory createRequestFactory( - SslBundle sslBundle) { - if (sslBundle != null) { - Assert.state(!sslBundle.getOptions().isSpecified(), "SSL Options cannot be specified with OkHttp"); - SSLSocketFactory socketFactory = sslBundle.createSslContext().getSocketFactory(); - TrustManager[] trustManagers = sslBundle.getManagers().getTrustManagers(); - Assert.state(trustManagers.length == 1, - "Trust material must be provided in the SSL bundle for OkHttp3ClientHttpRequestFactory"); - OkHttpClient client = new OkHttpClient.Builder() - .sslSocketFactory(socketFactory, (X509TrustManager) trustManagers[0]) - .build(); - return new org.springframework.http.client.OkHttp3ClientHttpRequestFactory(client); - } - return new org.springframework.http.client.OkHttp3ClientHttpRequestFactory(); - } - - } - /** * Support for {@link JettyClientHttpRequestFactory}. */ diff --git a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHints.java b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHints.java index c249be763f..cc76593aa0 100644 --- a/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHints.java +++ b/spring-boot-project/spring-boot/src/main/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHints.java @@ -63,17 +63,6 @@ class ClientHttpRequestFactoriesRuntimeHints implements RuntimeHintsRegistrar { typeHint.onReachableType(HttpURLConnection.class); registerReflectionHints(hints, SimpleClientHttpRequestFactory.class); }); - registerOkHttpHints(hints, classLoader); - } - - @SuppressWarnings("removal") - @Deprecated(since = "3.2.0", forRemoval = true) - private void registerOkHttpHints(ReflectionHints hints, ClassLoader classLoader) { - hints.registerTypeIfPresent(classLoader, ClientHttpRequestFactories.OKHTTP_CLIENT_CLASS, (typeHint) -> { - typeHint.onReachableType(TypeReference.of(ClientHttpRequestFactories.OKHTTP_CLIENT_CLASS)); - registerReflectionHints(hints, org.springframework.http.client.OkHttp3ClientHttpRequestFactory.class); - }); - } private void registerReflectionHints(ReflectionHints hints, diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesJettyTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesJettyTests.java index eac25b9d86..c8afb5845e 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesJettyTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesJettyTests.java @@ -27,7 +27,7 @@ import org.springframework.test.util.ReflectionTestUtils; * * @author Arjen Poutsma */ -@ClassPathExclusions({ "httpclient5-*.jar", "okhttp-*.jar" }) +@ClassPathExclusions("httpclient5-*.jar") class ClientHttpRequestFactoriesJettyTests extends AbstractClientHttpRequestFactoriesTests { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesOkHttp3Tests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesOkHttp3Tests.java deleted file mode 100644 index b6ab608200..0000000000 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesOkHttp3Tests.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright 2012-2024 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. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.web.client; - -import java.io.File; - -import okhttp3.OkHttpClient; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.testsupport.classpath.ClassPathExclusions; -import org.springframework.boot.testsupport.classpath.ClassPathOverrides; -import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; -import org.springframework.test.util.ReflectionTestUtils; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link ClientHttpRequestFactories} when OkHttp 3 is the predominant HTTP - * client. - * - * @author Andy Wilkinson - * @deprecated since 3.2.0 for removal in 3.4.0 - */ -@ClassPathOverrides("com.squareup.okhttp3:okhttp:3.14.9") -@ClassPathExclusions({ "httpclient5-*.jar", "jetty-client-*.jar", "reactor-netty-http-*.jar" }) -@Deprecated(since = "3.2.0", forRemoval = true) -@SuppressWarnings("removal") -class ClientHttpRequestFactoriesOkHttp3Tests - extends AbstractClientHttpRequestFactoriesTests { - - ClientHttpRequestFactoriesOkHttp3Tests() { - super(OkHttp3ClientHttpRequestFactory.class); - } - - @Test - void okHttp3IsBeingUsed() { - assertThat(new File(OkHttpClient.class.getProtectionDomain().getCodeSource().getLocation().getFile()).getName()) - .startsWith("okhttp-3."); - } - - @Override - protected long connectTimeout(OkHttp3ClientHttpRequestFactory requestFactory) { - return ((OkHttpClient) ReflectionTestUtils.getField(requestFactory, "client")).connectTimeoutMillis(); - } - - @Override - protected long readTimeout(OkHttp3ClientHttpRequestFactory requestFactory) { - return ((OkHttpClient) ReflectionTestUtils.getField(requestFactory, "client")).readTimeoutMillis(); - } - - @Override - protected boolean supportsSettingConnectTimeout() { - return true; - } - - @Override - protected boolean supportsSettingReadTimeout() { - return true; - } - -} diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesOkHttp4Tests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesOkHttp4Tests.java deleted file mode 100644 index 4bf6be2976..0000000000 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesOkHttp4Tests.java +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright 2012-2024 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. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.boot.web.client; - -import java.io.File; - -import okhttp3.OkHttpClient; -import org.junit.jupiter.api.Test; - -import org.springframework.boot.testsupport.classpath.ClassPathExclusions; -import org.springframework.http.client.OkHttp3ClientHttpRequestFactory; -import org.springframework.test.util.ReflectionTestUtils; - -import static org.assertj.core.api.Assertions.assertThat; - -/** - * Tests for {@link ClientHttpRequestFactories} when OkHttp 4 is the predominant HTTP - * client. - * - * @author Andy Wilkinson - * @deprecated since 3.2.0 for removal in 3.4.0 - */ -@ClassPathExclusions({ "httpclient5-*.jar", "jetty-client-*.jar", "reactor-netty-http-*.jar" }) -@Deprecated(since = "3.2.0", forRemoval = true) -@SuppressWarnings("removal") -class ClientHttpRequestFactoriesOkHttp4Tests - extends AbstractClientHttpRequestFactoriesTests { - - ClientHttpRequestFactoriesOkHttp4Tests() { - super(OkHttp3ClientHttpRequestFactory.class); - } - - @Test - void okHttp4IsBeingUsed() { - assertThat(new File(OkHttpClient.class.getProtectionDomain().getCodeSource().getLocation().getFile()).getName()) - .startsWith("okhttp-4."); - } - - @Override - protected long connectTimeout(OkHttp3ClientHttpRequestFactory requestFactory) { - return ((OkHttpClient) ReflectionTestUtils.getField(requestFactory, "client")).connectTimeoutMillis(); - } - - @Override - protected long readTimeout(OkHttp3ClientHttpRequestFactory requestFactory) { - return ((OkHttpClient) ReflectionTestUtils.getField(requestFactory, "client")).readTimeoutMillis(); - } - - @Override - protected boolean supportsSettingConnectTimeout() { - return true; - } - - @Override - protected boolean supportsSettingReadTimeout() { - return true; - } - -} diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHintsTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHintsTests.java index 382b7f33bd..8bf23c75e0 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHintsTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesRuntimeHintsTests.java @@ -61,24 +61,6 @@ class ClientHttpRequestFactoriesRuntimeHintsTests { .accepts(hints); } - @Test - @Deprecated(since = "3.2.0") - @SuppressWarnings("removal") - void shouldRegisterOkHttpHints() { - RuntimeHints hints = new RuntimeHints(); - new ClientHttpRequestFactoriesRuntimeHints().registerHints(hints, getClass().getClassLoader()); - ReflectionHintsPredicates reflection = RuntimeHintsPredicates.reflection(); - assertThat(reflection.onMethod(method(org.springframework.http.client.OkHttp3ClientHttpRequestFactory.class, - "setConnectTimeout", int.class))) - .accepts(hints); - assertThat(reflection.onMethod(method(org.springframework.http.client.OkHttp3ClientHttpRequestFactory.class, - "setReadTimeout", int.class))) - .accepts(hints); - assertThat(hints.reflection() - .getTypeHint(org.springframework.http.client.OkHttp3ClientHttpRequestFactory.class) - .methods()).hasSize(2); - } - @Test void shouldRegisterJettyClientHints() { RuntimeHints hints = new RuntimeHints(); diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesSimpleTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesSimpleTests.java index 4b40bd988c..651232c7b5 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesSimpleTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/web/client/ClientHttpRequestFactoriesSimpleTests.java @@ -26,7 +26,7 @@ import org.springframework.test.util.ReflectionTestUtils; * * @author Andy Wilkinson */ -@ClassPathExclusions({ "httpclient5-*.jar", "jetty-client-*.jar", "okhttp-*.jar", "reactor-netty-http-*.jar" }) +@ClassPathExclusions({ "httpclient5-*.jar", "jetty-client-*.jar", "reactor-netty-http-*.jar" }) class ClientHttpRequestFactoriesSimpleTests extends AbstractClientHttpRequestFactoriesTests { diff --git a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/webservices/client/HttpWebServiceMessageSenderBuilderSimpleIntegrationTests.java b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/webservices/client/HttpWebServiceMessageSenderBuilderSimpleIntegrationTests.java index 07d1e22c08..ce56dab57f 100644 --- a/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/webservices/client/HttpWebServiceMessageSenderBuilderSimpleIntegrationTests.java +++ b/spring-boot-project/spring-boot/src/test/java/org/springframework/boot/webservices/client/HttpWebServiceMessageSenderBuilderSimpleIntegrationTests.java @@ -34,7 +34,7 @@ import static org.assertj.core.api.Assertions.assertThat; * * @author Stephane Nicoll */ -@ClassPathExclusions({ "httpclient5-*.jar", "jetty-client-*.jar", "okhttp*.jar", "reactor-netty-http-*.jar" }) +@ClassPathExclusions({ "httpclient5-*.jar", "jetty-client-*.jar", "reactor-netty-http-*.jar" }) class HttpWebServiceMessageSenderBuilderSimpleIntegrationTests { private final HttpWebServiceMessageSenderBuilder builder = new HttpWebServiceMessageSenderBuilder();