From 1fc51847e7ba824ef8d0616b9d16b2861a9978f9 Mon Sep 17 00:00:00 2001 From: Oleg Kalnichevski Date: Tue, 26 May 2015 18:59:46 +0000 Subject: [PATCH] HTTPCLIENT-1650: fluent Executor to create a local CredentialsProvide instance only if credentials are explicitly set git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/branches/4.5.x@1681815 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/http/client/fluent/Executor.java | 49 +++++++++++++++---- 1 file changed, 40 insertions(+), 9 deletions(-) diff --git a/fluent-hc/src/main/java/org/apache/http/client/fluent/Executor.java b/fluent-hc/src/main/java/org/apache/http/client/fluent/Executor.java index fa2184b7c..187cf8958 100644 --- a/fluent-hc/src/main/java/org/apache/http/client/fluent/Executor.java +++ b/fluent-hc/src/main/java/org/apache/http/client/fluent/Executor.java @@ -111,19 +111,28 @@ public class Executor { } private final HttpClient httpclient; - private final AuthCache authCache; - private final CredentialsProvider credentialsProvider; - + private volatile AuthCache authCache; + private volatile CredentialsProvider credentialsProvider; private volatile CookieStore cookieStore; Executor(final HttpClient httpclient) { super(); this.httpclient = httpclient; - this.credentialsProvider = new BasicCredentialsProvider(); this.authCache = new BasicAuthCache(); } + /** + * @since 4.5 + */ + public Executor use(final CredentialsProvider credentialsProvider) { + this.credentialsProvider = credentialsProvider; + return this; + } + public Executor auth(final AuthScope authScope, final Credentials creds) { + if (this.credentialsProvider == null) { + this.credentialsProvider = new BasicCredentialsProvider(); + } this.credentialsProvider.setCredentials(authScope, creds); return this; } @@ -200,17 +209,33 @@ public class Executor { } public Executor clearAuth() { - this.credentialsProvider.clear(); + if (this.credentialsProvider != null) { + this.credentialsProvider.clear(); + } return this; } + /** + * @deprecated (4.5) Use {@link #use(CookieStore)}. + */ + @Deprecated public Executor cookieStore(final CookieStore cookieStore) { this.cookieStore = cookieStore; return this; } + /** + * @since 4.5 + */ + public Executor use(final CookieStore cookieStore) { + this.cookieStore = cookieStore; + return this; + } + public Executor clearCookies() { - this.cookieStore.clear(); + if (this.cookieStore != null) { + this.cookieStore.clear(); + } return this; } @@ -225,9 +250,15 @@ public class Executor { public Response execute( final Request request) throws ClientProtocolException, IOException { final HttpClientContext localContext = HttpClientContext.create(); - localContext.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credentialsProvider); - localContext.setAttribute(HttpClientContext.AUTH_CACHE, this.authCache); - localContext.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore); + if (this.credentialsProvider != null) { + localContext.setAttribute(HttpClientContext.CREDS_PROVIDER, this.credentialsProvider); + } + if (this.authCache != null) { + localContext.setAttribute(HttpClientContext.AUTH_CACHE, this.authCache); + } + if (this.cookieStore != null) { + localContext.setAttribute(HttpClientContext.COOKIE_STORE, this.cookieStore); + } return new Response(request.internalExecute(this.httpclient, localContext)); }