Skip to content

Commit ca20347

Browse files
authored
fix: java http client requester with HttpClient.Builder (#776)
1 parent 0af7adf commit ca20347

File tree

5 files changed

+84
-8
lines changed

5 files changed

+84
-8
lines changed

.circleci/config.yml

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,25 @@ jobs:
6161
paths:
6262
- "~/.m2"
6363

64+
test-java-17:
65+
docker:
66+
- image: cimg/openjdk:17.0
67+
steps:
68+
- checkout
69+
- restore_cache:
70+
key: mvn-cache-11
71+
- credentials
72+
- run:
73+
name: "Compile project"
74+
command: mvn clean compile
75+
- run:
76+
name: "Run the tests"
77+
command: mvn clean test
78+
- save_cache:
79+
key: mvn-cache-11
80+
paths:
81+
- "~/.m2"
82+
6483
release:
6584
docker:
6685
- image: cimg/openjdk:11.0
@@ -104,11 +123,18 @@ workflows:
104123
filters:
105124
tags:
106125
only: /.*/
126+
- test-java-17:
127+
requires:
128+
- test-java-11
129+
filters:
130+
tags:
131+
only: /.*/
107132
- release:
108133
requires:
109134
- format
110135
- test-java-8
111136
- test-java-11
137+
- test-java-17
112138
filters:
113139
tags:
114140
only: /^[1-9]+.[0-9]+.[0-9]+.*/

algoliasearch-java-net/src/main/java/com/algolia/search/JavaNetHttpRequester.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,25 @@ public final class JavaNetHttpRequester implements HttpRequester {
3636
* @param config HTTPClient agnostic Algolia's configuration.
3737
*/
3838
public JavaNetHttpRequester(@Nonnull ConfigBase config) {
39+
this(
40+
config,
41+
config.getUseSystemProxy()
42+
? HttpClient.newBuilder().proxy(ProxySelector.getDefault())
43+
: HttpClient.newBuilder());
44+
}
45+
46+
/**
47+
* Build the reusable instance of httpClient with the given configuration.
48+
*
49+
* @param config HTTPClient agnostic Algolia's configuration
50+
* @param builder Builder for {@linkplain HttpClient HTTP Clients}
51+
*/
52+
public JavaNetHttpRequester(@Nonnull ConfigBase config, HttpClient.Builder builder) {
3953
client =
40-
HttpClient.newBuilder()
54+
builder
4155
.executor(config.getExecutor())
4256
.version(HttpClient.Version.HTTP_2)
4357
.followRedirects(HttpClient.Redirect.NEVER)
44-
.proxy(ProxySelector.getDefault())
4558
.connectTimeout(Duration.ofMillis(config.getConnectTimeOut()))
4659
.build();
4760
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.algolia.search;
2+
3+
import com.algolia.search.exceptions.AlgoliaRuntimeException;
4+
import java.security.NoSuchAlgorithmException;
5+
import javax.net.ssl.SSLContext;
6+
import javax.net.ssl.SSLParameters;
7+
8+
public class SSLUtils {
9+
10+
// Suppress default constructor for noninstantiability
11+
private SSLUtils() {
12+
throw new AssertionError();
13+
}
14+
15+
/** Default SSL parameters without specifying protocols */
16+
public static SSLParameters getDefaultSSLParameters() {
17+
SSLParameters sslParameters = getDefaultSSLContext().getSupportedSSLParameters();
18+
sslParameters.setProtocols(null);
19+
return sslParameters;
20+
}
21+
22+
/** Get default SSL Context */
23+
private static SSLContext getDefaultSSLContext() {
24+
try {
25+
return SSLContext.getDefault();
26+
} catch (NoSuchAlgorithmException ex) {
27+
throw new AlgoliaRuntimeException(ex);
28+
}
29+
}
30+
}

algoliasearch-java-net/src/test/java/com/algolia/search/analytics/AnalyticsTest.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import com.algolia.search.*;
77
import java.io.IOException;
8+
import java.net.http.HttpClient;
89
import org.junit.jupiter.api.AfterAll;
910
import org.junit.jupiter.api.extension.ExtendWith;
1011

@@ -14,7 +15,11 @@ class AnalyticsTest extends com.algolia.search.integration.analytics.AnalyticsTe
1415
private static AnalyticsConfig analyticsConfig =
1516
new AnalyticsConfig.Builder(ALGOLIA_APPLICATION_ID_1, ALGOLIA_ADMIN_KEY_1).build();
1617
private static AnalyticsClient analyticsClient =
17-
new AnalyticsClient(analyticsConfig, new JavaNetHttpRequester(analyticsConfig));
18+
new AnalyticsClient(
19+
analyticsConfig,
20+
new JavaNetHttpRequester(
21+
analyticsConfig,
22+
HttpClient.newBuilder().sslParameters(SSLUtils.getDefaultSSLParameters())));
1823

1924
AnalyticsTest() {
2025
super(IntegrationTestExtension.searchClient, analyticsClient);

algoliasearch-java-net/src/test/java/com/algolia/search/insights/InsightsTest.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@
33
import static com.algolia.search.integration.TestHelpers.ALGOLIA_ADMIN_KEY_1;
44
import static com.algolia.search.integration.TestHelpers.ALGOLIA_APPLICATION_ID_1;
55

6-
import com.algolia.search.InsightsClient;
7-
import com.algolia.search.InsightsConfig;
8-
import com.algolia.search.IntegrationTestExtension;
9-
import com.algolia.search.JavaNetHttpRequester;
6+
import com.algolia.search.*;
7+
import java.net.http.HttpClient;
108
import org.junit.jupiter.api.extension.ExtendWith;
119

1210
@ExtendWith({IntegrationTestExtension.class})
@@ -18,6 +16,10 @@ class InsightsTest extends com.algolia.search.integration.insights.InsightsTest
1816
InsightsTest() {
1917
super(
2018
IntegrationTestExtension.searchClient,
21-
new InsightsClient(config, new JavaNetHttpRequester(config)));
19+
new InsightsClient(
20+
config,
21+
new JavaNetHttpRequester(
22+
config,
23+
HttpClient.newBuilder().sslParameters(SSLUtils.getDefaultSSLParameters()))));
2224
}
2325
}

0 commit comments

Comments
 (0)