in rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java [482:624]
protected void connect(boolean output) throws IOException {
if (connectionFuture != null) {
return;
}
final CXFResponseCallback delegate = new CXFResponseCallback() {
@Override
public void responseReceived(HttpResponse response) {
setHttpResponse(response);
}
};
CXFResponseCallback responseCallback = delegate;
if (asyncHttpResponseWrapperFactory != null) {
final AsyncHttpResponseWrapper wrapper = asyncHttpResponseWrapperFactory.create();
if (wrapper != null) {
responseCallback = new CXFResponseCallback() {
@Override
public void responseReceived(HttpResponse response) {
wrapper.responseReceived(response, delegate::responseReceived);
}
};
}
}
FutureCallback<Boolean> callback = new FutureCallback<Boolean>() {
public void completed(Boolean result) {
}
public void failed(Exception ex) {
setException(ex);
inbuf.shutdown();
outbuf.shutdown();
}
public void cancelled() {
handleCancelled();
inbuf.shutdown();
outbuf.shutdown();
}
};
if (!output) {
entity.removeHeaders("Transfer-Encoding");
entity.removeHeaders("Content-Type");
entity.setEntity(null);
}
HttpClientContext ctx = HttpClientContext.create();
BasicCredentialsProvider credsProvider = new BasicCredentialsProvider() {
@Override
public Credentials getCredentials(final AuthScope authscope, HttpContext context) {
Credentials creds = super.getCredentials(authscope, context);
if (creds != null) {
return creds;
}
if (URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy != null
&& URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName() != null) {
return new UsernamePasswordCredentials(
URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName(),
URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getPassword().
toCharArray());
}
return null;
}
};
ctx.setCredentialsProvider(credsProvider);
TlsStrategy tlsStrategy = null;
if ("https".equals(url.getScheme())) {
try {
// check tlsClientParameters from message header
TLSClientParameters tlsClientParameters = outMessage.get(TLSClientParameters.class);
if (tlsClientParameters == null) {
tlsClientParameters = getTlsClientParameters();
}
if (tlsClientParameters == null) {
tlsClientParameters = new TLSClientParameters();
}
final SSLContext sslcontext = getSSLContext(tlsClientParameters);
final HostnameVerifier verifier = org.apache.cxf.transport.https.SSLUtils
.getHostnameVerifier(tlsClientParameters);
String[] cipherSuites =
SSLUtils.getCiphersuitesToInclude(tlsClientParameters.getCipherSuites(),
tlsClientParameters.getCipherSuitesFilter(),
sslcontext.getSocketFactory().getDefaultCipherSuites(),
SSLUtils.getSupportedCipherSuites(sslcontext),
LOG);
final String protocol = tlsClientParameters.getSecureSocketProtocol() != null ? tlsClientParameters
.getSecureSocketProtocol() : sslcontext.getProtocol();
final String[] protocols = findProtocols(protocol,
sslContext.getSupportedSSLParameters().getProtocols());
tlsStrategy = new DefaultClientTlsStrategy(sslcontext, protocols,
cipherSuites, SSLBufferMode.STATIC, verifier);
} catch (final GeneralSecurityException e) {
LOG.warning(e.getMessage());
}
}
if (sslURL != null && isSslTargetDifferent(sslURL, url)) {
sslURL = null;
sslState = null;
session = null;
}
if (tlsClientParameters != null && tlsClientParameters.hashCode() == lastTlsHash) {
ctx.setUserToken(sslState);
}
connectionFuture = new BasicFuture<>(callback);
// The HttpClientContext is not available in the AsyncClientConnectionOperator, so we have
// to provide our own TLS strategy on construction.
final HttpAsyncClient c = getHttpAsyncClient(tlsStrategy);
final Credentials creds = (Credentials)outMessage.getContextualProperty(Credentials.class.getName());
if (creds != null) {
credsProvider.setCredentials(new AuthScope(url.getHost(), url.getPort()), creds);
ctx.setUserToken(creds.getUserPrincipal());
}
@SuppressWarnings("unchecked")
Registry<AuthSchemeFactory> asp = (Registry<AuthSchemeFactory>)outMessage
.getContextualProperty(AuthSchemeFactory.class.getName());
if (asp != null) {
ctx.setAuthSchemeRegistry(asp);
}
c.execute(new CXFHttpAsyncRequestProducer(entity, outbuf),
new CXFHttpAsyncResponseConsumer(this, inbuf, responseCallback),
null, /* the push handler factory, optional and may be null */
ctx,
callback);
}