From 64fb6320b4dc759967213d7eef0d83229020719f Mon Sep 17 00:00:00 2001 From: ajs6f Date: Mon, 19 Dec 2016 10:33:57 -0500 Subject: [PATCH] JENA-1268: better defaulting behavior for HttpOp --- .../java/org/apache/jena/riot/web/HttpOp.java | 21 +++++++++++-------- .../apache/jena/fuseki/http/TestHttpOp.java | 9 ++++++++ 2 files changed, 21 insertions(+), 9 deletions(-) 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 65b6c86ecf1..6d7eebde63a 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 @@ -101,8 +101,13 @@ public class HttpOp { /** * Default HttpClient. */ - static private HttpClient defaultHttpClient = createDefaultHttpClient(); + private static HttpClient defaultHttpClient = createDefaultHttpClient(); + /** + * Used to reset {@link #defaultHttpClient} when needed + */ + public static final HttpClient initialDefaultHttpClient = defaultHttpClient; + public static HttpClient createDefaultHttpClient() { return createCachingHttpClient(); } @@ -172,16 +177,14 @@ public static HttpClient getDefaultHttpClient() { } /** - * Performance can be improved by using a shared HttpClient that uses - * connection pooling. However, pool management is complicated and can lead - * to starvation (the system locks-up, especially on Java6; it's JVM - * sensitive). - * See the Apache Http Client documentation for more details. + * Performance can be improved by using a shared HttpClient that uses connection pooling. However, pool management + * is complicated and can lead to starvation (the system locks-up, especially on Java6; it's JVM sensitive). See the + * Apache HTTP Commons Client documentation for more details. * - * @param httpClient HTTP Client + * @param client HTTP client to use, if this is null, reset to original default instead */ - public static void setDefaultHttpClient(HttpClient httpClient) { - defaultHttpClient = httpClient; + public static void setDefaultHttpClient(HttpClient client) { + defaultHttpClient = firstNonNull(client, initialDefaultHttpClient); } /** diff --git a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java index 2bb7206544c..937ce9311f0 100644 --- a/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java +++ b/jena-fuseki2/jena-fuseki-core/src/test/java/org/apache/jena/fuseki/http/TestHttpOp.java @@ -24,7 +24,9 @@ import static org.apache.jena.fuseki.ServerCtl.serviceQuery ; import static org.apache.jena.fuseki.ServerCtl.serviceUpdate ; import static org.apache.jena.fuseki.ServerCtl.urlRoot ; +import static org.apache.jena.riot.web.HttpOp.initialDefaultHttpClient; +import org.apache.http.client.HttpClient; import org.apache.jena.atlas.lib.IRILib ; import org.apache.jena.atlas.web.TypedInputStream ; import org.apache.jena.fuseki.AbstractFusekiTest ; @@ -47,6 +49,13 @@ public class TestHttpOp extends AbstractFusekiTest { static String simpleQuery = queryURL+"?query="+IRILib.encodeUriComponent("ASK{}") ; + @Test public void correctDefaultResetBehavior() { + HttpClient defaultClient = HttpOp.getDefaultHttpClient(); + HttpOp.setDefaultHttpClient(null); + assertSame("Failed to reset to initial client!", initialDefaultHttpClient, HttpOp.getDefaultHttpClient()); + HttpOp.setDefaultHttpClient(defaultClient); + } + // Basic operations @Test public void httpGet_01() {