From a89605c150560b42e7d7a46f7d2660678b347ba3 Mon Sep 17 00:00:00 2001 From: Andy Seaborne Date: Thu, 27 Jul 2017 10:10:18 +0100 Subject: [PATCH 1/2] Expose the setup of the pooling HttpClientBuilder. For use by RDFParserBuilder. --- .../java/org/apache/jena/riot/web/HttpOp.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 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 72357a6d58c..e65a350a8ac 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 @@ -210,19 +210,26 @@ public static void setDefaultHttpClient(HttpClient client) { * with {@link #setDefaultHttpClient} or provided in the HttpOp calls. */ public static CloseableHttpClient createPoolingHttpClient() { + return createPoolingHttpClientBuilder().build() ; + } + + /** + * Create an HttpClientBuilder that performs connection pooling. + */ + public static HttpClientBuilder createPoolingHttpClientBuilder() { String s = System.getProperty("http.maxConnections", "5"); int max = Integer.parseInt(s); return HttpClientBuilder.create() .useSystemProperties() .setRedirectStrategy(laxRedirectStrategy) .setMaxConnPerRoute(max) - .setMaxConnTotal(2*max) - .build() ; + .setMaxConnTotal(2*max); } - + /** - * Create an HttpClient that performs client-side caching and conection pooling. This can be used - * with {@link #setDefaultHttpClient} or provided in the HttpOp calls. + * Create an HttpClient that performs client-side caching and connection pooling. + * This can be used with {@link #setDefaultHttpClient} or provided in the HttpOp calls. + * Beware that content is cached in this process, including across remote server restart. */ public static CloseableHttpClient createCachingHttpClient() { String s = System.getProperty("http.maxConnections", "5"); From b11e87393e520815c669bd0086434c2960496b78 Mon Sep 17 00:00:00 2001 From: Andy Seaborne Date: Thu, 27 Jul 2017 10:12:40 +0100 Subject: [PATCH 2/2] JENA-1378: Set the accept header in the default use case. --- .../java/org/apache/jena/riot/RDFParser.java | 18 ++++++++++++------ .../org/apache/jena/riot/RDFParserBuilder.java | 8 +++++--- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java index 977789b39dc..da8ef555b5b 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParser.java @@ -320,13 +320,19 @@ private TypedInputStream openTypedInputStream(String urlStr, Path path) { } TypedInputStream in; + urlStr = StreamManager.get(context).mapURI(urlStr); if ( urlStr.startsWith("http://") || urlStr.startsWith("https://") ) { - // For complete compatibility, we have to let null pass through. - // Pair with RDFParserBuilder.buildHttpClient - // Objects.requireNonNull(httpClient); - // Remap. - urlStr = StreamManager.get(context).mapURI(urlStr); - in = HttpOp.execHttpGet(urlStr, null, httpClient, null); + // Need more control than LocatorURL provides. We could use it for the + // httpClient == null case. + // + // HttpOp.execHttpGet(,acceptHeader,) overrides the HttpClient default setting. + // + // If there is an explicitly set HttpClient use that as given, and do not override + // the accept header (i.e. pass null to arg accpetHeader in execHttpGet). + // Else, use httpOp as setup and set the accept header. + String acceptHeader = + ( httpClient == null ) ? WebContent.defaultRDFAcceptHeader : null; + in = HttpOp.execHttpGet(urlStr, acceptHeader, httpClient, null); } else { in = streamManager.open(urlStr); } diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java index ed1ca7b9a70..aaacd08e318 100644 --- a/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java +++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFParserBuilder.java @@ -26,7 +26,6 @@ import org.apache.http.Header; import org.apache.http.client.HttpClient; -import org.apache.http.impl.client.cache.CachingHttpClientBuilder; import org.apache.http.message.BasicHeader; import org.apache.jena.atlas.lib.IRILib; import org.apache.jena.graph.BlankNodeId; @@ -35,6 +34,7 @@ import org.apache.jena.riot.system.*; import org.apache.jena.riot.system.stream.StreamManager; import org.apache.jena.riot.web.HttpNames; +import org.apache.jena.riot.web.HttpOp ; import org.apache.jena.sparql.core.DatasetGraph; import org.apache.jena.sparql.util.Context; @@ -504,8 +504,10 @@ private HttpClient buildHttpClient() { Header header = new BasicHeader(k, v); hdrs.add(header); }); - HttpClient hc = CachingHttpClientBuilder.create().setDefaultHeaders(hdrs).build(); - return hc; + HttpClient hc = HttpOp.createPoolingHttpClientBuilder() + .setDefaultHeaders(hdrs) + .build() ; + return hc ; } /**