in rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java [470:616]
protected void connect(boolean output) throws IOException {
if (connectionFuture != null) {
return;
}
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) {
Credentials creds = super.getCredentials(authscope);
if (creds != null) {
return creds;
}
if (AsyncHTTPConduit.this.proxyAuthorizationPolicy != null
&& AsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName() != null) {
return new UsernamePasswordCredentials(AsyncHTTPConduit.this
.proxyAuthorizationPolicy.getUserName(),
AsyncHTTPConduit.this.proxyAuthorizationPolicy.getPassword());
}
return null;
}
};
ctx.setCredentialsProvider(credsProvider);
if ("https".equals(url.getScheme())) {
try {
RegistryBuilder<SchemeIOSessionStrategy> regBuilder
= RegistryBuilder.<SchemeIOSessionStrategy>create()
.register("http", NoopIOSessionStrategy.INSTANCE);
// 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);
regBuilder
.register("https",
new SSLIOSessionStrategy(sslcontext) {
@Override
protected void initializeEngine(SSLEngine engine) {
initializeSSLEngine(sslcontext, engine);
}
@Override
protected void verifySession(final HttpHost host,
final IOSession iosession,
final SSLSession sslsession) throws SSLException {
if (!verifier.verify(host.getHostName(), sslsession)) {
throw new SSLException("Could not verify host " + host.getHostName());
}
iosession.setAttribute("cxf.handshake.done", Boolean.TRUE);
setSSLSession(sslsession);
}
});
// See please https://issues.apache.org/jira/browse/HTTPASYNC-168, the attribute names
// are case-sensitive.
ctx.setAttribute("http.iosession-factory-registry", regBuilder.build());
ctx.setAttribute("http.ioSession-factory-registry", regBuilder.build());
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
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);
HttpAsyncClient c = getHttpAsyncClient();
Credentials creds = (Credentials)outMessage.getContextualProperty(Credentials.class.getName());
if (creds != null) {
credsProvider.setCredentials(AuthScope.ANY, creds);
ctx.setUserToken(creds.getUserPrincipal());
}
@SuppressWarnings("unchecked")
Registry<AuthSchemeProvider> asp = (Registry<AuthSchemeProvider>)outMessage
.getContextualProperty(AuthSchemeProvider.class.getName());
if (asp != null) {
ctx.setAuthSchemeRegistry(asp);
}
c.execute(new CXFHttpAsyncRequestProducer(entity, outbuf),
new CXFHttpAsyncResponseConsumer(this, inbuf, responseCallback),
ctx,
callback);
}