Skip to content

Commit c18571c

Browse files
[Java] Allow configuration of OkHttpClient.Builder (#23822)
* start * comment * remove ctor * unused import * fb * Update src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/HttpHubConnectionBuilder.java * remove unused param
1 parent 0a61165 commit c18571c

File tree

4 files changed

+27
-16
lines changed

4 files changed

+27
-16
lines changed

src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/DefaultHttpClient.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@
1919
final class DefaultHttpClient extends HttpClient {
2020
private OkHttpClient client = null;
2121

22-
public DefaultHttpClient() {
23-
this(0, null);
22+
public DefaultHttpClient(Action1<OkHttpClient.Builder> configureBuilder) {
23+
this(null, configureBuilder);
2424
}
2525

2626
public DefaultHttpClient cloneWithTimeOut(int timeoutInMilliseconds) {
2727
OkHttpClient newClient = client.newBuilder().readTimeout(timeoutInMilliseconds, TimeUnit.MILLISECONDS)
2828
.build();
29-
return new DefaultHttpClient(timeoutInMilliseconds, newClient);
29+
return new DefaultHttpClient(newClient, null);
3030
}
3131

3232
@Override
@@ -36,7 +36,7 @@ public void close() {
3636
}
3737
}
3838

39-
public DefaultHttpClient(int timeoutInMilliseconds, OkHttpClient client) {
39+
public DefaultHttpClient(OkHttpClient client, Action1<OkHttpClient.Builder> configureBuilder) {
4040
if (client != null) {
4141
this.client = client;
4242
} else {
@@ -90,9 +90,10 @@ public List<Cookie> loadForRequest(HttpUrl url) {
9090
}
9191
});
9292

93-
if (timeoutInMilliseconds > 0) {
94-
builder.readTimeout(timeoutInMilliseconds, TimeUnit.MILLISECONDS);
93+
if (configureBuilder != null) {
94+
configureBuilder.invoke(builder);
9595
}
96+
9697
this.client = builder.build();
9798
}
9899
}

src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/HttpHubConnectionBuilder.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.Map;
88

99
import io.reactivex.Single;
10+
import okhttp3.OkHttpClient;
1011

1112
/**
1213
* A builder for configuring {@link HubConnection} instances.
@@ -20,6 +21,7 @@ public class HttpHubConnectionBuilder {
2021
private long handshakeResponseTimeout = 0;
2122
private Map<String, String> headers;
2223
private TransportEnum transportEnum;
24+
private Action1<OkHttpClient.Builder> configureBuilder;
2325

2426
HttpHubConnectionBuilder(String url) {
2527
this.url = url;
@@ -113,12 +115,25 @@ public HttpHubConnectionBuilder withHeader(String name, String value) {
113115
return this;
114116
}
115117

118+
/**
119+
* Sets a method that will be called when constructing the HttpClient to allow customization such as certificate validation, proxies, and cookies.
120+
* By default the client will have a cookie jar added and a read timeout for LongPolling.
121+
*
122+
* @param configureBuilder Callback for configuring the OkHttpClient.Builder.
123+
* @return This instance of the HttpHubConnectionBuilder.
124+
*/
125+
public HttpHubConnectionBuilder setHttpClientBuilderCallback(Action1<OkHttpClient.Builder> configureBuilder) {
126+
this.configureBuilder = configureBuilder;
127+
return this;
128+
}
129+
116130
/**
117131
* Builds a new instance of {@link HubConnection}.
118132
*
119133
* @return A new instance of {@link HubConnection}.
120134
*/
121135
public HubConnection build() {
122-
return new HubConnection(url, transport, skipNegotiate, httpClient, accessTokenProvider, handshakeResponseTimeout, headers, transportEnum);
136+
return new HubConnection(url, transport, skipNegotiate, httpClient, accessTokenProvider,
137+
handshakeResponseTimeout, headers, transportEnum, configureBuilder);
123138
}
124139
}

src/SignalR/clients/java/signalr/src/main/java/com/microsoft/signalr/HubConnection.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import io.reactivex.Observable;
2121
import io.reactivex.Single;
2222
import io.reactivex.subjects.*;
23+
import okhttp3.OkHttpClient;
2324

2425
/**
2526
* A connection used to invoke hub methods on a SignalR Server.
@@ -126,7 +127,8 @@ Transport getTransport() {
126127
}
127128

128129
HubConnection(String url, Transport transport, boolean skipNegotiate, HttpClient httpClient,
129-
Single<String> accessTokenProvider, long handshakeResponseTimeout, Map<String, String> headers, TransportEnum transportEnum) {
130+
Single<String> accessTokenProvider, long handshakeResponseTimeout, Map<String, String> headers, TransportEnum transportEnum,
131+
Action1<OkHttpClient.Builder> configureBuilder) {
130132
if (url == null || url.isEmpty()) {
131133
throw new IllegalArgumentException("A valid url is required.");
132134
}
@@ -143,7 +145,7 @@ Transport getTransport() {
143145
if (httpClient != null) {
144146
this.httpClient = httpClient;
145147
} else {
146-
this.httpClient = new DefaultHttpClient();
148+
this.httpClient = new DefaultHttpClient(configureBuilder);
147149
}
148150

149151
if (transport != null) {

src/SignalR/clients/java/signalr/src/test/java/com/microsoft/signalr/WebSocketTransportTest.java

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,6 @@
1616
import io.reactivex.Single;
1717

1818
class WebSocketTransportTest {
19-
// @Test Skipping until we add functional test support
20-
public void WebSocketThrowsIfItCantConnect() {
21-
Transport transport = new WebSocketTransport(new HashMap<>(), new DefaultHttpClient());
22-
RuntimeException exception = assertThrows(RuntimeException.class, () -> transport.start("http://url.fake.example").blockingAwait(1, TimeUnit.SECONDS));
23-
assertEquals("There was an error starting the WebSocket transport.", exception.getMessage());
24-
}
25-
2619
@Test
2720
public void CanPassNullExitCodeToOnClosed() {
2821
WebSocketTransport transport = new WebSocketTransport(new HashMap<>(), new WebSocketTestHttpClient());

0 commit comments

Comments
 (0)