", 8888)))
.build();
```
diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkAsyncHttpClientBuilder.java b/sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilder.java
similarity index 86%
rename from sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkAsyncHttpClientBuilder.java
rename to sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilder.java
index e78b0a880f1cd..0ec406a6c5a6a 100644
--- a/sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkAsyncHttpClientBuilder.java
+++ b/sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilder.java
@@ -28,7 +28,7 @@
* Builder to configure and build an instance of the azure-core {@link HttpClient} type using the JDK HttpClient APIs,
* first introduced as preview in JDK 9, but made generally available from JDK 11 onwards.
*/
-public class JdkAsyncHttpClientBuilder {
+public class JdkHttpClientBuilder {
private static final Duration DEFAULT_CONNECT_TIMEOUT = Duration.ofSeconds(60);
private static final String JAVA_HOME = System.getProperty("java.home");
@@ -55,7 +55,7 @@ public class JdkAsyncHttpClientBuilder {
DEFAULT_RESTRICTED_HEADERS = Collections.unmodifiableSet(treeSet);
}
- private static final ClientLogger LOGGER = new ClientLogger(JdkAsyncHttpClientBuilder.class);
+ private static final ClientLogger LOGGER = new ClientLogger(JdkHttpClientBuilder.class);
private java.net.http.HttpClient.Builder httpClientBuilder;
private Duration connectionTimeout;
@@ -64,18 +64,18 @@ public class JdkAsyncHttpClientBuilder {
private Executor executor;
/**
- * Creates JdkAsyncHttpClientBuilder.
+ * Creates JdkHttpClientBuilder.
*/
- public JdkAsyncHttpClientBuilder() {
+ public JdkHttpClientBuilder() {
}
/**
- * Creates JdkAsyncHttpClientBuilder from the builder of an existing {@link java.net.http.HttpClient.Builder}.
+ * Creates JdkHttpClientBuilder from the builder of an existing {@link java.net.http.HttpClient.Builder}.
*
* @param httpClientBuilder the HttpClient builder to use
* @throws NullPointerException if {@code httpClientBuilder} is null
*/
- public JdkAsyncHttpClientBuilder(java.net.http.HttpClient.Builder httpClientBuilder) {
+ public JdkHttpClientBuilder(java.net.http.HttpClient.Builder httpClientBuilder) {
this.httpClientBuilder = Objects.requireNonNull(httpClientBuilder, "'httpClientBuilder' cannot be null.");
}
@@ -86,10 +86,10 @@ public JdkAsyncHttpClientBuilder(java.net.http.HttpClient.Builder httpClientBuil
* newly built {@code HttpClient}.
*
* @param executor the executor to be used for asynchronous and dependent tasks
- * @return the updated JdkAsyncHttpClientBuilder object
+ * @return the updated JdkHttpClientBuilder object
* @throws NullPointerException if {@code executor} is null
*/
- public JdkAsyncHttpClientBuilder executor(Executor executor) {
+ public JdkHttpClientBuilder executor(Executor executor) {
this.executor = Objects.requireNonNull(executor, "executor can not be null");
return this;
}
@@ -99,20 +99,20 @@ public JdkAsyncHttpClientBuilder executor(Executor executor) {
*
* Code Samples
*
- *
+ *
*
- * HttpClient client = new JdkAsyncHttpClientBuilder()
+ * HttpClient client = new JdkHttpClientBuilder()
* .connectionTimeout(Duration.ofSeconds(250)) // connection timeout of 250 seconds
* .build();
*
- *
+ *
*
* The default connection timeout is 60 seconds.
*
* @param connectionTimeout the connection timeout
- * @return the updated JdkAsyncHttpClientBuilder object
+ * @return the updated JdkHttpClientBuilder object
*/
- public JdkAsyncHttpClientBuilder connectionTimeout(Duration connectionTimeout) {
+ public JdkHttpClientBuilder connectionTimeout(Duration connectionTimeout) {
// setConnectionTimeout can be null
this.connectionTimeout = connectionTimeout;
return this;
@@ -123,22 +123,22 @@ public JdkAsyncHttpClientBuilder connectionTimeout(Duration connectionTimeout) {
*
* Code Samples
*
- *
+ *
*
* final String proxyHost = "<proxy-host>"; // e.g. localhost
* final int proxyPort = 9999; // Proxy port
* ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP,
* new InetSocketAddress(proxyHost, proxyPort));
- * HttpClient client = new JdkAsyncHttpClientBuilder()
+ * HttpClient client = new JdkHttpClientBuilder()
* .proxy(proxyOptions)
* .build();
*
- *
+ *
*
* @param proxyOptions The proxy configuration to use.
- * @return the updated {@link JdkAsyncHttpClientBuilder} object
+ * @return the updated JdkHttpClientBuilder object
*/
- public JdkAsyncHttpClientBuilder proxy(ProxyOptions proxyOptions) {
+ public JdkHttpClientBuilder proxy(ProxyOptions proxyOptions) {
// proxyOptions can be null
this.proxyOptions = proxyOptions;
return this;
@@ -151,9 +151,9 @@ public JdkAsyncHttpClientBuilder proxy(ProxyOptions proxyOptions) {
* configuration store}, use {@link Configuration#NONE} to bypass using configuration settings during construction.
*
* @param configuration The configuration store used to
- * @return The updated JdkAsyncHttpClientBuilder object.
+ * @return The updated JdkHttpClientBuilder object.
*/
- public JdkAsyncHttpClientBuilder configuration(Configuration configuration) {
+ public JdkHttpClientBuilder configuration(Configuration configuration) {
this.configuration = configuration;
return this;
}
diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkHttpClientProvider.java b/sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkHttpClientProvider.java
index 54f9e179e0294..1ed9e81fa688d 100644
--- a/sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkHttpClientProvider.java
+++ b/sdk/core/azure-core-http-jdk-httpclient/src/main/java/com/azure/core/http/jdk/httpclient/JdkHttpClientProvider.java
@@ -6,6 +6,7 @@
import com.azure.core.http.HttpClient;
import com.azure.core.http.HttpClientProvider;
import com.azure.core.util.Configuration;
+import com.azure.core.util.HttpClientOptions;
/**
* An {@link HttpClientProvider} that provides an implementation of HttpClient based on native JDK HttpClient.
@@ -20,7 +21,7 @@ public final class JdkHttpClientProvider implements HttpClientProvider {
// Enum Singleton Pattern
private enum GlobalJdkAsyncHttpClient {
- HTTP_CLIENT(new JdkAsyncHttpClientBuilder().build());
+ HTTP_CLIENT(new JdkHttpClientBuilder().build());
private final HttpClient httpClient;
@@ -50,6 +51,20 @@ public HttpClient createInstance() {
if (enableHttpClientSharing) {
return GlobalJdkAsyncHttpClient.HTTP_CLIENT.getHttpClient();
}
- return new JdkAsyncHttpClientBuilder().build();
+ return new JdkHttpClientBuilder().build();
+ }
+
+ @Override
+ public HttpClient createInstance(HttpClientOptions clientOptions) {
+ if (clientOptions == null) {
+ return createInstance();
+ }
+
+ JdkHttpClientBuilder builder = new JdkHttpClientBuilder();
+ builder = builder.proxy(clientOptions.getProxyOptions())
+ .configuration(clientOptions.getConfiguration())
+ .connectionTimeout(clientOptions.getConnectTimeout());
+
+ return builder.build();
}
}
diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/JdkAsyncHttpClientBuilderJavaDocCodeSnippets.java b/sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderJavaDocCodeSnippets.java
similarity index 63%
rename from sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/JdkAsyncHttpClientBuilderJavaDocCodeSnippets.java
rename to sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderJavaDocCodeSnippets.java
index 623c7b7fe468a..9de11811543d8 100644
--- a/sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/JdkAsyncHttpClientBuilderJavaDocCodeSnippets.java
+++ b/sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderJavaDocCodeSnippets.java
@@ -10,36 +10,36 @@
import java.time.Duration;
/**
- * Code snippets for {@link JdkAsyncHttpClientBuilder}
+ * Code snippets for {@link JdkHttpClientBuilder}
*/
-public class JdkAsyncHttpClientBuilderJavaDocCodeSnippets {
+public class JdkHttpClientBuilderJavaDocCodeSnippets {
/**
* Code snippet for simple http client instantiation.
*/
public void simpleInstantiation() {
// BEGIN: com.azure.core.http.jdk.httpclient.instantiation-simple
- HttpClient client = new JdkAsyncHttpClientBuilder()
+ HttpClient client = new JdkHttpClientBuilder()
.build();
// END: com.azure.core.http.jdk.httpclient.instantiation-simple
}
public void proxySample() {
- // BEGIN: com.azure.core.http.jdk.httpclient.JdkAsyncHttpClientBuilder.proxy#ProxyOptions
+ // BEGIN: com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder.proxy#ProxyOptions
final String proxyHost = ""; // e.g. localhost
final int proxyPort = 9999; // Proxy port
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP,
new InetSocketAddress(proxyHost, proxyPort));
- HttpClient client = new JdkAsyncHttpClientBuilder()
+ HttpClient client = new JdkHttpClientBuilder()
.proxy(proxyOptions)
.build();
- // END: com.azure.core.http.jdk.httpclient.JdkAsyncHttpClientBuilder.proxy#ProxyOptions
+ // END: com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder.proxy#ProxyOptions
}
public void proxyBasicAuthenticationSample() {
- // BEGIN: com.azure.core.http.jdk.httpclient.JdkAsyncHttpClientBuilder#setProxyAuthenticator
+ // BEGIN: com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder#setProxyAuthenticator
final String proxyHost = ""; // e.g. localhost
final int proxyPort = 9999; // Proxy port
final String proxyUser = "";
@@ -48,20 +48,20 @@ public void proxyBasicAuthenticationSample() {
ProxyOptions proxyOptions = new ProxyOptions(ProxyOptions.Type.HTTP,
new InetSocketAddress(proxyHost, proxyPort));
proxyOptions = proxyOptions.setCredentials(proxyUser, proxyPassword);
- HttpClient client = new JdkAsyncHttpClientBuilder()
+ HttpClient client = new JdkHttpClientBuilder()
.proxy(proxyOptions)
.build();
- // END: com.azure.core.http.jdk.httpclient.JdkAsyncHttpClientBuilder#setProxyAuthenticator
+ // END: com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder#setProxyAuthenticator
}
public void connectionTimeoutSample() {
- // BEGIN: com.azure.core.http.jdk.httpclient.JdkAsyncHttpClientBuilder.connectionTimeout#Duration
- HttpClient client = new JdkAsyncHttpClientBuilder()
+ // BEGIN: com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder.connectionTimeout#Duration
+ HttpClient client = new JdkHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(250)) // connection timeout of 250 seconds
.build();
- // END: com.azure.core.http.jdk.httpclient.JdkAsyncHttpClientBuilder.connectionTimeout#Duration
+ // END: com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder.connectionTimeout#Duration
}
}
diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/ReadmeSamples.java b/sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/ReadmeSamples.java
index b7c3982de4bb9..d3d4327417c07 100644
--- a/sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/ReadmeSamples.java
+++ b/sdk/core/azure-core-http-jdk-httpclient/src/samples/java/com/azure/core/http/jdk/httpclient/ReadmeSamples.java
@@ -22,7 +22,7 @@ public class ReadmeSamples {
*/
public void createBasicClient() {
// BEGIN: readme-sample-createBasicClient
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
// END: readme-sample-createBasicClient
}
@@ -31,7 +31,7 @@ public void createBasicClient() {
*/
public void createClientWithConnectionTimeout() {
// BEGIN: readme-sample-createClientWithConnectionTimeout
- HttpClient client = new JdkAsyncHttpClientBuilder().connectionTimeout(Duration.ofSeconds(60)).build();
+ HttpClient client = new JdkHttpClientBuilder().connectionTimeout(Duration.ofSeconds(60)).build();
// END: readme-sample-createClientWithConnectionTimeout
}
@@ -40,7 +40,7 @@ public void createClientWithConnectionTimeout() {
*/
public void createProxyClient() {
// BEGIN: readme-sample-createProxyClient
- HttpClient client = new JdkAsyncHttpClientBuilder()
+ HttpClient client = new JdkHttpClientBuilder()
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("", 8888)))
.build();
// END: readme-sample-createProxyClient
diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java
index 4400a3f73716c..ea815ebb60c78 100644
--- a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java
+++ b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientBuilderTests.java
@@ -43,7 +43,7 @@
import static org.mockito.Mockito.when;
/**
- * Tests {@link JdkAsyncHttpClientBuilder}.
+ * Tests {@link JdkHttpClientBuilder}.
*/
@DisabledForJreRange(max = JRE.JAVA_11)
public class JdkHttpClientBuilderTests {
@@ -70,8 +70,7 @@ public void execute(Runnable command) {
}
});
- final JdkHttpClient client = (JdkHttpClient) new JdkAsyncHttpClientBuilder(existingClientBuilder)
- .build();
+ final JdkHttpClient client = (JdkHttpClient) new JdkHttpClientBuilder(existingClientBuilder).build();
final String defaultPath = "/default";
final WireMockServer server
@@ -93,12 +92,12 @@ public void execute(Runnable command) {
}
/**
- * Tests that instantiating an {@link JdkAsyncHttpClientBuilder} with a {@code null} {@link JdkHttpClient}
+ * Tests that instantiating an {@link JdkHttpClientBuilder} with a {@code null} {@link JdkHttpClient}
* will throw a {@link NullPointerException}.
*/
@Test
public void startingWithNullClientThrows() {
- assertThrows(NullPointerException.class, () -> new JdkAsyncHttpClientBuilder(null));
+ assertThrows(NullPointerException.class, () -> new JdkHttpClientBuilder(null));
}
/**
@@ -107,7 +106,7 @@ public void startingWithNullClientThrows() {
@Test
public void buildWithExecutor() {
final String[] marker = new String[1];
- final HttpClient httpClient = new JdkAsyncHttpClientBuilder()
+ final HttpClient httpClient = new JdkHttpClientBuilder()
.executor(new Executor() {
private final ExecutorService executorService = Executors.newFixedThreadPool(10);
@Override
@@ -143,7 +142,7 @@ public void execute(Runnable command) {
*/
@Test
public void nullExecutorThrows() {
- assertThrows(NullPointerException.class, () -> new JdkAsyncHttpClientBuilder().executor(null));
+ assertThrows(NullPointerException.class, () -> new JdkHttpClientBuilder().executor(null));
}
/**
@@ -161,7 +160,7 @@ public void buildWithHttpProxy() {
new InetSocketAddress(proxyEndpoint.getHost(), proxyEndpoint.getPort()))
.setCredentials(PROXY_USERNAME, PROXY_PASSWORD);
- HttpClient httpClient = new JdkAsyncHttpClientBuilder(java.net.http.HttpClient.newBuilder())
+ HttpClient httpClient = new JdkHttpClientBuilder(java.net.http.HttpClient.newBuilder())
.proxy(clientProxyOptions)
.build();
// Url of the service behind proxy
@@ -215,7 +214,7 @@ public void buildWithHttpProxyFromExplicitConfiguration() {
@Test
public void buildWithConfigurationNone() {
- final HttpClient httpClient = new JdkAsyncHttpClientBuilder()
+ final HttpClient httpClient = new JdkHttpClientBuilder()
.configuration(Configuration.NONE)
.build();
@@ -239,7 +238,7 @@ public void buildWithConfigurationNone() {
@ParameterizedTest
@MethodSource("buildWithExplicitConfigurationProxySupplier")
public void buildWithNonProxyConfigurationProxy(Configuration configuration) {
- final HttpClient httpClient = new JdkAsyncHttpClientBuilder()
+ final HttpClient httpClient = new JdkHttpClientBuilder()
.configuration(configuration)
.build();
@@ -283,16 +282,16 @@ private static Stream buildWithExplicitConfigurationProxySupplier() {
@Test
void testAllowedHeadersFromNetworkProperties() {
- JdkAsyncHttpClientBuilder jdkAsyncHttpClientBuilder = spy(new JdkAsyncHttpClientBuilder());
+ JdkHttpClientBuilder jdkHttpClientBuilder = spy(new JdkHttpClientBuilder());
Properties properties = new Properties();
properties.put("jdk.httpclient.allowRestrictedHeaders", "content-length, upgrade");
- when(jdkAsyncHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
+ when(jdkHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
Set expectedRestrictedHeaders = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- expectedRestrictedHeaders.addAll(JdkAsyncHttpClientBuilder.DEFAULT_RESTRICTED_HEADERS);
+ expectedRestrictedHeaders.addAll(com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder.DEFAULT_RESTRICTED_HEADERS);
expectedRestrictedHeaders.removeAll(Arrays.asList("content-length", "upgrade"));
- validateRestrictedHeaders(jdkAsyncHttpClientBuilder, expectedRestrictedHeaders, 3);
+ validateRestrictedHeaders(jdkHttpClientBuilder, expectedRestrictedHeaders, 3);
}
@Test
@@ -302,17 +301,17 @@ void testAllowedHeadersFromConfiguration() {
EMPTY_SOURCE)
.build();
- JdkAsyncHttpClientBuilder jdkAsyncHttpClientBuilder = spy(
- new JdkAsyncHttpClientBuilder().configuration(configuration));
+ JdkHttpClientBuilder jdkHttpClientBuilder = spy(
+ new JdkHttpClientBuilder().configuration(configuration));
Properties properties = new Properties();
- when(jdkAsyncHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
+ when(jdkHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
Set expectedRestrictedHeaders = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- expectedRestrictedHeaders.addAll(JdkAsyncHttpClientBuilder.DEFAULT_RESTRICTED_HEADERS);
+ expectedRestrictedHeaders.addAll(com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder.DEFAULT_RESTRICTED_HEADERS);
expectedRestrictedHeaders.removeAll(Arrays.asList("content-length", "upgrade"));
- validateRestrictedHeaders(jdkAsyncHttpClientBuilder, expectedRestrictedHeaders, 3);
+ validateRestrictedHeaders(jdkHttpClientBuilder, expectedRestrictedHeaders, 3);
}
@Test
@@ -322,18 +321,18 @@ void testAllowedHeadersFromBoth() {
new TestConfigurationSource())
.build();
- JdkAsyncHttpClientBuilder jdkAsyncHttpClientBuilder = spy(
- new JdkAsyncHttpClientBuilder().configuration(configuration));
+ JdkHttpClientBuilder jdkHttpClientBuilder = spy(
+ new JdkHttpClientBuilder().configuration(configuration));
Properties properties = new Properties();
properties.put("jdk.httpclient.allowRestrictedHeaders", "host, connection, upgrade");
- when(jdkAsyncHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
+ when(jdkHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
Set expectedRestrictedHeaders = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- expectedRestrictedHeaders.addAll(JdkAsyncHttpClientBuilder.DEFAULT_RESTRICTED_HEADERS);
+ expectedRestrictedHeaders.addAll(com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder.DEFAULT_RESTRICTED_HEADERS);
expectedRestrictedHeaders.removeAll(Arrays.asList("content-length", "host", "connection", "upgrade"));
- validateRestrictedHeaders(jdkAsyncHttpClientBuilder, expectedRestrictedHeaders, 1);
+ validateRestrictedHeaders(jdkHttpClientBuilder, expectedRestrictedHeaders, 1);
}
@Test
@@ -341,14 +340,14 @@ void testAllowedHeadersFromSystemProperties() {
Properties properties = new Properties();
properties.setProperty("jdk.httpclient.allowRestrictedHeaders", "content-length, upgrade");
- JdkAsyncHttpClientBuilder jdkAsyncHttpClientBuilder = spy(new JdkAsyncHttpClientBuilder());
- when(jdkAsyncHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
+ JdkHttpClientBuilder jdkHttpClientBuilder = spy(new JdkHttpClientBuilder());
+ when(jdkHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
Set expectedRestrictedHeaders = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
- expectedRestrictedHeaders.addAll(JdkAsyncHttpClientBuilder.DEFAULT_RESTRICTED_HEADERS);
+ expectedRestrictedHeaders.addAll(com.azure.core.http.jdk.httpclient.JdkHttpClientBuilder.DEFAULT_RESTRICTED_HEADERS);
expectedRestrictedHeaders.removeAll(Arrays.asList("content-length", "upgrade"));
- validateRestrictedHeaders(jdkAsyncHttpClientBuilder, expectedRestrictedHeaders, 3);
+ validateRestrictedHeaders(jdkHttpClientBuilder, expectedRestrictedHeaders, 3);
}
@Test
@@ -356,10 +355,10 @@ void testCaseInsensitivity() {
Properties properties = new Properties();
properties.setProperty("jdk.httpclient.allowRestrictedHeaders", "content-LENGTH");
- JdkAsyncHttpClientBuilder jdkAsyncHttpClientBuilder = spy(new JdkAsyncHttpClientBuilder());
- when(jdkAsyncHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
+ JdkHttpClientBuilder jdkHttpClientBuilder = spy(new JdkHttpClientBuilder());
+ when(jdkHttpClientBuilder.getNetworkProperties()).thenReturn(properties);
- Set restrictedHeaders = jdkAsyncHttpClientBuilder.getRestrictedHeaders();
+ Set restrictedHeaders = jdkHttpClientBuilder.getRestrictedHeaders();
assertTrue(restrictedHeaders.contains("Connection"), "connection header is missing");
assertTrue(restrictedHeaders.contains("connection"), "connection header is missing");
assertTrue(restrictedHeaders.contains("CONNECTION"), "connection header is missing");
@@ -371,7 +370,7 @@ void testCaseInsensitivity() {
private static void configurationProxyTest(Configuration configuration) {
- HttpClient httpClient = new JdkAsyncHttpClientBuilder(java.net.http.HttpClient.newBuilder())
+ HttpClient httpClient = new JdkHttpClientBuilder(java.net.http.HttpClient.newBuilder())
.configuration(configuration)
.build();
// Url of the service behind proxy
@@ -381,9 +380,9 @@ private static void configurationProxyTest(Configuration configuration) {
.verifyComplete();
}
- private void validateRestrictedHeaders(JdkAsyncHttpClientBuilder jdkAsyncHttpClientBuilder,
+ private void validateRestrictedHeaders(JdkHttpClientBuilder jdkHttpClientBuilder,
Set expectedRestrictedHeaders, int expectedRestrictedHeadersSize) {
- Set restrictedHeaders = jdkAsyncHttpClientBuilder.getRestrictedHeaders();
+ Set restrictedHeaders = jdkHttpClientBuilder.getRestrictedHeaders();
assertEquals(expectedRestrictedHeadersSize, restrictedHeaders.size());
assertEquals(expectedRestrictedHeaders, restrictedHeaders);
}
diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientTests.java b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientTests.java
index 9fc5a3845f576..8c9b0506b55b4 100644
--- a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientTests.java
+++ b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/JdkHttpClientTests.java
@@ -110,15 +110,15 @@ public void testResponseLongBodyAsByteArraySync() throws IOException {
}
@Test
- public void testBufferResponseSync() throws IOException {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ public void testBufferResponseSync() {
+ HttpClient client = new JdkHttpClientBuilder().build();
HttpResponse response = doRequestSync(client, "/long").buffer();
Assertions.assertArrayEquals(LONG_BODY, response.getBodyAsBinaryData().toBytes());
}
@Test
public void testBufferedResponseSync() {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
HttpRequest request = new HttpRequest(HttpMethod.GET, url(server, "/long"));
HttpResponse response = client.sendSync(request, new Context("azure-eagerly-read-response", true));
Assertions.assertArrayEquals(LONG_BODY, response.getBodyAsBinaryData().toBytes());
@@ -146,7 +146,7 @@ public void testMultipleSubscriptionsEmitsError() {
@Test
public void testMultipleGetBodyBytesSync() {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
HttpResponse response = doRequestSync(client, "/short");
Mono responseBody = response.getBodyAsByteArray();
@@ -168,7 +168,7 @@ public void testMultipleGetBodyBytesSync() {
@Test
@Timeout(20)
public void testMultipleGetBinaryDataSync() {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
HttpResponse response = doRequestSync(client, "/short");
Assertions.assertArrayEquals(SHORT_BODY, response.getBodyAsBinaryData().toBytes());
@@ -190,7 +190,7 @@ public void testFlowableWhenServerReturnsBodyAndNoErrorsWhenHttp500Returned() {
@Test
@Timeout(20)
public void testFlowableWhenServerReturnsBodyAndNoErrorsWhenHttp500ReturnedSync() {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
HttpResponse response = doRequestSync(client, "/error");
assertEquals(500, response.getStatusCode());
assertEquals("error", response.getBodyAsString().block());
@@ -364,7 +364,7 @@ public void testRequestBodyEndsInErrorShouldPropagateToResponseSync() {
@Test
public void testServerShutsDownSocketShouldPushErrorToContentFlowable() {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
HttpRequest request = new HttpRequest(HttpMethod.GET, url(server, "/connectionClose"));
@@ -374,7 +374,7 @@ public void testServerShutsDownSocketShouldPushErrorToContentFlowable() {
@Test
public void testServerShutsDownSocketShouldPushErrorToContentSync() {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
HttpRequest request = new HttpRequest(HttpMethod.GET, url(server, "/connectionClose"));
assertThrows(UncheckedIOException.class, () -> client.sendSync(request, Context.NONE));
@@ -425,7 +425,7 @@ public void testConcurrentRequestsSync() {
}
private Mono getResponse(String path) {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
return doRequest(client, path);
}
@@ -449,14 +449,14 @@ private static byte[] createLongBody() {
}
private void checkBodyReceived(byte[] expectedBody, String path) {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
StepVerifier.create(doRequest(client, path).flatMap(HttpResponse::getBodyAsByteArray))
.assertNext(bytes -> Assertions.assertArrayEquals(expectedBody, bytes))
.verifyComplete();
}
private void checkBodyReceivedSync(byte[] expectedBody, String path) throws IOException {
- HttpClient client = new JdkAsyncHttpClientBuilder().build();
+ HttpClient client = new JdkHttpClientBuilder().build();
HttpResponse response = doRequestSync(client, path);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
WritableByteChannel body = Channels.newChannel(outStream);
diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/RestProxyWithHttpProxyJdkHttpClientTests.java b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/RestProxyWithHttpProxyJdkHttpClientTests.java
index bc416b32ad68d..1473d5d2ddc19 100644
--- a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/RestProxyWithHttpProxyJdkHttpClientTests.java
+++ b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/RestProxyWithHttpProxyJdkHttpClientTests.java
@@ -25,7 +25,7 @@ public static void getWireMockServer() {
}
@AfterAll
- public static void shutJdkAsyncHttpClientBuilderdownWireMockServer() {
+ public static void shutJdkHttpClientBuilderDownWireMockServer() {
if (server != null) {
server.shutdown();
}
@@ -39,6 +39,6 @@ protected int getWireMockPort() {
@Override
protected HttpClient createHttpClient() {
InetSocketAddress address = new InetSocketAddress("localhost", 8888);
- return new JdkAsyncHttpClientBuilder().proxy(new ProxyOptions(ProxyOptions.Type.HTTP, address)).build();
+ return new JdkHttpClientBuilder().proxy(new ProxyOptions(ProxyOptions.Type.HTTP, address)).build();
}
}
diff --git a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/RestProxyWithJdkHttpClientTests.java b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/RestProxyWithJdkHttpClientTests.java
index 61af11412ff0a..e28ce37a2cc29 100644
--- a/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/RestProxyWithJdkHttpClientTests.java
+++ b/sdk/core/azure-core-http-jdk-httpclient/src/test/java/com/azure/core/http/jdk/httpclient/RestProxyWithJdkHttpClientTests.java
@@ -36,6 +36,6 @@ protected int getWireMockPort() {
@Override
protected HttpClient createHttpClient() {
- return new JdkAsyncHttpClientBuilder().build();
+ return new JdkHttpClientBuilder().build();
}
}
diff --git a/sdk/core/azure-core-http-netty/CHANGELOG.md b/sdk/core/azure-core-http-netty/CHANGELOG.md
index 8009abd04e9ef..2a70a2286fb2a 100644
--- a/sdk/core/azure-core-http-netty/CHANGELOG.md
+++ b/sdk/core/azure-core-http-netty/CHANGELOG.md
@@ -8,6 +8,8 @@
### Bugs Fixed
+- Fixed a bug where `HttpClientOptions.connectTimeout` wasn't being passed when using `HttpClientProvider(ClientOptions)`. ([#31079](https://github.com/Azure/azure-sdk-for-java/pull/31079))
+
### Other Changes
## 1.12.5 (2022-09-01)
diff --git a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/NettyAsyncHttpClientProvider.java b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/NettyAsyncHttpClientProvider.java
index 33fb181fc1c5d..fa76e471160bd 100644
--- a/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/NettyAsyncHttpClientProvider.java
+++ b/sdk/core/azure-core-http-netty/src/main/java/com/azure/core/http/netty/NettyAsyncHttpClientProvider.java
@@ -17,6 +17,7 @@ public final class NettyAsyncHttpClientProvider implements HttpClientProvider {
Configuration.getGlobalConfiguration().get("AZURE_ENABLE_HTTP_CLIENT_SHARING", Boolean.FALSE);
private final boolean enableHttpClientSharing;
private static final int DEFAULT_MAX_CONNECTIONS = 500;
+
// Enum Singleton Pattern
private enum GlobalNettyHttpClient {
HTTP_CLIENT(new NettyAsyncHttpClientBuilder().build());
@@ -33,8 +34,8 @@ private HttpClient getHttpClient() {
}
/**
- * For testing purpose only, assigning 'AZURE_ENABLE_HTTP_CLIENT_SHARING' to 'enableHttpClientSharing' for
- * 'final' modifier.
+ * For testing purpose only, assigning 'AZURE_ENABLE_HTTP_CLIENT_SHARING' to 'enableHttpClientSharing' for 'final'
+ * modifier.
*/
public NettyAsyncHttpClientProvider() {
enableHttpClientSharing = AZURE_ENABLE_HTTP_CLIENT_SHARING;
@@ -60,10 +61,11 @@ public HttpClient createInstance(HttpClientOptions clientOptions) {
NettyAsyncHttpClientBuilder builder = new NettyAsyncHttpClientBuilder();
builder = builder.proxy(clientOptions.getProxyOptions())
- .configuration(clientOptions.getConfiguration())
- .writeTimeout(clientOptions.getWriteTimeout())
- .responseTimeout(clientOptions.getResponseTimeout())
- .readTimeout(clientOptions.getReadTimeout());
+ .configuration(clientOptions.getConfiguration())
+ .connectTimeout(clientOptions.getConnectTimeout())
+ .writeTimeout(clientOptions.getWriteTimeout())
+ .responseTimeout(clientOptions.getResponseTimeout())
+ .readTimeout(clientOptions.getReadTimeout());
ConnectionProvider.Builder connectionProviderBuilder = ConnectionProvider.builder("azure-sdk");
connectionProviderBuilder.maxIdleTime(clientOptions.getConnectionIdleTimeout());
@@ -83,7 +85,7 @@ public HttpClient createInstance(HttpClientOptions clientOptions) {
// applications run and can lead to issues like this - https://github.com/Azure/azure-sdk-for-java/issues/26027
// So, we need to unfortunately hardcode the maxConnections to 500 (when user doesn't set it) to have
- // consistent configuration whether or not HttpClientOptions is set.
+ // consistent configuration whether HttpClientOptions is set.
connectionProviderBuilder.maxConnections(DEFAULT_MAX_CONNECTIONS);
}
diff --git a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientProviderTests.java b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientProviderTests.java
index 5b8fb4791e328..2643588a6af05 100644
--- a/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientProviderTests.java
+++ b/sdk/core/azure-core-http-netty/src/test/java/com/azure/core/http/netty/NettyAsyncHttpClientProviderTests.java
@@ -6,6 +6,7 @@
import com.azure.core.http.ProxyOptions;
import com.azure.core.util.Configuration;
import com.azure.core.util.HttpClientOptions;
+import io.netty.channel.ChannelOption;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import reactor.netty.transport.ProxyProvider;
@@ -72,6 +73,7 @@ public void optionsWithTimeouts() {
long expectedTimeout = 15000;
Duration timeout = Duration.ofMillis(expectedTimeout);
HttpClientOptions clientOptions = new HttpClientOptions()
+ .setConnectTimeout(timeout)
.setWriteTimeout(timeout)
.setResponseTimeout(timeout)
.setReadTimeout(timeout);
@@ -79,6 +81,9 @@ public void optionsWithTimeouts() {
NettyAsyncHttpClient httpClient = (NettyAsyncHttpClient) new NettyAsyncHttpClientProvider()
.createInstance(clientOptions);
+ Integer connectTimeout = (Integer) httpClient.nettyClient.configuration().options()
+ .get(ChannelOption.CONNECT_TIMEOUT_MILLIS);
+ assertEquals((int) expectedTimeout, connectTimeout.intValue());
assertEquals(expectedTimeout, httpClient.writeTimeout);
assertEquals(expectedTimeout, httpClient.responseTimeout);
assertEquals(expectedTimeout, httpClient.readTimeout);
diff --git a/sdk/core/azure-core-http-okhttp/CHANGELOG.md b/sdk/core/azure-core-http-okhttp/CHANGELOG.md
index 67a2de9e4c2ed..ef729a1b0d3a3 100644
--- a/sdk/core/azure-core-http-okhttp/CHANGELOG.md
+++ b/sdk/core/azure-core-http-okhttp/CHANGELOG.md
@@ -8,6 +8,8 @@
### Bugs Fixed
+- Fixed a bug where `HttpClientOptions.connectTimeout` wasn't being passed when using `HttpClientProvider(ClientOptions)`. ([#31079](https://github.com/Azure/azure-sdk-for-java/pull/31079))
+
### Other Changes
## 1.11.2 (2022-09-01)
diff --git a/sdk/core/azure-core-http-okhttp/src/main/java/com/azure/core/http/okhttp/OkHttpAsyncClientProvider.java b/sdk/core/azure-core-http-okhttp/src/main/java/com/azure/core/http/okhttp/OkHttpAsyncClientProvider.java
index 099ff2e986302..e166cbc73c92a 100644
--- a/sdk/core/azure-core-http-okhttp/src/main/java/com/azure/core/http/okhttp/OkHttpAsyncClientProvider.java
+++ b/sdk/core/azure-core-http-okhttp/src/main/java/com/azure/core/http/okhttp/OkHttpAsyncClientProvider.java
@@ -35,8 +35,8 @@ private HttpClient getHttpClient() {
}
/**
- * For testing purpose only, assigning 'AZURE_ENABLE_HTTP_CLIENT_SHARING' to 'enableHttpClientSharing' for
- * 'final' modifier.
+ * For testing purpose only, assigning 'AZURE_ENABLE_HTTP_CLIENT_SHARING' to 'enableHttpClientSharing' for 'final'
+ * modifier.
*/
public OkHttpAsyncClientProvider() {
enableHttpClientSharing = AZURE_ENABLE_HTTP_CLIENT_SHARING;
@@ -62,9 +62,10 @@ public HttpClient createInstance(HttpClientOptions clientOptions) {
OkHttpAsyncHttpClientBuilder builder = new OkHttpAsyncHttpClientBuilder();
builder = builder.proxy(clientOptions.getProxyOptions())
- .configuration(clientOptions.getConfiguration())
- .writeTimeout(clientOptions.getWriteTimeout())
- .readTimeout(clientOptions.getReadTimeout());
+ .configuration(clientOptions.getConfiguration())
+ .connectionTimeout(clientOptions.getConnectTimeout())
+ .writeTimeout(clientOptions.getWriteTimeout())
+ .readTimeout(clientOptions.getReadTimeout());
Integer poolSize = clientOptions.getMaximumConnectionPoolSize();
int maximumConnectionPoolSize = (poolSize != null && poolSize > 0)
diff --git a/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncClientProviderTests.java b/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncClientProviderTests.java
index e7ca8bf61dfa0..d5bee72ee1d7a 100644
--- a/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncClientProviderTests.java
+++ b/sdk/core/azure-core-http-okhttp/src/test/java/com/azure/core/http/okhttp/OkHttpAsyncClientProviderTests.java
@@ -71,6 +71,7 @@ public void optionsWithTimeouts() {
long expectedTimeout = 15000;
Duration timeout = Duration.ofMillis(expectedTimeout);
HttpClientOptions clientOptions = new HttpClientOptions()
+ .setConnectTimeout(timeout)
.setWriteTimeout(timeout)
.setResponseTimeout(timeout)
.setReadTimeout(timeout);
@@ -78,6 +79,7 @@ public void optionsWithTimeouts() {
OkHttpAsyncHttpClient httpClient = (OkHttpAsyncHttpClient) new OkHttpAsyncClientProvider()
.createInstance(clientOptions);
+ assertEquals(expectedTimeout, httpClient.httpClient.connectTimeoutMillis());
assertEquals(expectedTimeout, httpClient.httpClient.writeTimeoutMillis());
assertEquals(expectedTimeout, httpClient.httpClient.readTimeoutMillis());
}
diff --git a/sdk/core/azure-core-http-vertx/src/main/java/com/azure/core/http/vertx/VertxAsyncHttpClientProvider.java b/sdk/core/azure-core-http-vertx/src/main/java/com/azure/core/http/vertx/VertxAsyncHttpClientProvider.java
index b4c44c394d61e..047950c11826b 100644
--- a/sdk/core/azure-core-http-vertx/src/main/java/com/azure/core/http/vertx/VertxAsyncHttpClientProvider.java
+++ b/sdk/core/azure-core-http-vertx/src/main/java/com/azure/core/http/vertx/VertxAsyncHttpClientProvider.java
@@ -32,8 +32,8 @@ private HttpClient getHttpClient() {
}
/**
- * For testing purpose only, assigning 'AZURE_ENABLE_HTTP_CLIENT_SHARING' to 'enableHttpClientSharing' for
- * 'final' modifier.
+ * For testing purpose only, assigning 'AZURE_ENABLE_HTTP_CLIENT_SHARING' to 'enableHttpClientSharing' for 'final'
+ * modifier.
*/
public VertxAsyncHttpClientProvider() {
enableHttpClientSharing = AZURE_ENABLE_HTTP_CLIENT_SHARING;