You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2016/10/14 19:22:03 UTC

[04/15] jena git commit: FCREPO-576: Moving away from deprecated HttpCommons Client API

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java b/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
index 52d1562..9f93160 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/web/HttpOp.java
@@ -22,8 +22,6 @@ import static java.lang.String.format ;
 
 import java.io.IOException ;
 import java.io.InputStream ;
-import java.net.URI ;
-import java.net.URISyntaxException ;
 import java.nio.charset.StandardCharsets ;
 import java.util.ArrayList ;
 import java.util.List ;
@@ -33,15 +31,12 @@ import org.apache.http.* ;
 import org.apache.http.client.HttpClient ;
 import org.apache.http.client.entity.UrlEncodedFormEntity ;
 import org.apache.http.client.methods.* ;
-import org.apache.http.conn.ClientConnectionManager ;
 import org.apache.http.entity.ContentType ;
 import org.apache.http.entity.InputStreamEntity ;
 import org.apache.http.entity.StringEntity ;
-import org.apache.http.impl.client.AbstractHttpClient ;
 import org.apache.http.impl.client.HttpClientBuilder ;
-import org.apache.http.impl.client.SystemDefaultHttpClient ;
-import org.apache.http.impl.conn.PoolingClientConnectionManager ;
-import org.apache.http.impl.conn.SchemeRegistryFactory ;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.client.cache.CachingHttpClientBuilder;
 import org.apache.http.message.BasicNameValuePair ;
 import org.apache.http.protocol.BasicHttpContext ;
 import org.apache.http.protocol.HttpContext ;
@@ -49,10 +44,7 @@ import org.apache.http.util.EntityUtils ;
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.web.HttpException ;
 import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
-import org.apache.jena.atlas.web.auth.ServiceAuthenticator ;
 import org.apache.jena.query.ARQ ;
-import org.apache.jena.riot.RiotException ;
 import org.apache.jena.riot.WebContent ;
 import org.apache.jena.sparql.engine.http.Params ;
 import org.apache.jena.sparql.engine.http.Params.Pair ;
@@ -89,8 +81,8 @@ public class HttpOp {
      * Test are in Fuseki (need a server to test against)
      * 
      * Pattern of functions provided: 1/ The full operation (includes
-     * HttpClient, HttpContext, HttpAuthenticator) any of which can be null for
-     * "default" 2/ Provide common use options without those three arguments.
+     * HttpClient, HttpContext) either of which can be null for
+     * "default" 2/ Provide common use options without those two arguments.
      * These all become the full operation. 3/ All calls go via exec for logging
      * and debugging.
      */
@@ -104,21 +96,11 @@ public class HttpOp {
     static private AtomicLong counter = new AtomicLong(0);
 
     /**
-     * Default HttpClient. This is used only if there is no authentication set.
+     * Default HttpClient.
      */
     static private HttpClient defaultHttpClient = null;
 
     /**
-     * Whether the default HttpClient is used in conjunction with authentication
-     */
-    static private boolean useDefaultClientWithAuthentication = false;
-
-    /**
-     * Default authenticator used for HTTP authentication
-     */
-    static private HttpAuthenticator defaultAuthenticator = new ServiceAuthenticator();
-
-    /**
      * Constant for the default User-Agent header that ARQ will use
      */
     public static final String ARQ_USER_AGENT = "Apache-Jena-ARQ/" + ARQ.VERSION;
@@ -173,29 +155,6 @@ public class HttpOp {
     }
 
     /**
-     * Gets the default authenticator used for authenticate requests if no
-     * specific authenticator is provided.
-     * 
-     * @return HTTP authenticator
-     */
-    public static HttpAuthenticator getDefaultAuthenticator() {
-        return defaultAuthenticator;
-    }
-
-    /**
-     * Sets the default authenticator used for authenticate requests if no
-     * specific authenticator is provided. May be set to null to turn off
-     * default authentication, when set to null users must manually configure
-     * authentication.
-     * 
-     * @param authenticator
-     *            Authenticator
-     */
-    public static void setDefaultAuthenticator(HttpAuthenticator authenticator) {
-        defaultAuthenticator = authenticator;
-    }
-
-    /**
      * Return the current default {@link HttpClient}. This may be null, meaning
      * a new {@link HttpClient} is created each time, if none is provided
      * in the HttpOp function call.
@@ -214,13 +173,6 @@ public class HttpOp {
      * sensitive).
      * </p>
      * <p>
-     * The default HttpClient is not used if an HttpAuthenticator is provided
-     * since this can potentially leak authentication credentials to be leaked
-     * between requests to different services. However in some cases it may be
-     * valuable to share the client regardless in which case you can also set
-     * the
-     * </p>
-     * <p>
      * Set to "null" to create a new HttpClient for each call (default
      * behaviour, more reliable, but slower when many HTTP operation are
      * attempted).
@@ -233,42 +185,11 @@ public class HttpOp {
     public static void setDefaultHttpClient(HttpClient httpClient) {
         defaultHttpClient = httpClient;
     }
-
-    /**
-     * Gets whether the configured default HttpClient will be used in
-     * conjunction with authentication.
-     * <p>
-     * This defaults to false because this can potentially leak authentication
-     * credentials between requests to different services. However in some cases
-     * it may be valuable to share the client regardless e.g. when you have a
-     * specially configured HttpClient for your environment.
-     * </p>
-     * 
-     * @return True if the configured default client will be used with
-     *         authentication, false otherwise
-     */
-    public static boolean getUseDefaultClientWithAuthentication() {
-        return useDefaultClientWithAuthentication;
-    }
-
+    
     /**
-     * Sets whether the configured default HttpClient will be used in
-     * conjunction with authentication.
-     * <p>
-     * This defaults to false because this can potentially leak authentication
-     * credentials between requests to different services. However in some cases
-     * it may be valuable to share the client regardless e.g. when you have a
-     * specially configured HttpClient for your environment.
-     * </p>
-     * 
-     * @param useWithAuth
-     *            True if the configured default client should be used with
-     *            authentication, false if it should not
+     * Create an HttpClient that performs connection pooling. This can be used
+     * with {@link #setDefaultHttpClient} or provided in the HttpOp calls.
      */
-    public static void setUseDefaultClientWithAuthentication(boolean useWithAuth) {
-        useDefaultClientWithAuthentication = useWithAuth;
-    }
-
     public static HttpClient createPoolingHttpClient() {
         String s = System.getProperty("http.maxConnections", "5");
         int max = Integer.parseInt(s);
@@ -278,34 +199,13 @@ public class HttpOp {
             .build() ;
     }
     
-//    /** @deprecated Use {@link #createPoolingHttpClient()} */
-//    @Deprecated
-//    public static HttpClient createCachingHttpClient() {
-//        return createPoolingHttpClient() ; 
-//    }
-    
-    /**
-     * Create an HttpClient that performs connection pooling. This can be used
-     * with {@link #setDefaultHttpClient} or provided in the HttpOp calls.
-     */
-    @SuppressWarnings("deprecation")
     public static HttpClient createCachingHttpClient() {
-        return new SystemDefaultHttpClient() {
-            /**
-             * See SystemDefaultHttpClient (4.2). This version always sets the
-             * connection cache
-             */
-            @Override
-            protected ClientConnectionManager createClientConnectionManager() {
-                PoolingClientConnectionManager connmgr = 
-                    new PoolingClientConnectionManager(SchemeRegistryFactory.createSystemDefault());
-                String s = System.getProperty("http.maxConnections", "5");
-                int max = Integer.parseInt(s);
-                connmgr.setDefaultMaxPerRoute(max);
-                connmgr.setMaxTotal(2 * max);
-                return connmgr;
-            }
-        };
+        String s = System.getProperty("http.maxConnections", "5");
+        int max = Integer.parseInt(s);
+        return CachingHttpClientBuilder.create()
+            .setMaxConnPerRoute(max)
+            .setMaxConnTotal(2*max)
+            .build() ;
     }
 
     /**
@@ -342,26 +242,7 @@ public class HttpOp {
      *            Response Handler
      */
     public static void execHttpGet(String url, String acceptHeader, HttpResponseHandler handler) {
-        execHttpGet(url, acceptHeader, handler, null, null, null);
-    }
-
-    /**
-     * Executes a HTTP Get request handling the response with the given handler.
-     * <p>
-     * HTTP responses 400 and 500 become exceptions.
-     * </p>
-     * 
-     * @param url
-     *            URL
-     * @param acceptHeader
-     *            Accept Header
-     * @param handler
-     *            Response Handler
-     * @param authenticator
-     *            HTTP Authenticator
-     */
-    public static void execHttpGet(String url, String acceptHeader, HttpResponseHandler handler, HttpAuthenticator authenticator) {
-        execHttpGet(url, acceptHeader, handler, null, null, authenticator);
+        execHttpGet(url, acceptHeader, handler, null, null);
     }
 
     /**
@@ -385,14 +266,12 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static void execHttpGet(String url, String acceptHeader, HttpResponseHandler handler, HttpClient httpClient,
-            HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpContext httpContext) {
         String requestURI = determineRequestURI(url);
         HttpGet httpget = new HttpGet(requestURI);
-        exec(url, httpget, acceptHeader, handler, httpClient, httpContext, authenticator);
+        exec(url, httpget, acceptHeader, handler, httpClient, httpContext);
     }
 
     /**
@@ -408,7 +287,7 @@ public class HttpOp {
      */
     public static TypedInputStream execHttpGet(String url) {
         HttpCaptureResponse<TypedInputStream> handler = new CaptureInput();
-        execHttpGet(url, null, handler, null, null, null);
+        execHttpGet(url, null, handler, null, null);
         return handler.get();
     }
 
@@ -427,7 +306,7 @@ public class HttpOp {
      */
     public static TypedInputStream execHttpGet(String url, String acceptHeader) {
         HttpCaptureResponse<TypedInputStream> handler = new CaptureInput();
-        execHttpGet(url, acceptHeader, handler, null, null, null);
+        execHttpGet(url, acceptHeader, handler, null, null);
         return handler.get();
     }
 
@@ -446,15 +325,12 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      * @return TypedInputStream or null if the URL returns 404.
      */
-    public static TypedInputStream execHttpGet(String url, String acceptHeader, HttpClient httpClient, HttpContext httpContext,
-            HttpAuthenticator authenticator) {
+    public static TypedInputStream execHttpGet(String url, String acceptHeader, HttpClient httpClient, HttpContext httpContext) {
         HttpCaptureResponse<TypedInputStream> handler = new CaptureInput();
         try {
-            execHttpGet(url, acceptHeader, handler, httpClient, httpContext, authenticator);
+            execHttpGet(url, acceptHeader, handler, httpClient, httpContext);
         } catch (HttpException ex) {
             if (ex.getResponseCode() == HttpSC.NOT_FOUND_404)
                 return null;
@@ -510,7 +386,7 @@ public class HttpOp {
      *            Content to POST
      */
     public static void execHttpPost(String url, String contentType, String content) {
-        execHttpPost(url, contentType, content, null, nullHandler, null, null, defaultAuthenticator);
+        execHttpPost(url, contentType, content, null, nullHandler, null, null);
     }
 
     /**
@@ -526,7 +402,7 @@ public class HttpOp {
      *            Accept Type
      */
     public static TypedInputStream execHttpPostStream(String url, String contentType, String content, String acceptType) {
-        return execHttpPostStream(url, contentType, content, acceptType, null, null, null) ;
+        return execHttpPostStream(url, contentType, content, acceptType, null, null) ;
     }
 
     /**
@@ -543,19 +419,17 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static void execHttpPost(String url, String contentType, String content, HttpClient httpClient,
-                                    HttpContext httpContext, HttpAuthenticator authenticator) {
-        execHttpPost(url, contentType, content, null, nullHandler, httpClient, httpContext, authenticator);
+                                    HttpContext httpContext) {
+        execHttpPost(url, contentType, content, null, nullHandler, httpClient, httpContext);
     }
 
     public static TypedInputStream execHttpPostStream(String url, String contentType, String content, String acceptType,
-                                                      HttpClient httpClient, HttpContext httpContext, HttpAuthenticator authenticator) {
+                                                      HttpClient httpClient, HttpContext httpContext) {
         CaptureInput handler = new CaptureInput();
         try {
-            execHttpPost(url, contentType, content, acceptType, handler, httpClient, httpContext, authenticator);
+            execHttpPost(url, contentType, content, acceptType, handler, httpClient, httpContext);
         } catch (HttpException ex) {
             if (ex.getResponseCode() == HttpSC.NOT_FOUND_404)
                 return null;
@@ -583,16 +457,14 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static void execHttpPost(String url, String contentType, String content, String acceptType,
-            HttpResponseHandler handler, HttpClient httpClient, HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpResponseHandler handler, HttpClient httpClient, HttpContext httpContext) {
         StringEntity e = null;
         try {
             e = new StringEntity(content, StandardCharsets.UTF_8);
             e.setContentType(contentType);
-            execHttpPost(url, e, acceptType, handler, httpClient, httpContext, authenticator);
+            execHttpPost(url, e, acceptType, handler, httpClient, httpContext);
         }
         finally {
             closeEntity(e);
@@ -627,7 +499,7 @@ public class HttpOp {
      * 
      */
     public static void execHttpPost(String url, String contentType, InputStream input, long length) {
-        execHttpPost(url, contentType, input, length, null, nullHandler, null, null, defaultAuthenticator);
+        execHttpPost(url, contentType, input, length, null, nullHandler, null, null);
     }
 
     /**
@@ -652,7 +524,7 @@ public class HttpOp {
      */
     public static void execHttpPost(String url, String contentType, InputStream input, long length, String acceptType,
             HttpResponseHandler handler) {
-        execHttpPost(url, contentType, input, length, acceptType, handler, null, null, null);
+        execHttpPost(url, contentType, input, length, acceptType, handler, null, null);
     }
 
     /**
@@ -678,16 +550,15 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
+     *
      */
     public static void execHttpPost(String url, String contentType, InputStream input, long length, String acceptType,
-            HttpResponseHandler handler, HttpClient httpClient, HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpResponseHandler handler, HttpClient httpClient, HttpContext httpContext) {
         InputStreamEntity e = new InputStreamEntity(input, length);
         e.setContentType(contentType);
         e.setContentEncoding("UTF-8");
         try {
-            execHttpPost(url, e, acceptType, handler, httpClient, httpContext, authenticator);
+            execHttpPost(url, e, acceptType, handler, httpClient, httpContext);
         } finally {
             closeEntity(e);
         }
@@ -732,7 +603,7 @@ public class HttpOp {
      *            Response Handler
      */
     public static void execHttpPost(String url, HttpEntity entity, String acceptString, HttpResponseHandler handler) {
-        execHttpPost(url, entity, acceptString, handler, null, null, null);
+        execHttpPost(url, entity, acceptString, handler, null, null);
     }
 
     /**
@@ -751,13 +622,10 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
-    public static void execHttpPost(String url, HttpEntity entity, HttpClient httpClient, HttpContext httpContext,
-            HttpAuthenticator authenticator) {
+    public static void execHttpPost(String url, HttpEntity entity, HttpClient httpClient, HttpContext httpContext) {
 
-        execHttpPost(url, entity, null, nullHandler, httpClient, httpContext, authenticator);
+        execHttpPost(url, entity, null, nullHandler, httpClient, httpContext);
     }
 
     /**
@@ -778,13 +646,11 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static TypedInputStream execHttpPostStream(String url, HttpEntity entity, String acceptHeader,
-                                    HttpClient httpClient, HttpContext httpContext, HttpAuthenticator authenticator) {
+                                    HttpClient httpClient, HttpContext httpContext) {
         CaptureInput handler = new CaptureInput();
-        execHttpPost(url, entity, acceptHeader, handler, httpClient, httpContext, authenticator) ;
+        execHttpPost(url, entity, acceptHeader, handler, httpClient, httpContext) ;
         return handler.get() ;
     }
 
@@ -808,16 +674,14 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static void execHttpPost(String url, HttpEntity entity, String acceptHeader, HttpResponseHandler handler,
-            HttpClient httpClient, HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpClient httpClient, HttpContext httpContext) {
         String requestURI = determineRequestURI(url);
         HttpPost httppost = new HttpPost(requestURI);
         if (entity != null)
             httppost.setEntity(entity);
-        exec(url, httppost, acceptHeader, handler, httpClient, httpContext, authenticator);
+        exec(url, httppost, acceptHeader, handler, httpClient, httpContext);
     }
     
     
@@ -847,7 +711,7 @@ public class HttpOp {
      * @param acceptHeader
      */
     public static TypedInputStream execHttpPostFormStream(String url, Params params, String acceptHeader) {
-        return execHttpPostFormStream(url, params, acceptHeader, null, null, null);
+        return execHttpPostFormStream(url, params, acceptHeader, null, null);
     }
 
     
@@ -902,14 +766,12 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static TypedInputStream execHttpPostFormStream(String url, Params params, String acceptHeader, HttpClient httpClient,
-            HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpContext httpContext) {
         CaptureInput handler = new CaptureInput();
         try {
-            execHttpPostForm(url, params, acceptHeader, handler, httpClient, httpContext, authenticator);
+            execHttpPostForm(url, params, acceptHeader, handler, httpClient, httpContext);
         } catch (HttpException ex) {
             if (ex.getResponseCode() == HttpSC.NOT_FOUND_404)
                 return null;
@@ -931,7 +793,7 @@ public class HttpOp {
      *            Response handler called to process the response
      */
     public static void execHttpPostForm(String url, Params params, String acceptString, HttpResponseHandler handler) {
-        execHttpPostForm(url, params, acceptString, handler, null, null, null);
+        execHttpPostForm(url, params, acceptString, handler, null, null);
     }
 
     /**
@@ -949,17 +811,15 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static void execHttpPostForm(String url, Params params, String acceptHeader, HttpResponseHandler handler,
-            HttpClient httpClient, HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpClient httpClient, HttpContext httpContext) {
         if (handler == null)
             throw new IllegalArgumentException("A HttpResponseHandler must be provided (e.g. HttpResponseLib.nullhandler)");
         String requestURI = url;
         HttpPost httppost = new HttpPost(requestURI);
         httppost.setEntity(convertFormParams(params));
-        exec(url, httppost, acceptHeader, handler, httpClient, httpContext, authenticator);
+        exec(url, httppost, acceptHeader, handler, httpClient, httpContext);
     }
 
     /**
@@ -973,7 +833,7 @@ public class HttpOp {
      *            Content for the PUT
      */
     public static void execHttpPut(String url, String contentType, String content) {
-        execHttpPut(url, contentType, content, null, null, defaultAuthenticator);
+        execHttpPut(url, contentType, content, null, null);
     }
 
     /**
@@ -989,16 +849,14 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static void execHttpPut(String url, String contentType, String content, HttpClient httpClient,
-            HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpContext httpContext) {
         StringEntity e = null;
         try {
             e = new StringEntity(content, StandardCharsets.UTF_8);
             e.setContentType(contentType);
-            execHttpPut(url, e, httpClient, httpContext, authenticator);
+            execHttpPut(url, e, httpClient, httpContext);
         }
         finally {
             closeEntity(e);
@@ -1018,7 +876,7 @@ public class HttpOp {
      *            Amount of content to PUT
      */
     public static void execHttpPut(String url, String contentType, InputStream input, long length) {
-        execHttpPut(url, contentType, input, length, null, null, null);
+        execHttpPut(url, contentType, input, length, null, null);
     }
 
     /**
@@ -1036,16 +894,14 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
     public static void execHttpPut(String url, String contentType, InputStream input, long length, HttpClient httpClient,
-            HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpContext httpContext) {
         InputStreamEntity e = new InputStreamEntity(input, length);
         e.setContentType(contentType);
         e.setContentEncoding("UTF-8");
         try {
-            execHttpPut(url, e, httpClient, httpContext, authenticator);
+            execHttpPut(url, e, httpClient, httpContext);
         } finally {
             closeEntity(e);
         }
@@ -1060,7 +916,7 @@ public class HttpOp {
      *            HTTP Entity to PUT
      */
     public static void execHttpPut(String url, HttpEntity entity) {
-        execHttpPut(url, entity, null, null, null);
+        execHttpPut(url, entity, null, null);
     }
 
     /**
@@ -1074,15 +930,12 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
-    public static void execHttpPut(String url, HttpEntity entity, HttpClient httpClient, HttpContext httpContext,
-            HttpAuthenticator authenticator) {
+    public static void execHttpPut(String url, HttpEntity entity, HttpClient httpClient, HttpContext httpContext) {
         String requestURI = determineRequestURI(url);
         HttpPut httpput = new HttpPut(requestURI);
         httpput.setEntity(entity);
-        exec(url, httpput, null, nullHandler, httpClient, httpContext, authenticator);
+        exec(url, httpput, null, nullHandler, httpClient, httpContext);
     }
 
     /**
@@ -1106,7 +959,7 @@ public class HttpOp {
      *            Response Handler
      */
     public static void execHttpHead(String url, String acceptString, HttpResponseHandler handler) {
-        execHttpHead(url, acceptString, handler, null, null, null);
+        execHttpHead(url, acceptString, handler, null, null);
     }
 
     /**
@@ -1122,15 +975,13 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
 
     public static void execHttpHead(String url, String acceptString, HttpResponseHandler handler, HttpClient httpClient,
-            HttpContext httpContext, HttpAuthenticator authenticator) {
+            HttpContext httpContext) {
         String requestURI = determineRequestURI(url);
         HttpHead httpHead = new HttpHead(requestURI);
-        exec(url, httpHead, acceptString, handler, httpClient, httpContext, authenticator);
+        exec(url, httpHead, acceptString, handler, httpClient, httpContext);
     }
 
     /**
@@ -1152,7 +1003,7 @@ public class HttpOp {
      *            Response Handler
      */
     public static void execHttpDelete(String url, HttpResponseHandler handler) {
-        execHttpDelete(url, handler, null, null, null);
+        execHttpDelete(url, handler, null, null);
     }
 
     /**
@@ -1166,34 +1017,22 @@ public class HttpOp {
      *            HTTP Client
      * @param httpContext
      *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
      */
-    public static void execHttpDelete(String url, HttpResponseHandler handler, HttpClient httpClient, HttpContext httpContext,
-            HttpAuthenticator authenticator) {
+    public static void execHttpDelete(String url, HttpResponseHandler handler, HttpClient httpClient, HttpContext httpContext) {
         HttpUriRequest httpDelete = new HttpDelete(url);
-        exec(url, httpDelete, null, handler, null, httpContext, authenticator);
+        exec(url, httpDelete, null, handler, null, httpContext);
     }
 
     // ---- Perform the operation!
-
-    private static void exec(String url, HttpUriRequest request, String acceptHeader, HttpResponseHandler handler,
-                             HttpClient httpClient, HttpContext httpContext, HttpAuthenticator authenticator) {
-        // Prepare authentication, if any.
-        httpClient = ensureClient(httpClient, authenticator);
-        httpContext = ensureContext(httpContext);
-        applyAuthentication(asAbstractClient(httpClient), url, httpContext, authenticator);
-        exec(url, request, acceptHeader, handler, httpClient, httpContext); 
-    }
-    
     private static void exec(String url, HttpUriRequest request, String acceptHeader, HttpResponseHandler handler, HttpClient httpClient, HttpContext httpContext) {
+        httpClient = ensureClient(httpClient);
+        httpContext = ensureContext(httpContext);
         try {
             if (handler == null)
                 // This cleans up.
                 handler = nullHandler;
 
             long id = counter.incrementAndGet();
-            String requestURI = determineRequestURI(url);
             String baseURI = determineBaseIRI(url);
             if (log.isDebugEnabled())
                 log.debug(format("[%d] %s %s", id, request.getMethod(), request.getURI().toString()));
@@ -1235,38 +1074,20 @@ public class HttpOp {
      * <p>
      * Prefers the {@link HttpClient} provided for the request if available.
      * Then it tries to use a Jena-wide user configurable
-     * {@link HttpClient} if available. This is used only when no
-     * authentication is required unless the user has indicated they want to use
-     * the default client with authentication regardless.
+     * {@link HttpClient} if available.
      * </p>
      * <p>
-     * In all other cases it creates a fresh instance of a
-     * {@link SystemDefaultHttpClient} each time.
+     * In all other cases it creates a fresh instance of a client each time.
      * </p>
      * 
      * @param client
      *            HTTP Client
      * @return HTTP Client
      */
-    private static HttpClient ensureClient(HttpClient client, HttpAuthenticator auth) {
-        // Use user provided client if available
-        if (client != null)
-            return client;
-
-        // Use configured default client if no authentication involved or
-        // configured to use it with authentication
-        if (defaultHttpClient != null && (auth == null || useDefaultClientWithAuthentication))
-            return defaultHttpClient;
-
-        // Otherwise use a fresh client each time
-        return new SystemDefaultHttpClient();
-    }
-
-    private static AbstractHttpClient asAbstractClient(HttpClient client) {
-        if (AbstractHttpClient.class.isAssignableFrom(client.getClass())) {
-            return (AbstractHttpClient) client;
-        }
-        return null;
+    public static HttpClient ensureClient(HttpClient client) {
+        return client != null ? client
+                : getDefaultHttpClient() != null ? getDefaultHttpClient()
+                        : HttpClients.createSystem();
     }
 
     /**
@@ -1293,48 +1114,6 @@ public class HttpOp {
         }
     }
 
-    /**
-     * Applies authentication to the given client as appropriate
-     * <p>
-     * If a null authenticator is provided this method tries to use the
-     * registered default authenticator which may be set via the
-     * {@link HttpOp#setDefaultAuthenticator(HttpAuthenticator)} method.
-     * </p>
-     * 
-     * @param client
-     *            HTTP Client
-     * @param target
-     *            Target URI
-     * @param context
-     *            HTTP Context
-     * @param authenticator
-     *            HTTP Authenticator
-     */
-    public static void applyAuthentication(AbstractHttpClient client, String target, HttpContext context,
-            HttpAuthenticator authenticator) {
-        // Cannot apply to null client
-        if (client == null)
-            return;
-
-        // Fallback to default authenticator if null authenticator provided
-        if (authenticator == null)
-            authenticator = defaultAuthenticator;
-
-        // Authenticator could still be null even if we fell back to default
-        if (authenticator == null)
-            return;
-
-        try {
-            // Apply the authenticator
-            URI uri = new URI(target);
-            authenticator.apply(client, context, uri);
-        } catch (URISyntaxException e) {
-            throw new RiotException("Invalid request URI", e);
-        } catch (NullPointerException e) {
-            throw new RiotException("Null request URI", e);
-        }
-    }
-
     private static HttpEntity convertFormParams(Params params) {
         List<NameValuePair> nvps = new ArrayList<>();
         for (Pair p : params.pairs())

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/HttpQuery.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/HttpQuery.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/HttpQuery.java
index 153417d..179d730 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/HttpQuery.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/HttpQuery.java
@@ -21,26 +21,20 @@ package org.apache.jena.sparql.engine.http;
 import java.io.InputStream ;
 import java.net.MalformedURLException ;
 import java.net.URL ;
-import java.util.concurrent.TimeUnit ;
+import java.util.Map;
 import java.util.regex.Pattern ;
 
 import org.apache.http.client.HttpClient ;
-import org.apache.http.conn.params.ConnManagerPNames ;
-import org.apache.http.impl.client.AbstractHttpClient ;
-import org.apache.http.impl.client.DecompressingHttpClient ;
-import org.apache.http.impl.client.SystemDefaultHttpClient ;
-import org.apache.http.params.CoreConnectionPNames ;
-import org.apache.http.protocol.BasicHttpContext ;
-import org.apache.http.protocol.HttpContext ;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.protocol.HttpClientContext;
 import org.apache.jena.atlas.web.HttpException ;
 import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
-import org.apache.jena.atlas.web.auth.SimpleAuthenticator ;
 import org.apache.jena.query.ARQ ;
 import org.apache.jena.query.QueryExecException ;
 import org.apache.jena.riot.WebContent ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.shared.JenaException ;
+import org.apache.jena.sparql.util.Context;
 import org.slf4j.Logger ;
 import org.slf4j.LoggerFactory ;
 
@@ -51,7 +45,7 @@ import org.slf4j.LoggerFactory ;
  * 
  * If the query string is large, then HTTP POST is used.
  */
-@SuppressWarnings("deprecation")
+
 public class HttpQuery extends Params {
     static final Logger log = LoggerFactory.getLogger(HttpQuery.class.getName());
 
@@ -65,7 +59,6 @@ public class HttpQuery extends Params {
     // An object indicate no value associated with parameter name
     final static Object noValue = new Object();
 
-    private HttpAuthenticator authenticator = null;
     private int responseCode = 0;
     private String responseMessage = null;
     private boolean forcePOST = false;
@@ -78,6 +71,8 @@ public class HttpQuery extends Params {
     private HttpClient client;
     private boolean requireClientShutdown = true;
 
+    private HttpClientContext context = new HttpClientContext();
+
     /**
      * Create a execution object for a whole model GET
      * 
@@ -183,25 +178,11 @@ public class HttpQuery extends Params {
     }
 
     /**
-     * Sets basic authentication. It may be preferable to use the
-     * {@link #setAuthenticator(HttpAuthenticator)} method since that provides
-     * more flexibility in the type of authentication supported.
-     * 
-     * @param user
-     *            User name
-     * @param password
-     *            Password
+     * Sets the client to use
+     * @param client Client
      */
-    public void setBasicAuthentication(String user, char[] password) {
-        this.setAuthenticator(new SimpleAuthenticator(user, password));
-    }
-
-    /**
-     * Sets the authenticator to use
-     * @param authenticator Authenticator
-     */
-    public void setAuthenticator(HttpAuthenticator authenticator) {
-        this.authenticator = authenticator;
+    public void setClient(HttpClient client) {
+        this.client = client;
     }
     
     /**
@@ -209,7 +190,16 @@ public class HttpQuery extends Params {
      * @return HTTP Client or null
      */
     public HttpClient getClient() {
-        return this.client;
+        Context arqContext = ARQ.getContext();
+        if (arqContext.isDefined(Service.serviceContext)) {
+            @SuppressWarnings("unchecked")
+            Map<String, Context> context = (Map<String, Context>) arqContext.get(Service.serviceContext);
+            if (context.containsKey(serviceURL)) {
+                Context serviceContext = context.get(serviceURL);
+                if (serviceContext.isDefined(Service.queryClient)) return serviceContext.get(Service.queryClient);
+            }
+        }
+        return client;
     }
     
     /**
@@ -286,6 +276,10 @@ public class HttpQuery extends Params {
      * @throws QueryExceptionHTTP
      */
     public InputStream exec() throws QueryExceptionHTTP {
+        // Select the appropriate HttpClient to use
+        client = HttpOp.ensureClient(getClient());
+        contextualizeCompressionSettings();
+        contextualizeTimeoutSettings();
         try {
             if (usesPOST())
                 return execPost();
@@ -298,6 +292,19 @@ public class HttpQuery extends Params {
             throw jEx;
         }
     }
+    
+    private void contextualizeCompressionSettings() {
+        final RequestConfig.Builder builder = RequestConfig.copy(context.getRequestConfig());
+        builder.setContentCompressionEnabled(allowGZip || allowDeflate);
+        context.setRequestConfig(builder.build());
+    }
+    
+    private void contextualizeTimeoutSettings() {
+        final RequestConfig.Builder builder = RequestConfig.copy(context.getRequestConfig());
+        if (connectTimeout > 0) builder.setConnectTimeout(connectTimeout);
+
+        context.setRequestConfig(builder.build());
+    }
 
     private InputStream execGet() throws QueryExceptionHTTP {
         URL target = null;
@@ -314,34 +321,10 @@ public class HttpQuery extends Params {
             throw new QueryExceptionHTTP(0, "Malformed URL: " + malEx);
         }
         log.trace("GET " + target.toExternalForm());
-
         try {
             try {
-                // Select the appropriate HttpClient to use
-                this.selectClient();
-                
-                // Always apply a 10 second timeout to obtaining a connection lease from HTTP Client
-                // This prevents a potential lock up
-                this.client.getParams().setLongParameter(ConnManagerPNames.TIMEOUT, TimeUnit.SECONDS.toMillis(10));
-                
-                // If user has specified time outs apply them now
-                if (this.connectTimeout > 0)
-                    this.client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, this.connectTimeout);
-                if (this.readTimeout > 0)
-                    this.client.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, this.readTimeout);
-                
-                // Enable compression support appropriately
-                HttpContext context = new BasicHttpContext();
-                if (allowGZip || allowDeflate) {
-                    // Apply auth early as the decompressing client we're about
-                    // to add will block this being applied later
-                    HttpOp.applyAuthentication((AbstractHttpClient) client, serviceURL, context, authenticator);
-                    client = new DecompressingHttpClient(client);
-                }
-                
                 // Get the actual response stream
-                TypedInputStream stream = HttpOp.execHttpGet(target.toString(), contentTypeResult, client, context,
-                        this.authenticator);
+                TypedInputStream stream = HttpOp.execHttpGet(target.toString(), contentTypeResult, client, context);
                 if (stream == null)
                     throw new QueryExceptionHTTP(404);
                 return execCommon(stream);
@@ -368,30 +351,8 @@ public class HttpQuery extends Params {
         ARQ.getHttpRequestLogger().trace(target.toExternalForm());
 
         try {
-            // Select the appropriate HttpClient to use
-            this.selectClient();
-                    
-            // Always apply a 10 second timeout to obtaining a connection lease from HTTP Client
-            // This prevents a potential lock up
-            this.client.getParams().setLongParameter(ConnManagerPNames.TIMEOUT, TimeUnit.SECONDS.toMillis(10));
-            
-            // If user has specified time outs apply them now
-            if (this.connectTimeout > 0)
-                this.client.getParams().setIntParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, this.connectTimeout);
-            if (this.readTimeout > 0)
-                this.client.getParams().setIntParameter(CoreConnectionPNames.SO_TIMEOUT, this.readTimeout);
-            
-            // Enable compression support appropriately
-            HttpContext context = new BasicHttpContext();
-            if (allowGZip || allowDeflate) {
-                // Apply auth early as the decompressing client we're about
-                // to add will block this being applied later
-                HttpOp.applyAuthentication((AbstractHttpClient) client, serviceURL, context, authenticator);
-                this.client = new DecompressingHttpClient(client);
-            }
-
             // Get the actual response stream
-            TypedInputStream stream = HttpOp.execHttpPostFormStream(serviceURL, this, contentTypeResult, client, context, authenticator);
+            TypedInputStream stream = HttpOp.execHttpPostFormStream(serviceURL, this, contentTypeResult, client, context);
             if (stream == null)
                 throw new QueryExceptionHTTP(404);
             return execCommon(stream);
@@ -420,19 +381,6 @@ public class HttpQuery extends Params {
         	return new QueryExceptionHTTP("Unexpected error making the query", httpEx);
         }
     }
-    
-    private void selectClient() {
-        // May use configured default client where appropriate
-        this.client = HttpOp.getDefaultHttpClient();
-        if (this.client == null || (this.authenticator != null && !HttpOp.getUseDefaultClientWithAuthentication())) {
-            // If no configured default or authentication is in-use and the user has not configured
-            // to use authentication with the default client use a fresh SystemDefaultHttpClient instance
-            this.client = new SystemDefaultHttpClient();
-        } else {
-            // When using the configured default client we don't want to shut it down at the end of a request
-            this.requireClientShutdown = false;
-        }
-    }
 
     private InputStream execCommon(TypedInputStream stream) throws QueryExceptionHTTP {
         // Assume response code must be 200 if we got here

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
index b196f83..2d8284d 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/QueryEngineHTTP.java
@@ -30,8 +30,6 @@ import org.apache.http.client.HttpClient ;
 import org.apache.jena.atlas.RuntimeIOException;
 import org.apache.jena.atlas.io.IO ;
 import org.apache.jena.atlas.lib.Pair ;
-import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
-import org.apache.jena.atlas.web.auth.SimpleAuthenticator ;
 import org.apache.jena.graph.Triple ;
 import org.apache.jena.query.* ;
 import org.apache.jena.rdf.model.Model ;
@@ -39,7 +37,6 @@ import org.apache.jena.riot.Lang ;
 import org.apache.jena.riot.RDFDataMgr ;
 import org.apache.jena.riot.RDFLanguages ;
 import org.apache.jena.riot.WebContent ;
-import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.sparql.ARQException ;
 import org.apache.jena.sparql.core.Quad;
 import org.apache.jena.sparql.engine.ResultSetCheckCondition ;
@@ -72,7 +69,7 @@ public class QueryEngineHTTP implements QueryExecution {
     // Protocol
     private List<String> defaultGraphURIs = new ArrayList<>();
     private List<String> namedGraphURIs = new ArrayList<>();
-    private HttpAuthenticator authenticator;
+    private HttpClient client;
 
     private boolean closed = false;
 
@@ -117,23 +114,23 @@ public class QueryEngineHTTP implements QueryExecution {
         this(serviceURI, query, query.toString());
     }
     
-    public QueryEngineHTTP(String serviceURI, Query query, HttpAuthenticator authenticator) {
-        this(serviceURI, query, query.toString(), authenticator);
+    public QueryEngineHTTP(String serviceURI, Query query, HttpClient client) {
+        this(serviceURI, query, query.toString(), client);
     }
 
     public QueryEngineHTTP(String serviceURI, String queryString) {
         this(serviceURI, null, queryString);
     }
     
-    public QueryEngineHTTP(String serviceURI, String queryString, HttpAuthenticator authenticator) {
-        this(serviceURI, null, queryString, authenticator);
+    public QueryEngineHTTP(String serviceURI, String queryString, HttpClient client) {
+        this(serviceURI, null, queryString, client);
     }
     
     private QueryEngineHTTP(String serviceURI, Query query, String queryString) {
         this(serviceURI, query, queryString, null);
     }
 
-    private QueryEngineHTTP(String serviceURI, Query query, String queryString, HttpAuthenticator authenticator) {
+    private QueryEngineHTTP(String serviceURI, Query query, String queryString, HttpClient client) {
         this.query = query;
         this.queryString = queryString;
         this.service = serviceURI;
@@ -141,13 +138,12 @@ public class QueryEngineHTTP implements QueryExecution {
         this.context = new Context(ARQ.getContext());
 
         // Apply service configuration if relevant
-        QueryEngineHTTP.applyServiceConfig(serviceURI, this);
+        applyServiceConfig(serviceURI, this);
         
-        // Don't want to overwrite credentials we may have picked up from
+        // Don't want to overwrite client config we may have picked up from
         // service context in the parent constructor if the specified
-        // authenticator is null
-        if (authenticator != null)
-            this.setAuthenticator(authenticator);
+        // client is null
+        if (client != null) setClient(client);
     }
 
     /**
@@ -182,16 +178,13 @@ public class QueryEngineHTTP implements QueryExecution {
             engine.setAllowDeflate(serviceContext.isTrueOrUndef(Service.queryDeflate));
             applyServiceTimeouts(engine, serviceContext);
 
-            // Apply authentication settings
-            String user = serviceContext.getAsString(Service.queryAuthUser);
-            String pwd = serviceContext.getAsString(Service.queryAuthPwd);
+            // Apply context-supplied client settings
+            HttpClient client = serviceContext.get(Service.queryClient);
 
-            if (user != null || pwd != null) {
-                user = user == null ? "" : user;
-                pwd = pwd == null ? "" : pwd;
+            if (client != null) {
                 if (log.isDebugEnabled())
-                    log.debug("Setting basic HTTP authentication for endpoint URI {} with username: {} ", serviceURI, user);
-                engine.setBasicAuthentication(user, pwd.toCharArray());
+                    log.debug("Using context-supplied HTTP client for endpoint URI {}", serviceURI);
+                engine.setClient(client);
             }
         }
     }
@@ -303,44 +296,24 @@ public class QueryEngineHTTP implements QueryExecution {
     }
 
     /**
-     * Gets whether an authentication mechanism has been provided.
-     * <p>
-     * Even if this returns false authentication may still be used if the
-     * default authenticator applies, this is controlled via the
-     * {@link HttpOp#setDefaultAuthenticator(HttpAuthenticator)} method
-     * </p>
+     * Sets the HTTP client to use, if none is set then the default
+     * client is used.
      * 
-     * @return True if an authenticator has been provided
+     * @param client
+     *            HTTP client
      */
-    public boolean isUsingBasicAuthentication() {
-        return this.authenticator != null;
+    public void setClient(HttpClient client) {
+        this.client = client;
     }
-
-    /**
-     * Set user and password for basic authentication. After the request is made
-     * (one of the exec calls), the application can overwrite the password array
-     * to remove details of the secret.
-     * <p>
-     * Note that it may be more flexible to
-     * </p>
-     * 
-     * @param user
-     * @param password
-     */
-    public void setBasicAuthentication(String user, char[] password) {
-        this.authenticator = new SimpleAuthenticator(user, password);
-    }
-
+    
     /**
-     * Sets the HTTP authenticator to use, if none is set then the default
-     * authenticator is used. This may be configured via the
-     * {@link HttpOp#setDefaultAuthenticator(HttpAuthenticator)} method.
+     * Get the HTTP client in use, if none is set then null.
      * 
-     * @param authenticator
-     *            HTTP authenticator
+     * @param client
+     *            HTTP client
      */
-    public void setAuthenticator(HttpAuthenticator authenticator) {
-        this.authenticator = authenticator;
+    public HttpClient getClient() {
+        return client;
     }
 
     /** The Content-Type response header received (null before the remote operation is attempted). */
@@ -646,7 +619,7 @@ public class QueryEngineHTTP implements QueryExecution {
         if (allowDeflate)
             httpQuery.setAllowDeflate(true);
 
-        httpQuery.setAuthenticator(this.authenticator);
+        httpQuery.setClient(client);
 
         // Apply timeouts
         if (connectTimeout > 0) {

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/Service.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/Service.java b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/Service.java
index 162aa0d..081a822 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/Service.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/engine/http/Service.java
@@ -23,6 +23,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
+import org.apache.http.client.HttpClient;
 import org.apache.jena.atlas.io.IO;
 import org.apache.jena.query.Query ;
 import org.apache.jena.query.QueryExecException ;
@@ -59,14 +60,9 @@ public class Service {
     public static final Symbol queryGzip = SystemARQ.allocSymbol(base, "queryGzip");
 
     /**
-     * Use to set the user id for basic auth.
+     * Use to set the HTTP client for a service.
      */
-    public static final Symbol queryAuthUser = SystemARQ.allocSymbol(base, "queryAuthUser");
-
-    /**
-     * Use to set the user password for basic auth.
-     */
-    public static final Symbol queryAuthPwd = SystemARQ.allocSymbol(base, "queryAuthPwd");
+    public static final Symbol queryClient = SystemARQ.allocSymbol(base, "queryClient");
 
     /**
      * Use this Symbol to allow passing additional service context variables
@@ -234,14 +230,8 @@ public class Service {
         httpQuery.setAllowGZip(context.isTrueOrUndef(queryGzip));
         httpQuery.setAllowDeflate(context.isTrueOrUndef(queryDeflate));
 
-        String user = context.getAsString(queryAuthUser);
-        String pwd = context.getAsString(queryAuthPwd);
-
-        if (user != null || pwd != null) {
-            user = user == null ? "" : user;
-            pwd = pwd == null ? "" : pwd;
-            httpQuery.setBasicAuthentication(user, pwd.toCharArray());
-        }
+        HttpClient client = context.get(queryClient);
+        if (client != null) httpQuery.setClient(client);    
 
         setAnyTimeouts(httpQuery, context);
 

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemote.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemote.java b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemote.java
index e05f245..506de60 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemote.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemote.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.sparql.modify;
 
-import org.apache.jena.atlas.web.auth.HttpAuthenticator;
+import org.apache.http.client.HttpClient;
 import org.apache.jena.riot.WebContent ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.sparql.ARQException ;
@@ -46,16 +46,15 @@ public class UpdateProcessRemote extends UpdateProcessRemoteBase
      * @param request Update request
      * @param endpoint Update endpoint
      * @param context Context
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      */
-    public UpdateProcessRemote(UpdateRequest request, String endpoint, Context context, HttpAuthenticator authenticator)
+    public UpdateProcessRemote(UpdateRequest request, String endpoint, Context context, HttpClient client)
     {
         this(request, endpoint, context);
-        // Don't want to overwrite credentials we may have picked up from
+        // Don't want to overwrite config we may have picked up from
         // service context in the parent constructor if the specified
-        // authenticator is null
-        if (authenticator != null)
-            this.setAuthenticator(authenticator);
+        // client is null
+        if (client != null) this.setClient(client);
     }
 
     @Override
@@ -76,7 +75,7 @@ public class UpdateProcessRemote extends UpdateProcessRemoteBase
         
         // Execution
         String reqStr = this.getUpdateRequest().toString() ;
-        HttpOp.execHttpPost(endpoint, WebContent.contentTypeSPARQLUpdate, reqStr, null, getHttpContext(), getAuthenticator()) ;
+        HttpOp.execHttpPost(endpoint, WebContent.contentTypeSPARQLUpdate, reqStr, getClient(), getHttpContext()) ;
     }
 }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteBase.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteBase.java b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteBase.java
index a581179..8e18cd1 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteBase.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteBase.java
@@ -22,9 +22,8 @@ import java.util.ArrayList ;
 import java.util.List ;
 import java.util.Map ;
 
+import org.apache.http.client.HttpClient;
 import org.apache.http.protocol.HttpContext ;
-import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
-import org.apache.jena.atlas.web.auth.SimpleAuthenticator ;
 import org.apache.jena.riot.web.HttpOp ;
 import org.apache.jena.sparql.core.DatasetGraph ;
 import org.apache.jena.sparql.engine.http.HttpParams ;
@@ -55,7 +54,7 @@ public abstract class UpdateProcessRemoteBase implements UpdateProcessor {
     private final UpdateRequest request;
     private final String endpoint;
     private final Context context;
-    private HttpAuthenticator authenticator;
+    private HttpClient client;
     private Params params;
 
     protected List<String> defaultGraphURIs = new ArrayList<>();
@@ -106,17 +105,13 @@ public abstract class UpdateProcessRemoteBase implements UpdateProcessor {
             if (log.isDebugEnabled())
                 log.debug("Endpoint URI {} has SERVICE Context: {} ", serviceURI, serviceContext);
 
-            // Apply authentication settings
-            String user = serviceContext.getAsString(Service.queryAuthUser);
-            String pwd = serviceContext.getAsString(Service.queryAuthPwd);
+            // Apply client settings
+            HttpClient client = serviceContext.get(Service.queryClient);
 
-            if (user != null || pwd != null) {
-                user = user == null ? "" : user;
-                pwd = pwd == null ? "" : pwd;
+            if (client != null) {
                 if (log.isDebugEnabled())
-                    log.debug("Setting basic HTTP authentication for endpoint URI {} with username: {} ", serviceURI, user);
-
-                engine.setAuthentication(user, pwd.toCharArray());
+                    log.debug("Using context-supplied client for endpoint URI {}", serviceURI);
+                engine.setClient(client);
             }
         }
     }
@@ -263,56 +258,31 @@ public abstract class UpdateProcessRemoteBase implements UpdateProcessor {
     }
 
     /**
-     * Sets authentication credentials for remote updates
+     * Sets the client to use
      * <p>
-     * May be better to use {@link #setAuthenticator(HttpAuthenticator)} as that
-     * allows for more complex authentication to be used
+     * Note that you can globally set an client via
+     * {@link HttpOp#setDefaultHttpClient(HttpClient)} to avoid the
+     * need to set client on a per-request basis
      * </p>
      * 
-     * @param username
-     *            User name
-     * @param password
-     *            Password
+     * @param client
+     *            HTTP client
      */
-    public void setAuthentication(String username, char[] password) {
-        this.setAuthenticator(new SimpleAuthenticator(username, password));
+    public void setClient(HttpClient client) {
+        this.client = client;
     }
 
     /**
-     * Sets the authenticator to use
+     * Gets the client that has been set (if any)
      * <p>
-     * Note that you can globally set an authenticator via
-     * {@link HttpOp#setDefaultAuthenticator(HttpAuthenticator)} to avoid the
-     * need to set authentication on a per-request basis
-     * </p>
-     * 
-     * @param authenticator
-     *            HTTP Authenticator
-     */
-    public void setAuthenticator(HttpAuthenticator authenticator) {
-        this.authenticator = authenticator;
-    }
-
-    /**
-     * Gets the authenticator that has been set (if any)
-     * <p>
-     * If no authenticator is used then the default authenticator will be used,
+     * If no client is used then the default client will be used,
      * this can be configured via the
-     * {@link HttpOp#setDefaultAuthenticator(HttpAuthenticator)} method.
+     * {@link HttpOp#setDefaultHttpClient(HttpClient)} method.
      * </p>
      * 
-     * @return HTTP Authenticator if set, null otherwise
-     */
-    public HttpAuthenticator getAuthenticator() {
-        return this.authenticator;
-    }
-
-    /**
-     * Gets whether any authenticator has been set
-     * 
-     * @return True if an authenticator has been set, false otherwise
+     * @return HTTP client if set, null otherwise
      */
-    public boolean isUsingAuthentication() {
-        return this.authenticator != null;
+    public HttpClient getClient() {
+        return this.client;
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteForm.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteForm.java b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteForm.java
index 77fd27f..b827d14 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteForm.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/modify/UpdateProcessRemoteForm.java
@@ -18,8 +18,9 @@
 
 package org.apache.jena.sparql.modify;
 
-import org.apache.jena.atlas.web.auth.HttpAuthenticator;
-import org.apache.jena.riot.web.HttpOp;
+import static org.apache.jena.riot.web.HttpOp.execHttpPostForm;
+
+import org.apache.http.client.HttpClient;
 import org.apache.jena.riot.web.HttpResponseLib;
 import org.apache.jena.sparql.ARQException ;
 import org.apache.jena.sparql.engine.http.HttpParams ;
@@ -62,13 +63,12 @@ public class UpdateProcessRemoteForm extends UpdateProcessRemoteBase {
      * @param authenticator
      *            HTTP Authenticator
      */
-    public UpdateProcessRemoteForm(UpdateRequest request, String endpoint, Context context, HttpAuthenticator authenticator) {
+    public UpdateProcessRemoteForm(UpdateRequest request, String endpoint, Context context, HttpClient client) {
         this(request, endpoint, context);
-        // Don't want to overwrite credentials we may have picked up from
+        // Don't want to overwrite config we may have picked up from
         // service context in the parent constructor if the specified
-        // authenticator is null
-        if (authenticator != null)
-            this.setAuthenticator(authenticator);
+        // client is null
+        if (client != null) this.setClient(client);
     }
 
     @Override
@@ -83,7 +83,6 @@ public class UpdateProcessRemoteForm extends UpdateProcessRemoteBase {
         String reqStr = this.getUpdateRequest().toString();
         Params ps = new Params(this.getParams());
         ps.addParam(HttpParams.pUpdate, reqStr);
-        HttpOp.execHttpPostForm(this.getEndpoint(), ps, null, HttpResponseLib.nullResponse, null, getHttpContext(),
-                getAuthenticator());
+        execHttpPostForm(this.getEndpoint(), ps, null, HttpResponseLib.nullResponse, getClient(), getHttpContext());
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java b/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
index 6cb0e30..cfaae9c 100644
--- a/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
+++ b/jena-arq/src/main/java/org/apache/jena/sparql/util/Context.java
@@ -65,10 +65,11 @@ public class Context {
     }
 
     // -- basic operations
-
+    
     /** Get the object value of a property or null */
-    public Object get(Symbol property) {
-        return context.get(property) ;
+    @SuppressWarnings("unchecked")
+    public <T> T get(Symbol property) {
+        return (T) context.get(property) ;
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/update/UpdateExecutionFactory.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/update/UpdateExecutionFactory.java b/jena-arq/src/main/java/org/apache/jena/update/UpdateExecutionFactory.java
index 38da497..a30ac4b 100644
--- a/jena-arq/src/main/java/org/apache/jena/update/UpdateExecutionFactory.java
+++ b/jena-arq/src/main/java/org/apache/jena/update/UpdateExecutionFactory.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.update;
 
-import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
+import org.apache.http.client.HttpClient;
 import org.apache.jena.query.ARQ ;
 import org.apache.jena.query.Dataset ;
 import org.apache.jena.query.QuerySolution ;
@@ -290,12 +290,12 @@ public class UpdateExecutionFactory
     /** Create an UpdateProcessor that sends the update to a remote SPARQL Update service.
      * @param update Updates
      * @param remoteEndpoint Endpoint URL
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      * @return Remote Update processor
      */
-    public static UpdateProcessor createRemote(Update update, String remoteEndpoint, HttpAuthenticator authenticator)
+    public static UpdateProcessor createRemote(Update update, String remoteEndpoint, HttpClient client)
     {
-        return createRemote(new UpdateRequest(update), remoteEndpoint, null, authenticator) ;
+        return createRemote(new UpdateRequest(update), remoteEndpoint, null, client) ;
     }
     
     /** Create an UpdateProcessor that sends the update to a remote SPARQL Update service.
@@ -313,12 +313,12 @@ public class UpdateExecutionFactory
      * @param update Updates
      * @param remoteEndpoint Endpoint URL
      * @param context Context
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      * @return Remote Update processor
      */
-    public static UpdateProcessor createRemote(Update update, String remoteEndpoint, Context context, HttpAuthenticator authenticator)
+    public static UpdateProcessor createRemote(Update update, String remoteEndpoint, Context context, HttpClient client)
     {
-        return createRemote(new UpdateRequest(update), remoteEndpoint, context, authenticator) ;
+        return createRemote(new UpdateRequest(update), remoteEndpoint, context, client) ;
     }
         
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service.
@@ -334,12 +334,12 @@ public class UpdateExecutionFactory
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service.
      * @param updateRequest Updates
      * @param remoteEndpoint Endpoint URL
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      * @return Remote Update processor
      */
-    public static UpdateProcessor createRemote(UpdateRequest updateRequest, String remoteEndpoint, HttpAuthenticator authenticator)
+    public static UpdateProcessor createRemote(UpdateRequest updateRequest, String remoteEndpoint, HttpClient client)
     {
-        return createRemote(updateRequest, remoteEndpoint, null, authenticator) ;
+        return createRemote(updateRequest, remoteEndpoint, null, client) ;
     }
 
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service.
@@ -357,12 +357,12 @@ public class UpdateExecutionFactory
      * @param updateRequest Updates
      * @param remoteEndpoint Endpoint URL
      * @param context Context
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      * @return Remote Update processor
      */
-    public static UpdateProcessor createRemote(UpdateRequest updateRequest, String remoteEndpoint, Context context, HttpAuthenticator authenticator)
+    public static UpdateProcessor createRemote(UpdateRequest updateRequest, String remoteEndpoint, Context context, HttpClient client)
     {
-        return new UpdateProcessRemote(updateRequest, remoteEndpoint, context, authenticator) ;
+        return new UpdateProcessRemote(updateRequest, remoteEndpoint, context, client) ;
     }
     
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service using an HTML form
@@ -378,12 +378,12 @@ public class UpdateExecutionFactory
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service using an HTML form
      * @param update Updates
      * @param remoteEndpoint Endpoint URL
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      * @return Remote Update processor
      */
-    public static UpdateProcessor createRemoteForm(Update update, String remoteEndpoint, HttpAuthenticator authenticator)
+    public static UpdateProcessor createRemoteForm(Update update, String remoteEndpoint, HttpClient client)
     {
-        return createRemoteForm(update, remoteEndpoint, null, null) ;
+        return createRemoteForm(update, remoteEndpoint, null, client) ;
     }
     
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service using an HTML form
@@ -394,19 +394,19 @@ public class UpdateExecutionFactory
      */
     public static UpdateProcessor createRemoteForm(Update update, String remoteEndpoint, Context context)
     {
-        return createRemoteForm(new UpdateRequest(update), remoteEndpoint, null, null) ;
+        return createRemoteForm(new UpdateRequest(update), remoteEndpoint, context, null) ;
     }
     
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service using an HTML form
      * @param update Updates
      * @param remoteEndpoint Endpoint URL
      * @param context Context
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      * @return Remote Update processor
      */
-    public static UpdateProcessor createRemoteForm(Update update, String remoteEndpoint, Context context, HttpAuthenticator authenticator)
+    public static UpdateProcessor createRemoteForm(Update update, String remoteEndpoint, Context context, HttpClient client)
     {
-        return createRemoteForm(new UpdateRequest(update), remoteEndpoint, null, authenticator) ;
+        return createRemoteForm(new UpdateRequest(update), remoteEndpoint, null, client) ;
     }
     
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service using an HTML form
@@ -422,12 +422,12 @@ public class UpdateExecutionFactory
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service using an HTML form
      * @param updateRequest Updates
      * @param remoteEndpoint Endpoint URL
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      * @return Remote Update processor
      */
-    public static UpdateProcessor createRemoteForm(UpdateRequest updateRequest, String remoteEndpoint, HttpAuthenticator authenticator)
+    public static UpdateProcessor createRemoteForm(UpdateRequest updateRequest, String remoteEndpoint, HttpClient client)
     {
-        return createRemoteForm(updateRequest, remoteEndpoint, null, authenticator) ;
+        return createRemoteForm(updateRequest, remoteEndpoint, null, client) ;
     }
     
     /** Create an UpdateProcessor that sends the update request to a remote SPARQL Update service using an HTML form
@@ -445,11 +445,11 @@ public class UpdateExecutionFactory
      * @param updateRequest Updates
      * @param remoteEndpoint Endpoint URL
      * @param context Context
-     * @param authenticator HTTP Authenticator
+     * @param client HTTP client
      * @return Remote Update processor
      */
-    public static UpdateProcessor createRemoteForm(UpdateRequest updateRequest, String remoteEndpoint, Context context, HttpAuthenticator authenticator)
+    public static UpdateProcessor createRemoteForm(UpdateRequest updateRequest, String remoteEndpoint, Context context, HttpClient client)
     {
-        return new UpdateProcessRemoteForm(updateRequest, remoteEndpoint, context, authenticator) ;
+        return new UpdateProcessRemoteForm(updateRequest, remoteEndpoint, context, client) ;
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java b/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java
index 80f1232..32afa09 100644
--- a/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java
+++ b/jena-arq/src/main/java/org/apache/jena/web/DatasetGraphAccessorHTTP.java
@@ -21,14 +21,11 @@ package org.apache.jena.web ;
 import java.io.OutputStream ;
 
 import org.apache.http.HttpEntity ;
-import org.apache.http.client.methods.HttpHead ;
-import org.apache.http.client.methods.HttpUriRequest ;
+import org.apache.http.client.HttpClient;
 import org.apache.http.entity.ContentProducer ;
 import org.apache.http.entity.EntityTemplate ;
 import org.apache.jena.atlas.lib.IRILib ;
 import org.apache.jena.atlas.web.HttpException ;
-import org.apache.jena.atlas.web.auth.HttpAuthenticator ;
-import org.apache.jena.atlas.web.auth.SimpleAuthenticator ;
 import org.apache.jena.graph.Graph ;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.riot.RDFDataMgr ;
@@ -49,7 +46,7 @@ public class DatasetGraphAccessorHTTP implements DatasetGraphAccessor {
     private static final RDFFormat           defaultSendLang   = RDFFormat.RDFXML_PLAIN ;
 
     private final String                     remote ;
-    private HttpAuthenticator                authenticator ;
+    private HttpClient                client ;
 
     private RDFFormat                        formatPutPost     = defaultSendLang ;
 
@@ -78,7 +75,7 @@ public class DatasetGraphAccessorHTTP implements DatasetGraphAccessor {
      *            Remote URL
      */
     public DatasetGraphAccessorHTTP(String remote) {
-        this.remote = remote ;
+        this(remote, HttpOp.getDefaultHttpClient());
     }
 
     /**
@@ -86,34 +83,21 @@ public class DatasetGraphAccessorHTTP implements DatasetGraphAccessor {
      * 
      * @param remote
      *            Remote URL
-     * @param authenticator
-     *            HTTP Authenticator
+     * @param client
+     *            HTTP Client
      */
-    public DatasetGraphAccessorHTTP(String remote, HttpAuthenticator authenticator) {
-        this(remote) ;
-        this.setAuthenticator(authenticator) ;
-    }
-
-    /**
-     * Sets authentication credentials for the remote URL
-     * 
-     * @param username
-     *            User name
-     * @param password
-     *            Password
-     */
-    public void setAuthentication(String username, char[] password) {
-        this.setAuthenticator(new SimpleAuthenticator(username, password)) ;
+    public DatasetGraphAccessorHTTP(String remote, HttpClient client) {
+        this.remote = remote ;
+        this.setClient(client) ;
     }
 
     /**
-     * Sets an authenticator to use for authentication to the remote URL
+     * Sets an HTTP client for use to this dataset
      * 
-     * @param authenticator
-     *            Authenticator
+     * @param client Client
      */
-    public void setAuthenticator(HttpAuthenticator authenticator) {
-        this.authenticator = authenticator ;
+    public void setClient(HttpClient client) {
+        this.client = client ;
     }
 
     @Override
@@ -129,7 +113,7 @@ public class DatasetGraphAccessorHTTP implements DatasetGraphAccessor {
     protected Graph doGet(String url) {
         HttpCaptureResponse<Graph> graph = HttpResponseLib.graphHandler() ;
         try {
-            HttpOp.execHttpGet(url, graphAcceptHeader, graph, this.authenticator) ;
+            HttpOp.execHttpGet(url, graphAcceptHeader, graph, client, null) ;
         } catch (HttpException ex) {
             if ( ex.getResponseCode() == HttpSC.NOT_FOUND_404 )
                 return null ;
@@ -149,9 +133,8 @@ public class DatasetGraphAccessorHTTP implements DatasetGraphAccessor {
     }
 
     protected boolean doHead(String url) {
-        HttpUriRequest httpHead = new HttpHead(url) ;
         try {
-            HttpOp.execHttpHead(url, WebContent.defaultGraphAcceptHeader, noResponse, null, null, this.authenticator) ;
+            HttpOp.execHttpHead(url, WebContent.defaultGraphAcceptHeader, noResponse, client, null) ;
             return true ;
         } catch (HttpException ex) {
             if ( ex.getResponseCode() == HttpSC.NOT_FOUND_404 )
@@ -172,7 +155,7 @@ public class DatasetGraphAccessorHTTP implements DatasetGraphAccessor {
 
     protected void doPut(String url, Graph data) {
         HttpEntity entity = graphToHttpEntity(data) ;
-        HttpOp.execHttpPut(url, entity, null, null, this.authenticator) ;
+        HttpOp.execHttpPut(url, entity, client, null) ;
     }
 
     @Override
@@ -187,7 +170,7 @@ public class DatasetGraphAccessorHTTP implements DatasetGraphAccessor {
 
     protected void doDelete(String url) {
         try {
-            HttpOp.execHttpDelete(url, noResponse, null, null, this.authenticator) ;
+            HttpOp.execHttpDelete(url, noResponse, client, null) ;
         } catch (HttpException ex) {
             if ( ex.getResponseCode() == HttpSC.NOT_FOUND_404 )
                 return ;
@@ -206,7 +189,7 @@ public class DatasetGraphAccessorHTTP implements DatasetGraphAccessor {
 
     protected void doPost(String url, Graph data) {
         HttpEntity entity = graphToHttpEntity(data) ;
-        HttpOp.execHttpPost(url, entity, null, null, this.authenticator) ;
+        HttpOp.execHttpPost(url, entity, client, null) ;
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/jena/blob/2e8fc564/jena-arq/src/test/java/org/apache/jena/sparql/engine/http/TestService.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/test/java/org/apache/jena/sparql/engine/http/TestService.java b/jena-arq/src/test/java/org/apache/jena/sparql/engine/http/TestService.java
index 8bd9588..8ca1294 100644
--- a/jena-arq/src/test/java/org/apache/jena/sparql/engine/http/TestService.java
+++ b/jena-arq/src/test/java/org/apache/jena/sparql/engine/http/TestService.java
@@ -22,7 +22,9 @@ import java.net.SocketException ;
 import java.util.HashMap ;
 import java.util.Map ;
 
+import org.apache.http.client.HttpClient;
 import org.apache.http.conn.ConnectTimeoutException ;
+import org.apache.http.impl.client.HttpClients;
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.graph.Triple ;
@@ -154,7 +156,7 @@ public class TestService {
         Assert.assertEquals(-1, engine.getTimeout2());
         Assert.assertTrue(engine.getAllowGZip());
         Assert.assertTrue(engine.getAllowDeflate());
-        Assert.assertFalse(engine.isUsingBasicAuthentication());
+        Assert.assertNull(engine.getClient());
     }
 
     @SuppressWarnings("unchecked")
@@ -172,8 +174,8 @@ public class TestService {
         }
         Context serviceContext = serviceContextMap.get(SERVICE);
         try {
-            serviceContext.put(Service.queryAuthUser, "user");
-            serviceContext.put(Service.queryAuthPwd, "password");
+            HttpClient testClient = HttpClients.custom().build();
+            serviceContext.put(Service.queryClient, testClient);
 
             Query q = QueryFactory.create("ASK { }");
             QueryEngineHTTP engine = QueryExecutionFactory.createServiceRequest(SERVICE, q);
@@ -184,11 +186,10 @@ public class TestService {
             Assert.assertEquals(-1, engine.getTimeout2());
             Assert.assertTrue(engine.getAllowGZip());
             Assert.assertTrue(engine.getAllowDeflate());
-            Assert.assertTrue(engine.isUsingBasicAuthentication());
+            Assert.assertEquals(testClient, engine.getClient());
 
         } finally {
-            serviceContext.remove(Service.queryAuthUser);
-            serviceContext.remove(Service.queryAuthPwd);
+            serviceContext.remove(Service.queryClient);
         }
     }
 
@@ -217,7 +218,7 @@ public class TestService {
             Assert.assertEquals(10, engine.getTimeout2());
             Assert.assertTrue(engine.getAllowGZip());
             Assert.assertTrue(engine.getAllowDeflate());
-            Assert.assertFalse(engine.isUsingBasicAuthentication());
+            Assert.assertNull(engine.getClient());
         } finally {
             serviceContext.remove(Service.queryTimeout);
         }
@@ -248,7 +249,7 @@ public class TestService {
             Assert.assertEquals(10, engine.getTimeout2());
             Assert.assertTrue(engine.getAllowGZip());
             Assert.assertTrue(engine.getAllowDeflate());
-            Assert.assertFalse(engine.isUsingBasicAuthentication());
+            Assert.assertNull(engine.getClient());
         } finally {
             serviceContext.remove(Service.queryTimeout);
         }
@@ -280,7 +281,7 @@ public class TestService {
             Assert.assertEquals(-1, engine.getTimeout2());
             Assert.assertFalse(engine.getAllowGZip());
             Assert.assertFalse(engine.getAllowDeflate());
-            Assert.assertFalse(engine.isUsingBasicAuthentication());
+            Assert.assertNull(engine.getClient());
         } finally {
             serviceContext.remove(Service.queryGzip);
             serviceContext.remove(Service.queryDeflate);
@@ -301,7 +302,7 @@ public class TestService {
         Assert.assertNotNull(engine);
 
         // Check that no settings were changed
-        Assert.assertFalse(engine.isUsingAuthentication());
+        Assert.assertNull(engine.getClient());
     }
 
     @SuppressWarnings("unchecked")
@@ -318,19 +319,18 @@ public class TestService {
         }
         Context serviceContext = serviceContextMap.get(SERVICE);
         try {
-            serviceContext.put(Service.queryAuthUser, "user");
-            serviceContext.put(Service.queryAuthPwd, "password");
+            HttpClient testClient = HttpClients.custom().build();
+            serviceContext.put(Service.queryClient, testClient);
 
             UpdateRequest updates = UpdateFactory.create("CREATE GRAPH <http://example>");
             UpdateProcessRemoteBase engine = (UpdateProcessRemoteBase) UpdateExecutionFactory.createRemote(updates, SERVICE);
             Assert.assertNotNull(engine);
 
-            // Check that auth settings were changed
-            Assert.assertTrue(engine.isUsingAuthentication());
+            // Check that client settings were changed
+            Assert.assertEquals(testClient, engine.getClient());
 
         } finally {
-            serviceContext.remove(Service.queryAuthUser);
-            serviceContext.remove(Service.queryAuthPwd);
+            serviceContext.remove(Service.queryClient);
         }
     }
 }