Skip to content

Commit 78b1741

Browse files
committed
Support other connectors
Signed-off-by: Jorge Bescos Gascon <jorge.bescos.gascon@oracle.com>
1 parent f850e5e commit 78b1741

File tree

7 files changed

+101
-98
lines changed

7 files changed

+101
-98
lines changed

connectors/apache-connector/src/main/java/org/glassfish/jersey/apache/connector/ApacheConnector.java

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.glassfish.jersey.client.ClientRequest;
5252
import org.glassfish.jersey.client.ClientResponse;
5353
import org.glassfish.jersey.client.RequestEntityProcessing;
54+
import org.glassfish.jersey.client.internal.HttpUrlConnector;
5455
import org.glassfish.jersey.client.spi.AsyncConnectorCallback;
5556
import org.glassfish.jersey.client.spi.Connector;
5657
import org.glassfish.jersey.internal.util.PropertiesHelper;
@@ -279,21 +280,18 @@ class ApacheConnector implements Connector {
279280
clientBuilder.setRetryHandler((HttpRequestRetryHandler) retryHandler);
280281
}
281282

282-
final Object proxyUri;
283-
proxyUri = config.getProperty(ClientProperties.PROXY_URI);
283+
URI proxyUri = HttpUrlConnector.getProxyUri(config);
284284
if (proxyUri != null) {
285-
final URI u = getProxyUri(proxyUri);
286-
final HttpHost proxy = new HttpHost(u.getHost(), u.getPort(), u.getScheme());
287-
final String userName;
288-
userName = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_USERNAME, String.class);
285+
HttpHost proxy = new HttpHost(proxyUri.getHost(), proxyUri.getPort(), proxyUri.getScheme());
286+
String userName = ClientProperties.getValue(config.getProperties(),
287+
ClientProperties.PROXY_USERNAME, "http.proxyUser");
289288
if (userName != null) {
290-
final String password;
291-
password = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_PASSWORD, String.class);
292-
289+
String password = ClientProperties.getValue(config.getProperties(),
290+
ClientProperties.PROXY_PASSWORD, "http.proxyPassword");
293291
if (password != null) {
294292
final CredentialsProvider credsProvider = new BasicCredentialsProvider();
295293
credsProvider.setCredentials(
296-
new AuthScope(u.getHost(), u.getPort()),
294+
new AuthScope(proxyUri.getHost(), proxyUri.getPort()),
297295
new UsernamePasswordCredentials(userName, password)
298296
);
299297
clientBuilder.setDefaultCredentialsProvider(credsProvider);

connectors/apache5-connector/src/main/java/org/glassfish/jersey/apache5/connector/Apache5Connector.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
import org.glassfish.jersey.client.ClientRequest;
9494
import org.glassfish.jersey.client.ClientResponse;
9595
import org.glassfish.jersey.client.RequestEntityProcessing;
96+
import org.glassfish.jersey.client.internal.HttpUrlConnector;
9697
import org.glassfish.jersey.client.spi.AsyncConnectorCallback;
9798
import org.glassfish.jersey.client.spi.Connector;
9899
import org.glassfish.jersey.internal.util.PropertiesHelper;
@@ -280,21 +281,19 @@ class Apache5Connector implements Connector {
280281
clientBuilder.setRetryStrategy((HttpRequestRetryStrategy) retryHandler);
281282
}
282283

283-
final Object proxyUri;
284-
proxyUri = config.getProperty(ClientProperties.PROXY_URI);
284+
URI proxyUri = HttpUrlConnector.getProxyUri(config);
285285
if (proxyUri != null) {
286-
final URI u = getProxyUri(proxyUri);
287-
final HttpHost proxy = new HttpHost(u.getScheme(), u.getHost(), u.getPort());
288-
final String userName;
289-
userName = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_USERNAME, String.class);
286+
HttpHost proxy = new HttpHost(proxyUri.getScheme(), proxyUri.getHost(), proxyUri.getPort());
287+
String userName = ClientProperties.getValue(config.getProperties(),
288+
ClientProperties.PROXY_USERNAME, "http.proxyUser");
290289
if (userName != null) {
291-
final String password;
292-
password = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_PASSWORD, String.class);
290+
String password = ClientProperties.getValue(config.getProperties(),
291+
ClientProperties.PROXY_PASSWORD, "http.proxyPassword");
293292

294293
if (password != null) {
295294
final CredentialsStore credsProvider = new BasicCredentialsProvider();
296295
credsProvider.setCredentials(
297-
new AuthScope(u.getHost(), u.getPort()),
296+
new AuthScope(proxyUri.getHost(), proxyUri.getPort()),
298297
new UsernamePasswordCredentials(userName, password.toCharArray())
299298
);
300299
clientBuilder.setDefaultCredentialsProvider(credsProvider);

connectors/jetty-connector/src/main/java/org/glassfish/jersey/jetty/connector/JettyConnector.java

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -31,37 +31,19 @@
3131
import java.util.Optional;
3232
import java.util.concurrent.CancellationException;
3333
import java.util.concurrent.CompletableFuture;
34-
import java.util.concurrent.ExecutionException;
3534
import java.util.concurrent.Future;
3635
import java.util.concurrent.TimeUnit;
37-
import java.util.concurrent.TimeoutException;
3836
import java.util.concurrent.atomic.AtomicBoolean;
3937
import java.util.concurrent.atomic.AtomicReference;
4038
import java.util.logging.Level;
4139
import java.util.logging.Logger;
4240

41+
import javax.net.ssl.SSLContext;
4342
import javax.ws.rs.ProcessingException;
4443
import javax.ws.rs.client.Client;
4544
import javax.ws.rs.core.Configuration;
4645
import javax.ws.rs.core.MultivaluedMap;
4746

48-
import javax.net.ssl.SSLContext;
49-
50-
import org.eclipse.jetty.client.util.BasicAuthentication;
51-
import org.eclipse.jetty.client.util.BytesContentProvider;
52-
import org.eclipse.jetty.client.util.FutureResponseListener;
53-
import org.eclipse.jetty.client.util.OutputStreamContentProvider;
54-
import org.glassfish.jersey.client.ClientProperties;
55-
import org.glassfish.jersey.client.ClientRequest;
56-
import org.glassfish.jersey.client.ClientResponse;
57-
import org.glassfish.jersey.client.spi.AsyncConnectorCallback;
58-
import org.glassfish.jersey.client.spi.Connector;
59-
import org.glassfish.jersey.internal.util.collection.ByteBufferInputStream;
60-
import org.glassfish.jersey.internal.util.collection.NonBlockingInputStream;
61-
import org.glassfish.jersey.message.internal.HeaderUtils;
62-
import org.glassfish.jersey.message.internal.OutboundMessageContext;
63-
import org.glassfish.jersey.message.internal.Statuses;
64-
6547
import org.eclipse.jetty.client.HttpClient;
6648
import org.eclipse.jetty.client.HttpProxy;
6749
import org.eclipse.jetty.client.ProxyConfiguration;
@@ -71,13 +53,28 @@
7153
import org.eclipse.jetty.client.api.Request;
7254
import org.eclipse.jetty.client.api.Response;
7355
import org.eclipse.jetty.client.api.Result;
56+
import org.eclipse.jetty.client.util.BasicAuthentication;
57+
import org.eclipse.jetty.client.util.BytesContentProvider;
58+
import org.eclipse.jetty.client.util.FutureResponseListener;
59+
import org.eclipse.jetty.client.util.OutputStreamContentProvider;
7460
import org.eclipse.jetty.http.HttpField;
7561
import org.eclipse.jetty.http.HttpFields;
7662
import org.eclipse.jetty.http.HttpHeader;
7763
import org.eclipse.jetty.util.HttpCookieStore;
7864
import org.eclipse.jetty.util.Jetty;
7965
import org.eclipse.jetty.util.ssl.SslContextFactory;
8066
import org.eclipse.jetty.util.thread.QueuedThreadPool;
67+
import org.glassfish.jersey.client.ClientProperties;
68+
import org.glassfish.jersey.client.ClientRequest;
69+
import org.glassfish.jersey.client.ClientResponse;
70+
import org.glassfish.jersey.client.internal.HttpUrlConnector;
71+
import org.glassfish.jersey.client.spi.AsyncConnectorCallback;
72+
import org.glassfish.jersey.client.spi.Connector;
73+
import org.glassfish.jersey.internal.util.collection.ByteBufferInputStream;
74+
import org.glassfish.jersey.internal.util.collection.NonBlockingInputStream;
75+
import org.glassfish.jersey.message.internal.HeaderUtils;
76+
import org.glassfish.jersey.message.internal.OutboundMessageContext;
77+
import org.glassfish.jersey.message.internal.Statuses;
8178

8279
/**
8380
* A {@link Connector} that utilizes the Jetty HTTP Client to send and receive
@@ -187,17 +184,17 @@ class JettyConnector implements Connector {
187184
auth.addAuthentication((BasicAuthentication) basicAuthProvider);
188185
}
189186

190-
final Object proxyUri = config.getProperties().get(ClientProperties.PROXY_URI);
187+
URI proxyUri = HttpUrlConnector.getProxyUri(config);
191188
if (proxyUri != null) {
192-
final URI u = getProxyUri(proxyUri);
193189
final ProxyConfiguration proxyConfig = client.getProxyConfiguration();
194-
proxyConfig.getProxies().add(new HttpProxy(u.getHost(), u.getPort()));
195-
196-
final Object proxyUsername = config.getProperties().get(ClientProperties.PROXY_USERNAME);
190+
proxyConfig.getProxies().add(new HttpProxy(proxyUri.getHost(), proxyUri.getPort()));
191+
String proxyUsername = ClientProperties.getValue(config.getProperties(),
192+
ClientProperties.PROXY_USERNAME, "http.proxyUser");
197193
if (proxyUsername != null) {
198-
final Object proxyPassword = config.getProperties().get(ClientProperties.PROXY_PASSWORD);
199-
auth.addAuthentication(new BasicAuthentication(u, "<<ANY_REALM>>",
200-
String.valueOf(proxyUsername), String.valueOf(proxyPassword)));
194+
String proxyPassword = ClientProperties.getValue(config.getProperties(),
195+
ClientProperties.PROXY_PASSWORD, "http.proxyPassword");
196+
auth.addAuthentication(new BasicAuthentication(proxyUri, "<<ANY_REALM>>",
197+
proxyUsername, proxyPassword));
201198
}
202199
}
203200

@@ -223,17 +220,6 @@ class JettyConnector implements Connector {
223220
this.cookieStore = client.getCookieStore();
224221
}
225222

226-
@SuppressWarnings("ChainOfInstanceofChecks")
227-
private static URI getProxyUri(final Object proxy) {
228-
if (proxy instanceof URI) {
229-
return (URI) proxy;
230-
} else if (proxy instanceof String) {
231-
return URI.create((String) proxy);
232-
} else {
233-
throw new ProcessingException(LocalizationMessages.WRONG_PROXY_URI_TYPE(ClientProperties.PROXY_URI));
234-
}
235-
}
236-
237223
/**
238224
* Get the {@link HttpClient}.
239225
*

core-client/src/main/java/org/glassfish/jersey/client/ClientProperties.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2012, 2021 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2012, 2022 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -520,4 +520,23 @@ public static <T> T getValue(final Map<String, ?> properties, final String key,
520520
public static <T> T getValue(final Map<String, ?> properties, final String key, final Class<T> type) {
521521
return PropertiesHelper.getValue(properties, key, type, null);
522522
}
523+
524+
/**
525+
* Get the value of the specified property. If null, it will obtain it from System property.
526+
* <p/>
527+
* If the property is not set the method will return {@code null}.
528+
*
529+
* @param properties Map of properties to get the property value from.
530+
* @param key Name of the property.
531+
* @param systemKey Name of the System property.
532+
* @return Value of the property or {@code null}.
533+
* @since 2.37
534+
*/
535+
public static String getValue(Map<String, ?> properties, String key, String systemKey) {
536+
String value = PropertiesHelper.getValue(properties, key, String.class, null);
537+
if (value == null) {
538+
value = System.getProperty(systemKey);
539+
}
540+
return value;
541+
}
523542
}

core-client/src/main/java/org/glassfish/jersey/client/internal/HttpUrlConnector.java

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ protected void secureConnection(final JerseyClient client, final HttpURLConnecti
319319
}
320320
}
321321

322-
private URI getProxyUri(Object proxy) {
322+
private static URI getProxyUriValue(Object proxy) {
323323
if (proxy instanceof URI) {
324324
return (URI) proxy;
325325
} else if (proxy instanceof String) {
@@ -329,16 +329,15 @@ private URI getProxyUri(Object proxy) {
329329
}
330330
}
331331

332-
private String getFromConfigOrSystem(ClientRequest request, String clientProperty, String systemProperty) {
333-
String result = request.resolveProperty(clientProperty, String.class);
334-
if (result == null) {
335-
result = System.getProperty(systemProperty);
336-
}
337-
return result;
338-
}
339-
340-
private URI getProxyUri(ClientRequest request) {
341-
Configuration config = request.getConfiguration();
332+
/**
333+
* Builds an URI from {@link ClientProperties#PROXY_URI}.
334+
* In case it is not set, it will build it from System properties http.proxyHost and http.proxyPort.
335+
* Otherwise returns null.
336+
*
337+
* @param config the configuration containing properties
338+
* @return the URI or null
339+
*/
340+
public static URI getProxyUri(Configuration config) {
342341
Object proxyUri = config.getProperty(ClientProperties.PROXY_URI);
343342
if (proxyUri == null) {
344343
String proxyHost = System.getProperty("http.proxyHost");
@@ -347,18 +346,20 @@ private URI getProxyUri(ClientRequest request) {
347346
return URI.create(proxyHost + ":" + proxyPort);
348347
}
349348
} else {
350-
return getProxyUri(proxyUri);
349+
return getProxyUriValue(proxyUri);
351350
}
352351
return null;
353352
}
354353

355354
private ClientResponse _apply(final ClientRequest request) throws IOException {
356355
final HttpURLConnection uc;
357356
Proxy proxy = null;
358-
URI proxyUri = getProxyUri(request);
357+
URI proxyUri = getProxyUri(request.getConfiguration());
359358
if (proxyUri != null) {
360-
String username = getFromConfigOrSystem(request, ClientProperties.PROXY_USERNAME, "http.proxyUser");
361-
String password = getFromConfigOrSystem(request, ClientProperties.PROXY_PASSWORD, "http.proxyPassword");
359+
String username = ClientProperties.getValue(request.getConfiguration().getProperties(),
360+
ClientProperties.PROXY_USERNAME, "http.proxyUser");
361+
String password = ClientProperties.getValue(request.getConfiguration().getProperties(),
362+
ClientProperties.PROXY_PASSWORD, "http.proxyPassword");
362363
if (username != null && password != null) {
363364
StringBuilder auth = new StringBuilder().append(username).append(":").append(password);
364365
String encoded = "Basic " + Base64.getEncoder().encodeToString(auth.toString().getBytes());

tests/e2e-client/src/test/java/org/glassfish/jersey/tests/e2e/client/connector/proxy/ProxySelectorTest.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,9 @@ public class ProxySelectorTest {
6666
@Parameterized.Parameters(name = "{index}: {0}")
6767
public static List<Object[]> testData() {
6868
return Arrays.asList(new Object[][]{
69-
// {ApacheConnectorProvider.class},
70-
// {Apache5ConnectorProvider.class},
71-
// {JettyConnectorProvider.class},
69+
{ApacheConnectorProvider.class},
70+
{Apache5ConnectorProvider.class},
71+
{JettyConnectorProvider.class},
7272
{NettyConnectorProvider.class},
7373
{HttpUrlConnectorProvider.class},
7474
});
@@ -103,8 +103,8 @@ public void testGet407() {
103103

104104
@Test
105105
public void testGetSuccess() {
106-
// Next applies for HttpUrlConnectorProvider. It seems Netty is not supporting user/pass in System properties
107-
if (connectorProvider.getClass() == HttpUrlConnectorProvider.class) {
106+
// It seems Netty is not supporting user/pass in System properties
107+
if (connectorProvider.getClass() != NettyConnectorProvider.class) {
108108
try {
109109
System.setProperty("http.proxyUser", PROXY_USERNAME);
110110
System.setProperty("http.proxyPassword", PROXY_PASSWORD);

tests/integration/jersey-4003/src/test/java/org/glassfish/jersey/tests/integration/jersey4003/LostResponseTest.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020 Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2022 Oracle and/or its affiliates. All rights reserved.
33
*
44
* This program and the accompanying materials are made available under the
55
* terms of the Eclipse Public License v. 2.0, which is available at
@@ -16,28 +16,11 @@
1616

1717
package org.glassfish.jersey.tests.integration.jersey4003;
1818

19-
import org.glassfish.jersey.client.ClientConfig;
20-
import org.glassfish.jersey.client.HttpUrlConnectorProvider;
21-
import org.glassfish.jersey.client.JerseyClientBuilder;
22-
import org.glassfish.jersey.client.JerseyCompletionStageRxInvoker;
23-
24-
import org.junit.Assert;
25-
import org.junit.Before;
26-
import org.junit.Test;
27-
28-
import org.mockito.Mockito;
29-
30-
import javax.ws.rs.client.Client;
31-
import javax.ws.rs.client.Entity;
32-
import javax.ws.rs.client.InvocationCallback;
33-
import javax.ws.rs.client.ResponseProcessingException;
34-
import javax.ws.rs.core.GenericType;
35-
import javax.ws.rs.core.MediaType;
36-
import javax.ws.rs.core.Response;
3719
import java.io.ByteArrayInputStream;
3820
import java.io.IOException;
3921
import java.io.OutputStream;
4022
import java.net.HttpURLConnection;
23+
import java.net.Proxy;
4124
import java.net.URL;
4225
import java.util.concurrent.CompletionStage;
4326
import java.util.concurrent.CountDownLatch;
@@ -46,6 +29,23 @@
4629
import java.util.concurrent.TimeUnit;
4730
import java.util.concurrent.atomic.AtomicReference;
4831

32+
import javax.ws.rs.client.Client;
33+
import javax.ws.rs.client.Entity;
34+
import javax.ws.rs.client.InvocationCallback;
35+
import javax.ws.rs.client.ResponseProcessingException;
36+
import javax.ws.rs.core.GenericType;
37+
import javax.ws.rs.core.MediaType;
38+
import javax.ws.rs.core.Response;
39+
40+
import org.glassfish.jersey.client.ClientConfig;
41+
import org.glassfish.jersey.client.HttpUrlConnectorProvider;
42+
import org.glassfish.jersey.client.JerseyClientBuilder;
43+
import org.glassfish.jersey.client.JerseyCompletionStageRxInvoker;
44+
import org.junit.Assert;
45+
import org.junit.Before;
46+
import org.junit.Test;
47+
import org.mockito.Mockito;
48+
4949
public class LostResponseTest {
5050

5151
private static final String DUMMY_URL = "http://foo";
@@ -59,7 +59,7 @@ public void setup() throws IOException {
5959
HttpUrlConnectorProvider.ConnectionFactory connectionFactory =
6060
Mockito.mock(HttpUrlConnectorProvider.ConnectionFactory.class);
6161
HttpURLConnection connection = Mockito.mock(HttpURLConnection.class);
62-
Mockito.when(connectionFactory.getConnection(Mockito.any(URL.class))).thenReturn(connection);
62+
Mockito.when(connectionFactory.getConnection(Mockito.any(URL.class), Mockito.any())).thenReturn(connection);
6363

6464
OutputStream outputStream = Mockito.mock(OutputStream.class);
6565
Mockito.when(connection.getOutputStream()).thenReturn(outputStream);

0 commit comments

Comments
 (0)