Skip to content
This repository was archived by the owner on May 28, 2018. It is now read-only.

Commit ec8d5ff

Browse files
author
Marek Potociar
committed
Fixed J-377: Obtaining SSL context in connectors.
- Unified way how SSL context is configured in Jersey connectors. - Deprecated custom connector properties & updated migration guide. - A side fix: added a common default chunk size for Jersey connectors. Change-Id: Ifbbb977512b4fb4af2d7584a823e5769483ccc44 Signed-off-by: Marek Potociar <[email protected]>
1 parent 303742e commit ec8d5ff

File tree

38 files changed

+460
-1100
lines changed

38 files changed

+460
-1100
lines changed

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
33
*
4-
* Copyright (c) 2013-2014 Oracle and/or its affiliates. All rights reserved.
4+
* Copyright (c) 2013-2015 Oracle and/or its affiliates. All rights reserved.
55
*
66
* The contents of this file are subject to the terms of either the GNU
77
* General Public License Version 2 only ("GPL") or the Common Development
@@ -64,7 +64,10 @@ public final class ApacheClientProperties {
6464
* A default value is not set.
6565
* <p/>
6666
* The name of the configuration property is <tt>{@value}</tt>.
67+
*
68+
* @deprecated Set the SSL configuration on the JAX-RS {@link javax.ws.rs.client.ClientBuilder}.
6769
*/
70+
@Deprecated
6871
public static final String SSL_CONFIG = "jersey.config.apache.client.ssl.sslConfig";
6972

7073
/**

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

Lines changed: 65 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
33
*
4-
* Copyright (c) 2010-2014 Oracle and/or its affiliates. All rights reserved.
4+
* Copyright (c) 2010-2015 Oracle and/or its affiliates. All rights reserved.
55
*
66
* The contents of this file are subject to the terms of either the GNU
77
* General Public License Version 2 only ("GPL") or the Common Development
@@ -57,6 +57,7 @@
5757
import java.util.logging.Logger;
5858

5959
import javax.ws.rs.ProcessingException;
60+
import javax.ws.rs.client.Client;
6061
import javax.ws.rs.core.Configuration;
6162
import javax.ws.rs.core.HttpHeaders;
6263
import javax.ws.rs.core.MultivaluedMap;
@@ -203,92 +204,81 @@ class ApacheConnector implements Connector {
203204
/**
204205
* Create the new Apache HTTP Client connector.
205206
*
207+
* @param client JAX-RS client instance for which the connector is being created.
206208
* @param config client configuration.
207209
*/
208-
ApacheConnector(final Configuration config) {
209-
Object reqConfig = null;
210-
211-
if (config != null) {
212-
final Object connectionManager = config.getProperties().get(ApacheClientProperties.CONNECTION_MANAGER);
213-
214-
if (connectionManager != null) {
215-
if (!(connectionManager instanceof HttpClientConnectionManager)) {
216-
LOGGER.log(
217-
Level.WARNING,
218-
LocalizationMessages.IGNORING_VALUE_OF_PROPERTY(
219-
ApacheClientProperties.CONNECTION_MANAGER,
220-
connectionManager.getClass().getName(),
221-
HttpClientConnectionManager.class.getName())
222-
);
223-
}
210+
ApacheConnector(final Client client, final Configuration config) {
211+
final Object connectionManager = config.getProperties().get(ApacheClientProperties.CONNECTION_MANAGER);
212+
if (connectionManager != null) {
213+
if (!(connectionManager instanceof HttpClientConnectionManager)) {
214+
LOGGER.log(
215+
Level.WARNING,
216+
LocalizationMessages.IGNORING_VALUE_OF_PROPERTY(
217+
ApacheClientProperties.CONNECTION_MANAGER,
218+
connectionManager.getClass().getName(),
219+
HttpClientConnectionManager.class.getName())
220+
);
224221
}
222+
}
225223

226-
reqConfig = config.getProperties().get(ApacheClientProperties.REQUEST_CONFIG);
227-
if (reqConfig != null) {
228-
if (!(reqConfig instanceof RequestConfig)) {
229-
LOGGER.log(
230-
Level.WARNING,
231-
LocalizationMessages.IGNORING_VALUE_OF_PROPERTY(
232-
ApacheClientProperties.REQUEST_CONFIG,
233-
reqConfig.getClass().getName(),
234-
RequestConfig.class.getName())
235-
);
236-
reqConfig = null;
237-
}
224+
Object reqConfig = config.getProperties().get(ApacheClientProperties.REQUEST_CONFIG);
225+
if (reqConfig != null) {
226+
if (!(reqConfig instanceof RequestConfig)) {
227+
LOGGER.log(
228+
Level.WARNING,
229+
LocalizationMessages.IGNORING_VALUE_OF_PROPERTY(
230+
ApacheClientProperties.REQUEST_CONFIG,
231+
reqConfig.getClass().getName(),
232+
RequestConfig.class.getName())
233+
);
234+
reqConfig = null;
238235
}
239236
}
240237

241-
final SSLContext sslContext = getSslContext(config);
238+
final SSLContext sslContext = getSslContext(client, config);
242239
final HttpClientBuilder clientBuilder = HttpClientBuilder.create();
243240

244241
clientBuilder.setConnectionManager(getConnectionManager(config, sslContext));
245242
clientBuilder.setSslcontext(sslContext);
246243

247244
final RequestConfig.Builder requestConfigBuilder = RequestConfig.custom();
248245

249-
int connectTimeout = 0;
250-
int socketTimeout = 0;
251-
boolean ignoreCookies = false;
252-
if (config != null) {
253-
connectTimeout = ClientProperties.getValue(config.getProperties(), ClientProperties.CONNECT_TIMEOUT, 0);
254-
socketTimeout = ClientProperties.getValue(config.getProperties(), ClientProperties.READ_TIMEOUT, 0);
255-
ignoreCookies = PropertiesHelper.isProperty(config.getProperties(), ApacheClientProperties.DISABLE_COOKIES);
256-
257-
final Object credentialsProvider = config.getProperty(ApacheClientProperties.CREDENTIALS_PROVIDER);
258-
if (credentialsProvider != null && (credentialsProvider instanceof CredentialsProvider)) {
259-
clientBuilder.setDefaultCredentialsProvider((CredentialsProvider) credentialsProvider);
260-
}
246+
final int connectTimeout = ClientProperties.getValue(config.getProperties(), ClientProperties.CONNECT_TIMEOUT, 0);
247+
final int socketTimeout = ClientProperties.getValue(config.getProperties(), ClientProperties.READ_TIMEOUT, 0);
248+
final boolean ignoreCookies = PropertiesHelper.isProperty(config.getProperties(), ApacheClientProperties.DISABLE_COOKIES);
261249

262-
final Object proxyUri;
263-
proxyUri = config.getProperty(ClientProperties.PROXY_URI);
264-
if (proxyUri != null) {
265-
final URI u = getProxyUri(proxyUri);
266-
final HttpHost proxy = new HttpHost(u.getHost(), u.getPort(), u.getScheme());
267-
final String userName;
268-
userName = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_USERNAME, String.class);
269-
if (userName != null) {
270-
final String password;
271-
password = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_PASSWORD, String.class);
272-
273-
if (password != null) {
274-
final CredentialsProvider credsProvider = new BasicCredentialsProvider();
275-
credsProvider.setCredentials(
276-
new AuthScope(u.getHost(), u.getPort()),
277-
new UsernamePasswordCredentials(userName, password)
278-
);
279-
clientBuilder.setDefaultCredentialsProvider(credsProvider);
280-
}
250+
final Object credentialsProvider = config.getProperty(ApacheClientProperties.CREDENTIALS_PROVIDER);
251+
if (credentialsProvider != null && (credentialsProvider instanceof CredentialsProvider)) {
252+
clientBuilder.setDefaultCredentialsProvider((CredentialsProvider) credentialsProvider);
253+
}
254+
255+
final Object proxyUri;
256+
proxyUri = config.getProperty(ClientProperties.PROXY_URI);
257+
if (proxyUri != null) {
258+
final URI u = getProxyUri(proxyUri);
259+
final HttpHost proxy = new HttpHost(u.getHost(), u.getPort(), u.getScheme());
260+
final String userName;
261+
userName = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_USERNAME, String.class);
262+
if (userName != null) {
263+
final String password;
264+
password = ClientProperties.getValue(config.getProperties(), ClientProperties.PROXY_PASSWORD, String.class);
265+
266+
if (password != null) {
267+
final CredentialsProvider credsProvider = new BasicCredentialsProvider();
268+
credsProvider.setCredentials(
269+
new AuthScope(u.getHost(), u.getPort()),
270+
new UsernamePasswordCredentials(userName, password)
271+
);
272+
clientBuilder.setDefaultCredentialsProvider(credsProvider);
281273
}
282-
clientBuilder.setProxy(proxy);
283274
}
284-
285-
final Boolean preemptiveBasicAuthProperty = (Boolean) config.getProperties()
286-
.get(ApacheClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION);
287-
this.preemptiveBasicAuth = (preemptiveBasicAuthProperty != null) ? preemptiveBasicAuthProperty : false;
288-
} else {
289-
this.preemptiveBasicAuth = false;
275+
clientBuilder.setProxy(proxy);
290276
}
291277

278+
final Boolean preemptiveBasicAuthProperty = (Boolean) config.getProperties()
279+
.get(ApacheClientProperties.PREEMPTIVE_BASIC_AUTHENTICATION);
280+
this.preemptiveBasicAuth = (preemptiveBasicAuthProperty != null) ? preemptiveBasicAuthProperty : false;
281+
292282

293283
if (reqConfig != null) {
294284
final RequestConfig.Builder reqConfigBuilder = RequestConfig.copy((RequestConfig) reqConfig);
@@ -321,20 +311,16 @@ class ApacheConnector implements Connector {
321311
this.client = clientBuilder.build();
322312
}
323313

324-
private SSLContext getSslContext(final Configuration config) {
325-
if (config == null) {
326-
return null;
327-
}
328-
314+
private SSLContext getSslContext(final Client client, final Configuration config) {
329315
final SslConfigurator sslConfigurator = ApacheClientProperties.getValue(
330316
config.getProperties(),
331317
ApacheClientProperties.SSL_CONFIG,
332318
SslConfigurator.class);
333319

334-
return sslConfigurator != null ? sslConfigurator.createSSLContext() : null;
320+
return sslConfigurator != null ? sslConfigurator.createSSLContext() : client.getSslContext();
335321
}
336322

337-
HttpClientConnectionManager getConnectionManager(final Configuration config, final SSLContext sslContext) {
323+
private HttpClientConnectionManager getConnectionManager(final Configuration config, final SSLContext sslContext) {
338324
final Object cmObject = config.getProperties().get(ApacheClientProperties.CONNECTION_MANAGER);
339325

340326
// Connection manager from configuration.
@@ -397,7 +383,7 @@ private HttpClientConnectionManager createConnectionManager(
397383
.build();
398384

399385
final Integer chunkSize = ClientProperties.getValue(config.getProperties(),
400-
ClientProperties.CHUNKED_ENCODING_SIZE, 4096, Integer.class);
386+
ClientProperties.CHUNKED_ENCODING_SIZE, ClientProperties.DEFAULT_CHUNK_SIZE, Integer.class);
401387

402388
final PoolingHttpClientConnectionManager connectionManager =
403389
new PoolingHttpClientConnectionManager(registry, new ConnectionFactory(chunkSize));
@@ -507,7 +493,7 @@ public ClientResponse apply(final ClientRequest clientRequest) throws Processing
507493

508494

509495
try {
510-
responseContext.setEntityStream(new HttpClientResponseInputStream(response));
496+
responseContext.setEntityStream(new HttpClientResponseInputStream(getInputStream(response)));
511497
} catch (final IOException e) {
512498
LOGGER.log(Level.SEVERE, null, e);
513499
}
@@ -638,8 +624,8 @@ private static Map<String, String> writeOutBoundHeaders(final MultivaluedMap<Str
638624

639625
private static final class HttpClientResponseInputStream extends FilterInputStream {
640626

641-
HttpClientResponseInputStream(final CloseableHttpResponse response) throws IOException {
642-
super(getInputStream(response));
627+
HttpClientResponseInputStream(final InputStream inputStream) throws IOException {
628+
super(inputStream);
643629
}
644630

645631
@Override

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

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,16 @@
3939
*/
4040
package org.glassfish.jersey.apache.connector;
4141

42-
import org.apache.http.client.CookieStore;
43-
import org.apache.http.client.HttpClient;
42+
import javax.ws.rs.client.Client;
43+
import javax.ws.rs.core.Configurable;
44+
import javax.ws.rs.core.Configuration;
45+
4446
import org.glassfish.jersey.client.Initializable;
4547
import org.glassfish.jersey.client.spi.Connector;
4648
import org.glassfish.jersey.client.spi.ConnectorProvider;
4749

48-
import javax.ws.rs.client.Client;
49-
import javax.ws.rs.core.Configurable;
50-
import javax.ws.rs.core.Configuration;
50+
import org.apache.http.client.CookieStore;
51+
import org.apache.http.client.HttpClient;
5152

5253
/**
5354
* Connector provider for Jersey {@link Connector connectors} that utilize
@@ -112,7 +113,7 @@ public class ApacheConnectorProvider implements ConnectorProvider {
112113

113114
@Override
114115
public Connector getConnector(final Client client, final Configuration runtimeConfig) {
115-
return new ApacheConnector(runtimeConfig);
116+
return new ApacheConnector(client, runtimeConfig);
116117
}
117118

118119
/**

connectors/apache-connector/src/test/java/org/glassfish/jersey/apache/connector/ssl/AuthenticationException.java

Lines changed: 0 additions & 60 deletions
This file was deleted.

0 commit comments

Comments
 (0)