HttpClientContext to use instance variables for standard attributes

This commit is contained in:
Oleg Kalnichevski 2024-02-15 09:49:51 +01:00
parent f2b9a374d8
commit 762b18fe69
55 changed files with 424 additions and 260 deletions

View File

@ -68,7 +68,7 @@ public class HttpCacheContext extends HttpClientContext {
}
public static HttpCacheContext create() {
return new HttpCacheContext(new HttpClientContext());
return new HttpCacheContext();
}
public HttpCacheContext(final HttpContext context) {

View File

@ -804,7 +804,7 @@ class AsyncCachingExec extends CachingExecBase implements AsyncExecChainHandler
scope.route,
scope.originalRequest,
new ComplexFuture<>(null),
HttpClientContext.create(),
HttpCacheContext.create(),
scope.execRuntime.fork(),
scope.scheduler,
scope.execCount);

View File

@ -318,7 +318,7 @@ class CachingExec extends CachingExecBase implements ExecChainHandler {
scope.route,
scope.originalRequest,
scope.execRuntime.fork(null),
HttpClientContext.create());
HttpCacheContext.create());
if (LOG.isDebugEnabled()) {
LOG.debug("{} starting asynchronous revalidation exchange {}", exchangeId, revalidationExchangeId);
}

View File

@ -232,14 +232,14 @@ public class Executor {
final HttpClientContext localContext = HttpClientContext.create();
final CredentialsStore credentialsStoreSnapshot = credentialsStore;
if (credentialsStoreSnapshot != null) {
localContext.setAttribute(HttpClientContext.CREDS_PROVIDER, credentialsStoreSnapshot);
localContext.setCredentialsProvider(credentialsStoreSnapshot);
}
if (this.authCache != null) {
localContext.setAttribute(HttpClientContext.AUTH_CACHE, this.authCache);
localContext.setAuthCache(this.authCache);
}
final CookieStore cookieStoreSnapshot = cookieStore;
if (cookieStoreSnapshot != null) {
localContext.setAttribute(HttpClientContext.COOKIE_STORE, cookieStoreSnapshot);
localContext.setCookieStore(cookieStoreSnapshot);
}
return new Response(request.internalExecute(this.httpclient, localContext));
}

View File

@ -102,7 +102,7 @@ public class ContextBuilder extends AbstractClientContextBuilder<HttpClientConte
@Override
protected HttpClientContext createContext() {
return new HttpClientContext();
return HttpClientContext.create();
}
}

View File

@ -81,7 +81,7 @@ public interface AsyncExecChain {
this.route = Args.notNull(route, "Route");
this.originalRequest = Args.notNull(originalRequest, "Original request");
this.cancellableDependency = Args.notNull(cancellableDependency, "Dependency");
this.clientContext = clientContext != null ? clientContext : HttpClientContext.create();
this.clientContext = Args.notNull(clientContext, "HTTP context");
this.execRuntime = Args.notNull(execRuntime, "Exec runtime");
this.scheduler = scheduler;
this.execCount = execCount != null ? execCount : new AtomicInteger(1);

View File

@ -59,7 +59,7 @@ public interface ExecChain {
this.route = Args.notNull(route, "Route");
this.originalRequest = Args.notNull(originalRequest, "Original request");
this.execRuntime = Args.notNull(execRuntime, "Exec runtime");
this.clientContext = clientContext != null ? clientContext : HttpClientContext.create();
this.clientContext = Args.notNull(clientContext, "HTTP context");
}
}

View File

@ -77,7 +77,7 @@ public class DefaultAuthenticationStrategy implements AuthenticationStrategy {
Args.notNull(challengeType, "ChallengeType");
Args.notNull(challenges, "Map of auth challenges");
Args.notNull(context, "HTTP context");
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
final List<AuthScheme> options = new ArrayList<>();
@ -88,7 +88,7 @@ public class DefaultAuthenticationStrategy implements AuthenticationStrategy {
}
return options;
}
final RequestConfig config = clientContext.getRequestConfig();
final RequestConfig config = clientContext.getRequestConfigOrDefault();
Collection<String> authPrefs = challengeType == ChallengeType.TARGET ?
config.getTargetPreferredAuthSchemes() : config.getProxyPreferredAuthSchemes();
if (authPrefs == null) {

View File

@ -71,8 +71,8 @@ public class DefaultConnectionKeepAliveStrategy implements ConnectionKeepAliveSt
}
}
}
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final RequestConfig requestConfig = clientContext.getRequestConfig();
final HttpClientContext clientContext = HttpClientContext.cast(context);
final RequestConfig requestConfig = clientContext.getRequestConfigOrDefault();
return requestConfig.getConnectionKeepAlive();
}

View File

@ -69,7 +69,7 @@ public class DefaultUserTokenHandler implements UserTokenHandler {
@Override
public Object getUserToken(final HttpRoute route, final HttpRequest request, final HttpContext context) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final HttpHost target = request != null ? new HttpHost(request.getScheme(), request.getAuthority()) : route.getTargetHost();

View File

@ -29,7 +29,6 @@ package org.apache.hc.client5.http.impl.async;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadFactory;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.concurrent.Cancellable;
import org.apache.hc.core5.concurrent.ComplexFuture;
import org.apache.hc.core5.concurrent.FutureCallback;
@ -86,7 +85,7 @@ abstract class AbstractMinimalHttpAsyncClientBase extends AbstractHttpAsyncClien
}
public final Cancellable execute(final AsyncClientExchangeHandler exchangeHandler) {
return execute(exchangeHandler, null, HttpClientContext.create());
return execute(exchangeHandler, null, null);
}
public abstract Cancellable execute(

View File

@ -509,7 +509,7 @@ public final class AsyncConnectExec implements AsyncExecChainHandler {
final HttpHost proxy,
final HttpResponse response,
final HttpClientContext context) {
final RequestConfig config = context.getRequestConfig();
final RequestConfig config = context.getRequestConfigOrDefault();
if (config.isAuthenticationEnabled()) {
final boolean proxyAuthRequested = authenticator.isChallenged(proxy, ChallengeType.PROXY, response, proxyAuthExchange, context);

View File

@ -306,7 +306,7 @@ public final class AsyncProtocolExec implements AsyncExecChainHandler {
final String pathPrefix,
final HttpResponse response,
final HttpClientContext context) {
final RequestConfig config = context.getRequestConfig();
final RequestConfig config = context.getRequestConfigOrDefault();
if (config.isAuthenticationEnabled()) {
final boolean targetAuthRequested = authenticator.isChallenged(
target, ChallengeType.TARGET, response, targetAuthExchange, context);

View File

@ -118,7 +118,7 @@ public final class AsyncRedirectExec implements AsyncExecChainHandler {
final EntityDetails entityDetails) throws HttpException, IOException {
state.redirectURI = null;
final RequestConfig config = clientContext.getRequestConfig();
final RequestConfig config = clientContext.getRequestConfigOrDefault();
if (config.isRedirectsEnabled() && redirectStrategy.isRedirected(request, response, clientContext)) {
if (state.redirectCount >= state.maxRedirects) {
throw new RedirectException("Maximum redirects (" + state.maxRedirects + ") exceeded");
@ -263,11 +263,11 @@ public final class AsyncRedirectExec implements AsyncExecChainHandler {
RedirectLocations redirectLocations = clientContext.getRedirectLocations();
if (redirectLocations == null) {
redirectLocations = new RedirectLocations();
clientContext.setAttribute(HttpClientContext.REDIRECT_LOCATIONS, redirectLocations);
clientContext.setRedirectLocations(redirectLocations);
}
redirectLocations.clear();
final RequestConfig config = clientContext.getRequestConfig();
final RequestConfig config = clientContext.getRequestConfigOrDefault();
final State state = new State();
state.maxRedirects = config.getMaxRedirects() > 0 ? config.getMaxRedirects() : 50;

View File

@ -33,7 +33,6 @@ import org.apache.hc.client5.http.async.methods.SimpleHttpRequest;
import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
import org.apache.hc.client5.http.async.methods.SimpleRequestProducer;
import org.apache.hc.client5.http.async.methods.SimpleResponseConsumer;
import org.apache.hc.client5.http.protocol.HttpClientContext;
import org.apache.hc.core5.annotation.Contract;
import org.apache.hc.core5.annotation.ThreadingBehavior;
import org.apache.hc.core5.concurrent.FutureCallback;
@ -113,7 +112,7 @@ public abstract class CloseableHttpAsyncClient implements HttpAsyncClient, Modal
final FutureCallback<T> callback) {
Args.notNull(requestProducer, "Request producer");
Args.notNull(responseConsumer, "Response consumer");
return execute(requestProducer, responseConsumer, HttpClientContext.create(), callback);
return execute(requestProducer, responseConsumer, null, callback);
}
public final Future<SimpleHttpResponse> execute(
@ -127,7 +126,7 @@ public abstract class CloseableHttpAsyncClient implements HttpAsyncClient, Modal
public final Future<SimpleHttpResponse> execute(
final SimpleHttpRequest request,
final FutureCallback<SimpleHttpResponse> callback) {
return execute(request, HttpClientContext.create(), callback);
return execute(request, null, callback);
}
public abstract void register(String hostname, String uriPattern, Supplier<AsyncPushConsumer> supplier);

View File

@ -125,9 +125,8 @@ public class H2AsyncMainClientExec implements AsyncExecChainHandler {
@Override
public void produceRequest(final RequestChannel channel, final HttpContext context) throws HttpException, IOException {
clientContext.setAttribute(HttpClientContext.HTTP_ROUTE, route);
clientContext.setRequest(request);
clientContext.setRoute(route);
httpProcessor.process(request, entityProducer, clientContext);
channel.sendRequest(request, entityProducer, context);

View File

@ -148,7 +148,7 @@ class HttpAsyncMainClientExec implements AsyncExecChainHandler {
final RequestChannel channel,
final HttpContext context) throws HttpException, IOException {
clientContext.setAttribute(HttpClientContext.HTTP_ROUTE, route);
clientContext.setRoute(route);
clientContext.setRequest(request);
httpProcessor.process(request, entityProducer, clientContext);
@ -248,7 +248,7 @@ class HttpAsyncMainClientExec implements AsyncExecChainHandler {
Object userToken = clientContext.getUserToken();
if (userToken == null) {
userToken = userTokenHandler.getUserToken(route, request, clientContext);
clientContext.setAttribute(HttpClientContext.USER_TOKEN, userToken);
clientContext.setUserToken(userToken);
}
execRuntime.markConnectionReusable(userToken, keepAliveDuration);
if (entityDetails == null) {

View File

@ -84,6 +84,7 @@ abstract class InternalAbstractHttpAsyncClient extends AbstractHttpAsyncClientBa
private final static ThreadFactory SCHEDULER_THREAD_FACTORY = new DefaultThreadFactory("Scheduled-executor", true);
private static final Logger LOG = LoggerFactory.getLogger(InternalAbstractHttpAsyncClient.class);
private final AsyncExecChainElement execChain;
private final Lookup<CookieSpecFactory> cookieSpecRegistry;
private final Lookup<AuthSchemeFactory> authSchemeRegistry;
@ -165,20 +166,20 @@ abstract class InternalAbstractHttpAsyncClient extends AbstractHttpAsyncClientBa
}
private void setupContext(final HttpClientContext context) {
if (context.getAttribute(HttpClientContext.AUTHSCHEME_REGISTRY) == null) {
context.setAttribute(HttpClientContext.AUTHSCHEME_REGISTRY, authSchemeRegistry);
if (context.getAuthSchemeRegistry() == null) {
context.setAuthSchemeRegistry(authSchemeRegistry);
}
if (context.getAttribute(HttpClientContext.COOKIESPEC_REGISTRY) == null) {
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, cookieSpecRegistry);
if (context.getCookieSpecRegistry() == null) {
context.setCookieSpecRegistry(cookieSpecRegistry);
}
if (context.getAttribute(HttpClientContext.COOKIE_STORE) == null) {
context.setAttribute(HttpClientContext.COOKIE_STORE, cookieStore);
if (context.getCookieStore() == null) {
context.setCookieStore(cookieStore);
}
if (context.getAttribute(HttpClientContext.CREDS_PROVIDER) == null) {
context.setAttribute(HttpClientContext.CREDS_PROVIDER, credentialsProvider);
if (context.getCredentialsProvider() == null) {
context.setCredentialsProvider(credentialsProvider);
}
if (context.getAttribute(HttpClientContext.REQUEST_CONFIG) == null) {
context.setAttribute(HttpClientContext.REQUEST_CONFIG, defaultConfig);
if (context.getRequestConfig() == null) {
context.setRequestConfig(defaultConfig);
}
}
@ -199,7 +200,7 @@ abstract class InternalAbstractHttpAsyncClient extends AbstractHttpAsyncClientBa
if (!isRunning()) {
throw new CancellationException("Request execution cancelled");
}
final HttpClientContext clientContext = context != null ? HttpClientContext.adapt(context) : HttpClientContext.create();
final HttpClientContext clientContext = HttpClientContext.adapt(context);
requestProducer.sendRequest((request, entityDetails, c) -> {
RequestConfig requestConfig = null;

View File

@ -87,7 +87,7 @@ class InternalH2AsyncExecRuntime implements AsyncExecRuntime {
final HttpClientContext context,
final FutureCallback<AsyncExecRuntime> callback) {
if (sessionRef.get() == null) {
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
@SuppressWarnings("deprecation")
final Timeout connectTimeout = requestConfig.getConnectTimeout();
if (log.isDebugEnabled()) {
@ -183,7 +183,7 @@ class InternalH2AsyncExecRuntime implements AsyncExecRuntime {
return Operations.nonCancellable();
}
final HttpRoute route = endpoint.route;
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
@SuppressWarnings("deprecation")
final Timeout connectTimeout = requestConfig.getConnectTimeout();
if (log.isDebugEnabled()) {
@ -262,7 +262,7 @@ class InternalH2AsyncExecRuntime implements AsyncExecRuntime {
Command.Priority.NORMAL);
} else {
final HttpRoute route = endpoint.route;
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
@SuppressWarnings("deprecation")
final Timeout connectTimeout = requestConfig.getConnectTimeout();
connPool.getSession(route, connectTimeout, new FutureCallback<IOSession>() {

View File

@ -98,7 +98,7 @@ class InternalHttpAsyncExecRuntime implements AsyncExecRuntime {
final FutureCallback<AsyncExecRuntime> callback) {
if (endpointRef.get() == null) {
state = object;
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
final Timeout connectionRequestTimeout = requestConfig.getConnectionRequestTimeout();
if (log.isDebugEnabled()) {
log.debug("{} acquiring endpoint ({})", id, connectionRequestTimeout);
@ -208,7 +208,7 @@ class InternalHttpAsyncExecRuntime implements AsyncExecRuntime {
callback.completed(this);
return Operations.nonCancellable();
}
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
@SuppressWarnings("deprecation")
final Timeout connectTimeout = requestConfig.getConnectTimeout();
if (log.isDebugEnabled()) {
@ -280,13 +280,13 @@ class InternalHttpAsyncExecRuntime implements AsyncExecRuntime {
if (log.isDebugEnabled()) {
log.debug("{} start execution {}", ConnPoolSupport.getId(endpoint), id);
}
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
final Timeout responseTimeout = requestConfig.getResponseTimeout();
if (responseTimeout != null) {
endpoint.setSocketTimeout(responseTimeout);
}
endpoint.execute(id, exchangeHandler, context);
if (context.getRequestConfig().isHardCancellationEnabled()) {
if (context.getRequestConfigOrDefault().isHardCancellationEnabled()) {
return () -> {
exchangeHandler.cancel();
return true;

View File

@ -71,6 +71,7 @@ import org.apache.hc.core5.reactor.DefaultConnectingIOReactor;
import org.apache.hc.core5.reactor.IOEventHandlerFactory;
import org.apache.hc.core5.reactor.IOReactorConfig;
import org.apache.hc.core5.reactor.IOSession;
import org.apache.hc.core5.util.Args;
import org.apache.hc.core5.util.Timeout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -122,12 +123,13 @@ public final class MinimalH2AsyncClient extends AbstractMinimalHttpAsyncClientBa
final AsyncClientExchangeHandler exchangeHandler,
final HandlerFactory<AsyncPushConsumer> pushHandlerFactory,
final HttpContext context) {
Args.notNull(exchangeHandler, "Message exchange handler");
final ComplexCancellable cancellable = new ComplexCancellable();
try {
if (!isRunning()) {
throw new CancellationException("Request execution cancelled");
}
final HttpClientContext clientContext = context != null ? HttpClientContext.adapt(context) : HttpClientContext.create();
final HttpClientContext clientContext = HttpClientContext.adapt(context);
exchangeHandler.produceRequest((request, entityDetails, context1) -> {
RequestConfig requestConfig = null;
if (request instanceof Configurable) {
@ -136,7 +138,7 @@ public final class MinimalH2AsyncClient extends AbstractMinimalHttpAsyncClientBa
if (requestConfig != null) {
clientContext.setRequestConfig(requestConfig);
} else {
requestConfig = clientContext.getRequestConfig();
requestConfig = clientContext.getRequestConfigOrDefault();
}
@SuppressWarnings("deprecation")
final Timeout connectTimeout = requestConfig.getConnectTimeout();

View File

@ -205,7 +205,7 @@ public final class MinimalHttpAsyncClient extends AbstractMinimalHttpAsyncClient
public Future<AsyncClientEndpoint> lease(
final HttpHost host,
final FutureCallback<AsyncClientEndpoint> callback) {
return lease(host, HttpClientContext.create(), callback);
return lease(host, null, callback);
}
public Future<AsyncClientEndpoint> lease(
@ -213,14 +213,13 @@ public final class MinimalHttpAsyncClient extends AbstractMinimalHttpAsyncClient
final HttpContext context,
final FutureCallback<AsyncClientEndpoint> callback) {
Args.notNull(host, "Host");
Args.notNull(context, "HTTP context");
final BasicFuture<AsyncClientEndpoint> future = new BasicFuture<>(callback);
if (!isRunning()) {
future.failed(new CancellationException("Connection lease cancelled"));
return future;
}
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final RequestConfig requestConfig = clientContext.getRequestConfig();
final RequestConfig requestConfig = clientContext.getRequestConfigOrDefault();
final Timeout connectionRequestTimeout = requestConfig.getConnectionRequestTimeout();
@SuppressWarnings("deprecation")
final Timeout connectTimeout = requestConfig.getConnectTimeout();
@ -260,7 +259,7 @@ public final class MinimalHttpAsyncClient extends AbstractMinimalHttpAsyncClient
if (!isRunning()) {
throw new CancellationException("Request execution cancelled");
}
final HttpClientContext clientContext = context != null ? HttpClientContext.adapt(context) : HttpClientContext.create();
final HttpClientContext clientContext = HttpClientContext.adapt(context);
exchangeHandler.produceRequest((request, entityDetails, context1) -> {
RequestConfig requestConfig = null;
if (request instanceof Configurable) {
@ -269,7 +268,7 @@ public final class MinimalHttpAsyncClient extends AbstractMinimalHttpAsyncClient
if (requestConfig != null) {
clientContext.setRequestConfig(requestConfig);
} else {
requestConfig = clientContext.getRequestConfig();
requestConfig = clientContext.getRequestConfigOrDefault();
}
final Timeout connectionRequestTimeout = requestConfig.getConnectionRequestTimeout();
@SuppressWarnings("deprecation")
@ -456,7 +455,7 @@ public final class MinimalHttpAsyncClient extends AbstractMinimalHttpAsyncClient
final HttpContext context) {
Asserts.check(!released.get(), "Endpoint has already been released");
final HttpClientContext clientContext = context != null ? HttpClientContext.adapt(context) : HttpClientContext.create();
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final String exchangeId = ExecSupport.getNextExchangeId();
clientContext.setExchangeId(exchangeId);
if (LOG.isDebugEnabled()) {

View File

@ -62,7 +62,7 @@ public final class AuthCacheKeeper {
final String pathPrefix,
final AuthExchange authExchange,
final HttpContext context) {
clearCache(host, pathPrefix, HttpClientContext.adapt(context));
clearCache(host, pathPrefix, HttpClientContext.cast(context));
}
public void updateOnNoChallenge(final HttpHost host,
@ -70,7 +70,7 @@ public final class AuthCacheKeeper {
final AuthExchange authExchange,
final HttpContext context) {
if (authExchange.getState() == AuthExchange.State.SUCCESS) {
updateCache(host, pathPrefix, authExchange.getAuthScheme(), HttpClientContext.adapt(context));
updateCache(host, pathPrefix, authExchange.getAuthScheme(), HttpClientContext.cast(context));
}
}
@ -79,7 +79,7 @@ public final class AuthCacheKeeper {
final AuthExchange authExchange,
final HttpContext context) {
if (authExchange.getState() == AuthExchange.State.FAILURE) {
clearCache(host, pathPrefix, HttpClientContext.adapt(context));
clearCache(host, pathPrefix, HttpClientContext.cast(context));
}
}
@ -88,9 +88,9 @@ public final class AuthCacheKeeper {
final AuthExchange authExchange,
final HttpContext context) {
if (authExchange.getState() == AuthExchange.State.UNCHALLENGED) {
AuthScheme authScheme = loadFromCache(host, pathPrefix, HttpClientContext.adapt(context));
AuthScheme authScheme = loadFromCache(host, pathPrefix, HttpClientContext.cast(context));
if (authScheme == null && pathPrefix != null) {
authScheme = loadFromCache(host, null, HttpClientContext.adapt(context));
authScheme = loadFromCache(host, null, HttpClientContext.cast(context));
}
if (authScheme != null) {
authExchange.select(authScheme);

View File

@ -162,7 +162,7 @@ public class BasicScheme implements AuthScheme, StateHolder<BasicScheme.State>,
}
if (LOG.isDebugEnabled()) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
LOG.debug("{} No credentials found for auth scope [{}]", exchangeId, authScope);
}

View File

@ -141,7 +141,7 @@ public class BearerScheme implements AuthScheme, StateHolder<BearerScheme.State>
}
if (LOG.isDebugEnabled()) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
LOG.debug("{} No credentials found for auth scope [{}]", exchangeId, authScope);
}

View File

@ -227,7 +227,7 @@ public class DigestScheme implements AuthScheme, Serializable {
}
if (LOG.isDebugEnabled()) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
LOG.debug("{} No credentials found for auth scope [{}]", exchangeId, authScope);
}

View File

@ -118,7 +118,7 @@ public abstract class GGSSchemeBase implements AuthScheme {
state = State.CHALLENGE_RECEIVED;
} else {
if (LOG.isDebugEnabled()) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
LOG.debug("{} Authentication already attempted", exchangeId);
}
@ -225,7 +225,7 @@ public abstract class GGSSchemeBase implements AuthScheme {
}
if (LOG.isDebugEnabled()) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
LOG.debug("{} init {}", exchangeId, authServer);
}
@ -252,7 +252,7 @@ public abstract class GGSSchemeBase implements AuthScheme {
final Base64 codec = new Base64(0);
final String tokenstr = new String(codec.encode(token));
if (LOG.isDebugEnabled()) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
LOG.debug("{} Sending response '{}' back to the auth server", exchangeId, tokenstr);
}

View File

@ -109,7 +109,7 @@ public final class HttpAuthenticator {
throw new IllegalStateException("Unexpected challenge type: " + challengeType);
}
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
if (response.getCode() == challengeCode) {
@ -155,7 +155,7 @@ public final class HttpAuthenticator {
final AuthExchange authExchange,
final HttpContext context) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
if (LOG.isDebugEnabled()) {
@ -304,7 +304,7 @@ public final class HttpAuthenticator {
final HttpRequest request,
final AuthExchange authExchange,
final HttpContext context) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
AuthScheme authScheme = authExchange.getAuthScheme();
switch (authExchange.getState()) {

View File

@ -146,7 +146,7 @@ public final class NTLMScheme implements AuthScheme {
}
if (LOG.isDebugEnabled()) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
LOG.debug("{} No credentials found for auth scope [{}]", exchangeId, authScope);
}

View File

@ -105,7 +105,7 @@ public class SystemDefaultCredentialsProvider implements CredentialsStore {
}
final String host = authScope.getHost();
if (host != null) {
final HttpClientContext clientContext = context != null ? HttpClientContext.adapt(context) : null;
final HttpClientContext clientContext = context != null ? HttpClientContext.cast(context) : null;
final String protocol = authScope.getProtocol() != null ? authScope.getProtocol() : (authScope.getPort() == 443 ? URIScheme.HTTPS.id : URIScheme.HTTP.id);
PasswordAuthentication systemcreds = getSystemCreds(
protocol, authScope, Authenticator.RequestorType.SERVER, clientContext);

View File

@ -214,7 +214,7 @@ public final class ConnectExec implements ExecChainHandler {
final ExecRuntime execRuntime,
final HttpClientContext context) throws HttpException, IOException {
final RequestConfig config = context.getRequestConfig();
final RequestConfig config = context.getRequestConfigOrDefault();
final HttpHost target = route.getTargetHost();
final HttpHost proxy = route.getProxyHost();

View File

@ -137,7 +137,7 @@ public final class ContentCompressionExec implements ExecChainHandler {
Args.notNull(scope, "Scope");
final HttpClientContext clientContext = scope.clientContext;
final RequestConfig requestConfig = clientContext.getRequestConfig();
final RequestConfig requestConfig = clientContext.getRequestConfigOrDefault();
/* Signal support for Accept-Encoding transfer encodings. */
if (!request.containsHeader(HttpHeaders.ACCEPT_ENCODING) && requestConfig.isContentCompressionEnabled()) {

View File

@ -167,7 +167,7 @@ public class HttpRequestRetryExec implements ExecChainHandler {
final TimeValue nextInterval = retryStrategy.getRetryInterval(response, execCount, context);
// Make sure the retry interval does not exceed the response timeout
if (TimeValue.isPositive(nextInterval)) {
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
final Timeout responseTimeout = requestConfig.getResponseTimeout();
if (responseTimeout != null && nextInterval.compareTo(responseTimeout) > 0) {
return response;

View File

@ -97,7 +97,7 @@ class InternalExecRuntime implements ExecRuntime, Cancellable {
final String id, final HttpRoute route, final Object object, final HttpClientContext context) throws IOException {
Args.notNull(route, "Route");
if (endpointRef.get() == null) {
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
final Timeout connectionRequestTimeout = requestConfig.getConnectionRequestTimeout();
if (log.isDebugEnabled()) {
log.debug("{} acquiring endpoint ({})", id, connectionRequestTimeout);
@ -155,7 +155,7 @@ class InternalExecRuntime implements ExecRuntime, Cancellable {
if (isExecutionAborted()) {
throw new RequestFailedException("Request aborted");
}
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
@SuppressWarnings("deprecation")
final Timeout connectTimeout = requestConfig.getConnectTimeout();
if (log.isDebugEnabled()) {
@ -222,7 +222,7 @@ class InternalExecRuntime implements ExecRuntime, Cancellable {
if (isExecutionAborted()) {
throw new RequestFailedException("Request aborted");
}
final RequestConfig requestConfig = context.getRequestConfig();
final RequestConfig requestConfig = context.getRequestConfigOrDefault();
final Timeout responseTimeout = requestConfig.getResponseTimeout();
if (responseTimeout != null) {
endpoint.setSocketTimeout(responseTimeout);

View File

@ -121,20 +121,20 @@ class InternalHttpClient extends CloseableHttpClient implements Configurable {
}
private void setupContext(final HttpClientContext context) {
if (context.getAttribute(HttpClientContext.AUTHSCHEME_REGISTRY) == null) {
context.setAttribute(HttpClientContext.AUTHSCHEME_REGISTRY, this.authSchemeRegistry);
if (context.getAuthSchemeRegistry() == null) {
context.setAuthSchemeRegistry(this.authSchemeRegistry);
}
if (context.getAttribute(HttpClientContext.COOKIESPEC_REGISTRY) == null) {
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
if (context.getCookieSpecRegistry() == null) {
context.setCookieSpecRegistry(this.cookieSpecRegistry);
}
if (context.getAttribute(HttpClientContext.COOKIE_STORE) == null) {
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
if (context.getCookieStore() == null) {
context.setCookieStore(this.cookieStore);
}
if (context.getAttribute(HttpClientContext.CREDS_PROVIDER) == null) {
context.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credentialsProvider);
if (context.getCredentialsProvider() == null) {
context.setCredentialsProvider(this.credentialsProvider);
}
if (context.getAttribute(HttpClientContext.REQUEST_CONFIG) == null) {
context.setAttribute(HttpClientContext.REQUEST_CONFIG, this.defaultConfig);
if (context.getRequestConfig() == null) {
context.setRequestConfig(this.defaultConfig);
}
}
@ -145,8 +145,7 @@ class InternalHttpClient extends CloseableHttpClient implements Configurable {
final HttpContext context) throws IOException {
Args.notNull(request, "HTTP request");
try {
final HttpClientContext localcontext = HttpClientContext.adapt(
context != null ? context : new HttpClientContext());
final HttpClientContext localcontext = HttpClientContext.adapt(context);
RequestConfig config = null;
if (request instanceof Configurable) {
config = ((Configurable) request).getConfig();

View File

@ -113,7 +113,7 @@ public final class MainClientExec implements ExecChainHandler {
}
try {
// Run request protocol interceptors
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setRoute(route);
context.setRequest(request);
httpProcessor.process(request, request.getEntity(), context);
@ -146,7 +146,7 @@ public final class MainClientExec implements ExecChainHandler {
Object userToken = context.getUserToken();
if (userToken == null) {
userToken = userTokenHandler.getUserToken(route, request, context);
context.setAttribute(HttpClientContext.USER_TOKEN, userToken);
context.setUserToken(userToken);
}
// The connection is in or can be brought to a re-usable state.

View File

@ -118,8 +118,7 @@ public class MinimalHttpClient extends CloseableHttpClient {
if (request.getAuthority() == null) {
request.setAuthority(new URIAuthority(target));
}
final HttpClientContext clientContext = HttpClientContext.adapt(
context != null ? context : new HttpClientContext());
final HttpClientContext clientContext = HttpClientContext.adapt(context);
RequestConfig config = null;
if (request instanceof Configurable) {
config = ((Configurable) request).getConfig();
@ -142,7 +141,7 @@ public class MinimalHttpClient extends CloseableHttpClient {
}
clientContext.setRequest(request);
clientContext.setAttribute(HttpClientContext.HTTP_ROUTE, route);
clientContext.setRoute(route);
httpProcessor.process(request, request.getEntity(), clientContext);
final ClassicHttpResponse response = execRuntime.execute(exchangeId, request, clientContext);

View File

@ -266,7 +266,7 @@ public final class ProtocolExec implements ExecChainHandler {
final String pathPrefix,
final HttpResponse response,
final HttpClientContext context) {
final RequestConfig config = context.getRequestConfig();
final RequestConfig config = context.getRequestConfigOrDefault();
if (config.isAuthenticationEnabled()) {
final boolean targetAuthRequested = authenticator.isChallenged(
target, ChallengeType.TARGET, response, targetAuthExchange, context);

View File

@ -145,7 +145,7 @@ public class ProxyClient {
proxy, false, TunnelType.TUNNELLED, LayerType.PLAIN);
final ManagedHttpClientConnection conn = this.connFactory.createConnection(null);
final HttpClientContext context = new HttpClientContext();
final HttpClientContext context = HttpClientContext.create();
ClassicHttpResponse response;
final ClassicHttpRequest connect = new BasicClassicHttpRequest(Method.CONNECT, proxy, target.toHostString());
@ -155,10 +155,10 @@ public class ProxyClient {
// Populate the execution context
context.setRequest(connect);
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.CREDS_PROVIDER, credsProvider);
context.setAttribute(HttpClientContext.AUTHSCHEME_REGISTRY, this.authSchemeRegistry);
context.setAttribute(HttpClientContext.REQUEST_CONFIG, this.requestConfig);
context.setRoute(route);
context.setCredentialsProvider(credsProvider);
context.setAuthSchemeRegistry(this.authSchemeRegistry);
context.setRequestConfig(this.requestConfig);
this.requestExec.preProcess(connect, this.httpProcessor, context);

View File

@ -99,14 +99,9 @@ public final class RedirectExec implements ExecChainHandler {
Args.notNull(scope, "Scope");
final HttpClientContext context = scope.clientContext;
RedirectLocations redirectLocations = context.getRedirectLocations();
if (redirectLocations == null) {
redirectLocations = new RedirectLocations();
context.setAttribute(HttpClientContext.REDIRECT_LOCATIONS, redirectLocations);
}
redirectLocations.clear();
context.setRedirectLocations(null);
final RequestConfig config = context.getRequestConfig();
final RequestConfig config = context.getRequestConfigOrDefault();
final int maxRedirects = config.getMaxRedirects() > 0 ? config.getMaxRedirects() : 50;
ClassicHttpRequest originalRequest = scope.originalRequest;
ClassicHttpRequest currentRequest = request;
@ -139,6 +134,7 @@ public final class RedirectExec implements ExecChainHandler {
redirectUri);
}
final RedirectLocations redirectLocations = context.getRedirectLocations();
if (!config.isCircularRedirectsAllowed()) {
if (redirectLocations.contains(redirectUri)) {
throw new CircularRedirectException("Circular redirect to '" + redirectUri + "'");

View File

@ -76,8 +76,8 @@ public class DefaultRoutePlanner implements HttpRoutePlanner {
if (host == null) {
throw new ProtocolException("Target host is not specified");
}
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final RequestConfig config = clientContext.getRequestConfig();
final HttpClientContext clientContext = HttpClientContext.cast(context);
final RequestConfig config = clientContext.getRequestConfigOrDefault();
@SuppressWarnings("deprecation")
HttpHost proxy = config.getProxy();
if (proxy == null) {

View File

@ -30,6 +30,8 @@ package org.apache.hc.client5.http.protocol;
import java.util.HashMap;
import java.util.Map;
import javax.net.ssl.SSLSession;
import org.apache.hc.client5.http.HttpRoute;
import org.apache.hc.client5.http.RouteInfo;
import org.apache.hc.client5.http.auth.AuthCache;
@ -42,11 +44,15 @@ import org.apache.hc.client5.http.cookie.CookieOrigin;
import org.apache.hc.client5.http.cookie.CookieSpec;
import org.apache.hc.client5.http.cookie.CookieSpecFactory;
import org.apache.hc.client5.http.cookie.CookieStore;
import org.apache.hc.core5.annotation.Internal;
import org.apache.hc.core5.http.EndpointDetails;
import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.HttpRequest;
import org.apache.hc.core5.http.HttpResponse;
import org.apache.hc.core5.http.ProtocolVersion;
import org.apache.hc.core5.http.config.Lookup;
import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.http.protocol.HttpCoreContext;
import org.apache.hc.core5.util.Args;
/**
* Adaptor class that provides convenience type safe setters and getters
@ -58,96 +64,129 @@ import org.apache.hc.core5.util.Args;
public class HttpClientContext extends HttpCoreContext {
/**
* Attribute name of a {@link RouteInfo}
* object that represents the actual connection route.
* @deprecated Use getter methods
*/
@Deprecated
public static final String HTTP_ROUTE = "http.route";
/**
* Attribute name of a {@link RedirectLocations} object that represents a collection of all
* redirect locations received in the process of request execution.
* @deprecated Use getter methods
*/
@Deprecated
public static final String REDIRECT_LOCATIONS = "http.protocol.redirect-locations";
/**
* Attribute name of a {@link org.apache.hc.core5.http.config.Lookup} object that represents
* the actual {@link CookieSpecFactory} registry.
* @deprecated Use getter methods
*/
@Deprecated
public static final String COOKIESPEC_REGISTRY = "http.cookiespec-registry";
/**
* Attribute name of a {@link org.apache.hc.client5.http.cookie.CookieSpec}
* object that represents the actual cookie specification.
* @deprecated Use getter methods
*/
@Deprecated
public static final String COOKIE_SPEC = "http.cookie-spec";
/**
* Attribute name of a {@link org.apache.hc.client5.http.cookie.CookieOrigin}
* object that represents the actual details of the origin server.
* @deprecated Use getter methods
*/
@Deprecated
public static final String COOKIE_ORIGIN = "http.cookie-origin";
/**
* Attribute name of a {@link CookieStore}
* object that represents the actual cookie store.
* @deprecated Use getter methods
*/
@Deprecated
public static final String COOKIE_STORE = "http.cookie-store";
/**
* Attribute name of a {@link CredentialsProvider}
* object that represents the actual credentials provider.
* @deprecated Use getter methods
*/
@Deprecated
public static final String CREDS_PROVIDER = "http.auth.credentials-provider";
/**
* Attribute name of a {@link AuthCache} object
* that represents the auth scheme cache.
* @deprecated Use getter methods
*/
@Deprecated
public static final String AUTH_CACHE = "http.auth.auth-cache";
/**
* Attribute name of a map containing actual {@link AuthExchange}s keyed by their respective
* {@link org.apache.hc.core5.http.HttpHost}.
* @deprecated Use getter methods
*/
@Deprecated
public static final String AUTH_EXCHANGE_MAP = "http.auth.exchanges";
/**
* Attribute name of a {@link java.lang.Object} object that represents
* the actual user identity such as user {@link java.security.Principal}.
* @deprecated Use getter methods
*/
@Deprecated
public static final String USER_TOKEN = "http.user-token";
/**
* Attribute name of a {@link org.apache.hc.core5.http.config.Lookup} object that represents
* the actual {@link AuthSchemeFactory} registry.
* @deprecated Use getter methods
*/
@Deprecated
public static final String AUTHSCHEME_REGISTRY = "http.authscheme-registry";
/**
* Attribute name of a {@link org.apache.hc.client5.http.config.RequestConfig} object that
* represents the actual request configuration.
* @deprecated Use getter methods
*/
@Deprecated
public static final String REQUEST_CONFIG = "http.request-config";
/**
* Attribute name of a {@link java.lang.String} object that represents the ID of the
* current message exchange.
* @deprecated Use getter methods
*/
@Deprecated
public static final String EXCHANGE_ID = "http.exchange-id";
@SuppressWarnings("deprecation")
public static HttpClientContext adapt(final HttpContext context) {
Args.notNull(context, "HTTP context");
if (context instanceof HttpClientContext) {
return (HttpClientContext) context;
}
return new HttpClientContext(context);
return new HttpClientContext.Delegate(HttpCoreContext.adapt(context));
}
/**
* Casts the given generic {@link HttpContext} as {@link HttpClientContext}
* or creates a new {@link HttpClientContext} with the given {@link HttpContext}
* as a parent.
*
* @since 5.4
*/
public static HttpClientContext cast(final HttpContext context) {
if (context == null) {
return null;
}
if (context instanceof HttpClientContext) {
return (HttpClientContext) context;
} else {
throw new IllegalStateException("Unexpected context type: " + context.getClass().getSimpleName() +
"; required context type: " + HttpClientContext.class.getSimpleName());
}
}
public static HttpClientContext create() {
return new HttpClientContext();
}
private HttpRoute route;
private RedirectLocations redirectLocations;
private CookieSpec cookieSpec;
private CookieOrigin cookieOrigin;
private Map<HttpHost, AuthExchange> authExchangeMap;
private String exchangeId;
private Lookup<CookieSpecFactory> cookieSpecFactoryLookup;
private Lookup<AuthSchemeFactory> authSchemeFactoryLookup;
private CookieStore cookieStore;
private CredentialsProvider credentialsProvider;
private AuthCache authCache;
private Object userToken;
private RequestConfig requestConfig;
public HttpClientContext(final HttpContext context) {
super(context);
}
@ -156,99 +195,131 @@ public class HttpClientContext extends HttpCoreContext {
super();
}
/**
* Represents current route used to execute message exchanges.
* <p>
* This context attribute is expected to be populated by the protocol handler
* in the course of request execution.
*/
public RouteInfo getHttpRoute() {
return getAttribute(HTTP_ROUTE, HttpRoute.class);
return route;
}
/**
* @since 5.4
*/
@Internal
public void setRoute(final HttpRoute route) {
this.route = route;
}
/**
* Represents a collection of all redirects executed in the course of request execution.
* <p>
* This context attribute is expected to be populated by the protocol handler
* in the course of request execution.
*/
public RedirectLocations getRedirectLocations() {
return getAttribute(REDIRECT_LOCATIONS, RedirectLocations.class);
if (this.redirectLocations == null) {
this.redirectLocations = new RedirectLocations();
}
return this.redirectLocations;
}
/**
* @since 5.4
*/
@Internal
public void setRedirectLocations(final RedirectLocations redirectLocations) {
this.redirectLocations = redirectLocations;
}
public CookieStore getCookieStore() {
return getAttribute(COOKIE_STORE, CookieStore.class);
return cookieStore;
}
public void setCookieStore(final CookieStore cookieStore) {
setAttribute(COOKIE_STORE, cookieStore);
this.cookieStore = cookieStore;
}
public CookieSpec getCookieSpec() {
return getAttribute(COOKIE_SPEC, CookieSpec.class);
return cookieSpec;
}
/**
* @since 5.4
*/
@Internal
public void setCookieSpec(final CookieSpec cookieSpec) {
this.cookieSpec = cookieSpec;
}
public CookieOrigin getCookieOrigin() {
return getAttribute(COOKIE_ORIGIN, CookieOrigin.class);
return cookieOrigin;
}
@SuppressWarnings("unchecked")
private <T> Lookup<T> getLookup(final String name) {
return (Lookup<T>) getAttribute(name, Lookup.class);
/**
* @since 5.4
*/
@Internal
public void setCookieOrigin(final CookieOrigin cookieOrigin) {
this.cookieOrigin = cookieOrigin;
}
public Lookup<CookieSpecFactory> getCookieSpecRegistry() {
return getLookup(COOKIESPEC_REGISTRY);
return cookieSpecFactoryLookup;
}
public void setCookieSpecRegistry(final Lookup<CookieSpecFactory> lookup) {
setAttribute(COOKIESPEC_REGISTRY, lookup);
this.cookieSpecFactoryLookup = lookup;
}
public Lookup<AuthSchemeFactory> getAuthSchemeRegistry() {
return getLookup(AUTHSCHEME_REGISTRY);
return authSchemeFactoryLookup;
}
public void setAuthSchemeRegistry(final Lookup<AuthSchemeFactory> lookup) {
setAttribute(AUTHSCHEME_REGISTRY, lookup);
this.authSchemeFactoryLookup = lookup;
}
public CredentialsProvider getCredentialsProvider() {
return getAttribute(CREDS_PROVIDER, CredentialsProvider.class);
return credentialsProvider;
}
public void setCredentialsProvider(final CredentialsProvider credentialsProvider) {
setAttribute(CREDS_PROVIDER, credentialsProvider);
this.credentialsProvider = credentialsProvider;
}
public AuthCache getAuthCache() {
return getAttribute(AUTH_CACHE, AuthCache.class);
return authCache;
}
public void setAuthCache(final AuthCache authCache) {
setAttribute(AUTH_CACHE, authCache);
this.authCache = authCache;
}
/**
* @since 5.0
*/
@SuppressWarnings("unchecked")
public Map<HttpHost, AuthExchange> getAuthExchanges() {
Map<HttpHost, AuthExchange> map = (Map<HttpHost, AuthExchange>) getAttribute(AUTH_EXCHANGE_MAP);
if (map == null) {
map = new HashMap<>();
setAttribute(AUTH_EXCHANGE_MAP, map);
if (authExchangeMap == null) {
authExchangeMap = new HashMap<>();
}
return map;
return authExchangeMap;
}
/**
* @since 5.0
*/
public AuthExchange getAuthExchange(final HttpHost host) {
final Map<HttpHost, AuthExchange> authExchangeMap = getAuthExchanges();
AuthExchange authExchange = authExchangeMap.get(host);
if (authExchange == null) {
authExchange = new AuthExchange();
authExchangeMap.put(host, authExchange);
}
return authExchange;
return getAuthExchanges().computeIfAbsent(host, k -> new AuthExchange());
}
/**
* @since 5.0
*/
public void setAuthExchange(final HttpHost host, final AuthExchange authExchange) {
final Map<HttpHost, AuthExchange> authExchangeMap = getAuthExchanges();
authExchangeMap.put(host, authExchange);
getAuthExchanges().put(host, authExchange);
}
/**
@ -257,43 +328,143 @@ public class HttpClientContext extends HttpCoreContext {
public void resetAuthExchange(final HttpHost host, final AuthScheme authScheme) {
final AuthExchange authExchange = new AuthExchange();
authExchange.select(authScheme);
final Map<HttpHost, AuthExchange> authExchangeMap = getAuthExchanges();
authExchangeMap.put(host, authExchange);
getAuthExchanges().put(host, authExchange);
}
/**
* @deprecated Use {@link #getUserToken()}
*/
@Deprecated
@SuppressWarnings("unchecked")
public <T> T getUserToken(final Class<T> clazz) {
return getAttribute(USER_TOKEN, clazz);
return (T) getUserToken();
}
public Object getUserToken() {
return getAttribute(USER_TOKEN);
return userToken;
}
public void setUserToken(final Object obj) {
setAttribute(USER_TOKEN, obj);
public void setUserToken(final Object userToken) {
this.userToken = userToken;
}
public RequestConfig getRequestConfig() {
final RequestConfig config = getAttribute(REQUEST_CONFIG, RequestConfig.class);
return config != null ? config : RequestConfig.DEFAULT;
return requestConfig;
}
public void setRequestConfig(final RequestConfig config) {
setAttribute(REQUEST_CONFIG, config);
/**
* Returns {@link RequestConfig} set in the context or {@link RequestConfig#DEFAULT}
* if not present in the context.
*
* @since 5.4
*/
public final RequestConfig getRequestConfigOrDefault() {
final RequestConfig requestConfig = getRequestConfig();
return requestConfig != null ? requestConfig : RequestConfig.DEFAULT;
}
public void setRequestConfig(final RequestConfig requestConfig) {
this.requestConfig = requestConfig;
}
/**
* @since 5.1
*/
public String getExchangeId() {
return getAttribute(EXCHANGE_ID, String.class);
return exchangeId;
}
/**
* @since 5.1
*/
public void setExchangeId(final String id) {
setAttribute(EXCHANGE_ID, id);
public void setExchangeId(final String exchangeId) {
this.exchangeId = exchangeId;
}
static class Delegate extends HttpClientContext {
final private HttpCoreContext parent;
Delegate(final HttpCoreContext parent) {
super(parent);
this.parent = parent;
}
@Override
public ProtocolVersion getProtocolVersion() {
return parent.getProtocolVersion();
}
@Override
public void setProtocolVersion(final ProtocolVersion version) {
parent.setProtocolVersion(version);
}
@Override
public Object getAttribute(final String id) {
return parent.getAttribute(id);
}
@Override
public Object setAttribute(final String id, final Object obj) {
return parent.setAttribute(id, obj);
}
@Override
public Object removeAttribute(final String id) {
return parent.removeAttribute(id);
}
@Override
public <T> T getAttribute(final String id, final Class<T> clazz) {
return parent.getAttribute(id, clazz);
}
@Override
public HttpRequest getRequest() {
return parent.getRequest();
}
@Override
public void setRequest(final HttpRequest request) {
parent.setRequest(request);
}
@Override
public HttpResponse getResponse() {
return parent.getResponse();
}
@Override
public void setResponse(final HttpResponse response) {
parent.setResponse(response);
}
@Override
public EndpointDetails getEndpointDetails() {
return parent.getEndpointDetails();
}
@Override
public void setEndpointDetails(final EndpointDetails endpointDetails) {
parent.setEndpointDetails(endpointDetails);
}
@Override
public SSLSession getSSLSession() {
return parent.getSSLSession();
}
@Override
public void setSSLSession(final SSLSession sslSession) {
parent.setSSLSession(sslSession);
}
@Override
public String toString() {
return parent.toString();
}
}
}

View File

@ -33,13 +33,13 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.hc.client5.http.RouteInfo;
import org.apache.hc.client5.http.cookie.StandardCookieSpec;
import org.apache.hc.client5.http.config.RequestConfig;
import org.apache.hc.client5.http.cookie.Cookie;
import org.apache.hc.client5.http.cookie.CookieOrigin;
import org.apache.hc.client5.http.cookie.CookieSpec;
import org.apache.hc.client5.http.cookie.CookieSpecFactory;
import org.apache.hc.client5.http.cookie.CookieStore;
import org.apache.hc.client5.http.cookie.StandardCookieSpec;
import org.apache.hc.core5.annotation.Contract;
import org.apache.hc.core5.annotation.ThreadingBehavior;
import org.apache.hc.core5.http.EntityDetails;
@ -90,7 +90,7 @@ public class RequestAddCookies implements HttpRequestInterceptor {
return;
}
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
// Obtain cookie store
@ -120,7 +120,7 @@ public class RequestAddCookies implements HttpRequestInterceptor {
return;
}
final RequestConfig config = clientContext.getRequestConfig();
final RequestConfig config = clientContext.getRequestConfigOrDefault();
String cookieSpecName = config.getCookieSpec();
if (cookieSpecName == null) {
cookieSpecName = StandardCookieSpec.STRICT;
@ -190,8 +190,8 @@ public class RequestAddCookies implements HttpRequestInterceptor {
// Stick the CookieSpec and CookieOrigin instances to the HTTP context
// so they could be obtained by the response interceptor
context.setAttribute(HttpClientContext.COOKIE_SPEC, cookieSpec);
context.setAttribute(HttpClientContext.COOKIE_ORIGIN, cookieOrigin);
clientContext.setCookieSpec(cookieSpec);
clientContext.setCookieOrigin(cookieOrigin);
}
}

View File

@ -72,7 +72,7 @@ public class RequestAuthCache implements HttpRequestInterceptor {
Args.notNull(request, "HTTP request");
Args.notNull(context, "HTTP context");
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
final AuthCache authCache = clientContext.getAuthCache();

View File

@ -70,7 +70,7 @@ public class RequestClientConnControl implements HttpRequestInterceptor {
return;
}
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
// Obtain the client connection (required)

View File

@ -66,12 +66,12 @@ public class RequestExpectContinue implements HttpRequestInterceptor {
Args.notNull(request, "HTTP request");
if (!request.containsHeader(HttpHeaders.EXPECT)) {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final ProtocolVersion version = request.getVersion() != null ? request.getVersion() : clientContext.getProtocolVersion();
// Do not send the expect header if request body is known to be empty
if (entity != null
&& entity.getContentLength() != 0 && !version.lessEquals(HttpVersion.HTTP_1_0)) {
final RequestConfig config = clientContext.getRequestConfig();
final RequestConfig config = clientContext.getRequestConfigOrDefault();
if (config.isExpectContinueEnabled()) {
request.addHeader(HttpHeaders.EXPECT, HeaderElements.CONTINUE);
}

View File

@ -63,8 +63,8 @@ public final class RequestUpgrade implements HttpRequestInterceptor {
Args.notNull(request, "HTTP request");
Args.notNull(context, "HTTP context");
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final RequestConfig requestConfig = clientContext.getRequestConfig();
final HttpClientContext clientContext = HttpClientContext.cast(context);
final RequestConfig requestConfig = clientContext.getRequestConfigOrDefault();
if (requestConfig.isProtocolUpgradeEnabled()) {
final ProtocolVersion version = request.getVersion() != null ? request.getVersion() : clientContext.getProtocolVersion();
if (!request.containsHeader(HttpHeaders.UPGRADE) && version.getMajor() == 1 && version.getMinor() >= 1) {

View File

@ -77,7 +77,7 @@ public class ResponseProcessCookies implements HttpResponseInterceptor {
Args.notNull(response, "HTTP request");
Args.notNull(context, "HTTP context");
final HttpClientContext clientContext = HttpClientContext.adapt(context);
final HttpClientContext clientContext = HttpClientContext.cast(context);
final String exchangeId = clientContext.getExchangeId();
// Obtain actual CookieSpec instance

View File

@ -74,7 +74,7 @@ public class TestHttpAuthenticator {
private AuthExchange authExchange;
private CacheableAuthState authScheme;
private HttpContext context;
private HttpClientContext context;
private HttpHost defaultHost;
private CredentialsProvider credentialsProvider;
private Lookup<AuthSchemeFactory> authSchemeRegistry;
@ -89,12 +89,12 @@ public class TestHttpAuthenticator {
this.context = new HttpClientContext();
this.defaultHost = new HttpHost("localhost", 80);
this.credentialsProvider = Mockito.mock(CredentialsProvider.class);
this.context.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credentialsProvider);
this.context.setCredentialsProvider(this.credentialsProvider);
this.authSchemeRegistry = RegistryBuilder.<AuthSchemeFactory>create()
.register(StandardAuthScheme.BASIC, BasicSchemeFactory.INSTANCE)
.register(StandardAuthScheme.DIGEST, DigestSchemeFactory.INSTANCE)
.build();
this.context.setAttribute(HttpClientContext.AUTHSCHEME_REGISTRY, this.authSchemeRegistry);
this.context.setAuthSchemeRegistry(this.authSchemeRegistry);
this.httpAuthenticator = new HttpAuthenticator();
}

View File

@ -225,7 +225,7 @@ public class TestContentCompressionExec {
.setContentCompressionEnabled(false)
.build();
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
context.setRequestConfig(config);
Mockito.when(execChain.proceed(request, scope)).thenReturn(response);

View File

@ -155,7 +155,7 @@ public class TestInternalHttpClient {
Assertions.assertSame(authSchemeRegistry, context.getAuthSchemeRegistry());
Assertions.assertSame(cookieStore, context.getCookieStore());
Assertions.assertSame(credentialsProvider, context.getCredentialsProvider());
Assertions.assertSame(defaultConfig, context.getRequestConfig());
Assertions.assertSame(defaultConfig, context.getRequestConfigOrDefault());
}
@Test
@ -176,7 +176,7 @@ public class TestInternalHttpClient {
final HttpClientContext context = HttpClientContext.create();
client.execute(httpget, context, response -> null);
Assertions.assertSame(config, context.getRequestConfig());
Assertions.assertSame(config, context.getRequestConfigOrDefault());
}
@Test
@ -212,7 +212,7 @@ public class TestInternalHttpClient {
Assertions.assertSame(localAuthSchemeRegistry, context.getAuthSchemeRegistry());
Assertions.assertSame(localCookieStore, context.getCookieStore());
Assertions.assertSame(localCredentialsProvider, context.getCredentialsProvider());
Assertions.assertSame(localConfig, context.getRequestConfig());
Assertions.assertSame(localConfig, context.getRequestConfigOrDefault());
}
@Test

View File

@ -106,9 +106,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -133,9 +133,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -152,9 +152,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, null);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(null);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -171,9 +171,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, null);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(null);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -189,8 +189,8 @@ public class TestRequestAddCookies {
final HttpClientContext context = HttpClientContext.create();
context.setEndpointDetails(null);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -209,10 +209,10 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setRequestConfig(config);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -233,9 +233,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -249,9 +249,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(new HttpHost("localhost.local", 1234), null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -273,9 +273,9 @@ public class TestRequestAddCookies {
new HttpHost("localhost.local", 80), null, new HttpHost("localhost", 8888), false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -298,9 +298,9 @@ public class TestRequestAddCookies {
new HttpHost("http", "localhost", 8888), true, TunnelType.TUNNELLED, LayerType.LAYERED);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -330,9 +330,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
// Make sure the third cookie expires
Thread.sleep(200);
@ -361,9 +361,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);
@ -396,9 +396,9 @@ public class TestRequestAddCookies {
final HttpRoute route = new HttpRoute(this.target, null, false);
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setAttribute(HttpClientContext.COOKIESPEC_REGISTRY, this.cookieSpecRegistry);
context.setRoute(route);
context.setCookieStore(this.cookieStore);
context.setCookieSpecRegistry(this.cookieSpecRegistry);
final HttpRequestInterceptor interceptor = RequestAddCookies.INSTANCE;
interceptor.process(request, null, context);

View File

@ -68,7 +68,7 @@ public class TestRequestClientConnControl {
final HttpHost target = new HttpHost("http", "localhost", 80);
final HttpRoute route = new HttpRoute(target, null, false);
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setRoute(route);
final HttpRequestInterceptor interceptor = new RequestClientConnControl();
interceptor.process(request, null, context);
@ -88,7 +88,7 @@ public class TestRequestClientConnControl {
final HttpRoute route = new HttpRoute(target, null, proxy, true,
TunnelType.TUNNELLED, LayerType.LAYERED);
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setRoute(route);
final HttpRequestInterceptor interceptor = new RequestClientConnControl();
interceptor.process(request, null, context);
@ -108,7 +108,7 @@ public class TestRequestClientConnControl {
final HttpRoute route = new HttpRoute(target, null, proxy, false,
TunnelType.PLAIN, LayerType.PLAIN);
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setRoute(route);
final HttpRequestInterceptor interceptor = new RequestClientConnControl();
interceptor.process(request, null, context);
@ -128,7 +128,7 @@ public class TestRequestClientConnControl {
final HttpRoute route = new HttpRoute(target, null, proxy, true,
TunnelType.TUNNELLED, LayerType.LAYERED);
context.setAttribute(HttpClientContext.HTTP_ROUTE, route);
context.setRoute(route);
final HttpRequestInterceptor interceptor = new RequestClientConnControl();
interceptor.process(request, null, context);

View File

@ -46,7 +46,7 @@ public class TestRequestExpectContinue {
public void testRequestExpectContinueGenerated() throws Exception {
final HttpClientContext context = HttpClientContext.create();
final RequestConfig config = RequestConfig.custom().setExpectContinueEnabled(true).build();
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
context.setRequestConfig(config);
final ClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/");
final String s = "whatever";
final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII);
@ -62,7 +62,7 @@ public class TestRequestExpectContinue {
public void testRequestExpectContinueNotGenerated() throws Exception {
final HttpClientContext context = new HttpClientContext();
final RequestConfig config = RequestConfig.custom().setExpectContinueEnabled(false).build();
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
context.setRequestConfig(config);
final ClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/");
final String s = "whatever";
final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII);
@ -77,7 +77,7 @@ public class TestRequestExpectContinue {
public void testRequestExpectContinueHTTP10() throws Exception {
final HttpClientContext context = new HttpClientContext();
final RequestConfig config = RequestConfig.custom().setExpectContinueEnabled(true).build();
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
context.setRequestConfig(config);
final ClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/");
request.setVersion(HttpVersion.HTTP_1_0);
final String s = "whatever";
@ -93,7 +93,7 @@ public class TestRequestExpectContinue {
public void testRequestExpectContinueZeroContent() throws Exception {
final HttpClientContext context = new HttpClientContext();
final RequestConfig config = RequestConfig.custom().setExpectContinueEnabled(true).build();
context.setAttribute(HttpClientContext.REQUEST_CONFIG, config);
context.setRequestConfig(config);
final ClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/");
final String s = "";
final StringEntity entity = new StringEntity(s, StandardCharsets.US_ASCII);

View File

@ -76,9 +76,9 @@ public class TestResponseProcessCookies {
response.addHeader("Set-Cookie", "name1=value1");
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.COOKIE_ORIGIN, this.cookieOrigin);
context.setAttribute(HttpClientContext.COOKIE_SPEC, this.cookieSpec);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setCookieOrigin(this.cookieOrigin);
context.setCookieSpec(this.cookieSpec);
context.setCookieStore(this.cookieStore);
final HttpResponseInterceptor interceptor = ResponseProcessCookies.INSTANCE;
interceptor.process(response, null, context);
@ -99,9 +99,9 @@ public class TestResponseProcessCookies {
response.addHeader("Set-Cookie", "name1=value1");
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.COOKIE_ORIGIN, null);
context.setAttribute(HttpClientContext.COOKIE_SPEC, this.cookieSpec);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setCookieOrigin(null);
context.setCookieSpec(this.cookieSpec);
context.setCookieStore(this.cookieStore);
final HttpResponseInterceptor interceptor = ResponseProcessCookies.INSTANCE;
interceptor.process(response, null, context);
@ -117,9 +117,9 @@ public class TestResponseProcessCookies {
response.addHeader("Set-Cookie", "name1=value1");
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.COOKIE_ORIGIN, this.cookieOrigin);
context.setAttribute(HttpClientContext.COOKIE_SPEC, null);
context.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore);
context.setCookieOrigin(this.cookieOrigin);
context.setCookieSpec(null);
context.setCookieStore(this.cookieStore);
final HttpResponseInterceptor interceptor = ResponseProcessCookies.INSTANCE;
interceptor.process(response, null, context);
@ -135,9 +135,9 @@ public class TestResponseProcessCookies {
response.addHeader("Set-Cookie", "name1=value1");
final HttpClientContext context = HttpClientContext.create();
context.setAttribute(HttpClientContext.COOKIE_ORIGIN, this.cookieOrigin);
context.setAttribute(HttpClientContext.COOKIE_SPEC, this.cookieSpec);
context.setAttribute(HttpClientContext.COOKIE_STORE, null);
context.setCookieOrigin(this.cookieOrigin);
context.setCookieSpec(this.cookieSpec);
context.setCookieStore(null);
final HttpResponseInterceptor interceptor = ResponseProcessCookies.INSTANCE;
interceptor.process(response, null, context);