Marc Stroebel
Marc Stroebel

Reputation: 2357

Use Apache HttpClient with caching enabled as Jersey 2 client

How can I use a custom configured Apache HttpClient with Jersey Client 2?

HttpClient with Caching (from apache docs)

CacheConfig cacheConfig = CacheConfig.custom()
        .setMaxCacheEntries(1000)
        .setMaxObjectSize(8192)
        .build();
RequestConfig requestConfig = RequestConfig.custom()
        .setConnectTimeout(30000)
        .setSocketTimeout(30000)
        .build();
CloseableHttpClient cachingClient = CachingHttpClients.custom()
        .setCacheConfig(cacheConfig)
        .setDefaultRequestConfig(requestConfig)
        .build();

Using Apache Http in general works by setting

protected ClientConfig getClientConfig() {
        ClientConfig config = new ClientConfig();
        config.property(HttpUrlConnectorProvider.SET_METHOD_WORKAROUND, true);

        final PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager();

        config.property(ApacheClientProperties.CONNECTION_MANAGER, connectionManager);

        final ApacheConnectorProvider connector = new ApacheConnectorProvider();
        config.connectorProvider(connector);

        return config;
    }

But how to use custom http client config like above?

Upvotes: 2

Views: 623

Answers (1)

jan.supol
jan.supol

Reputation: 2805

You can use ApacheHttpClientBuilderConfigurator. So you can do:

config.register(new ApacheHttpClientBuilderConfigurator() {
   public HttpClientBuilder configure(HttpClientBuilder httpClientBuilder) {
      return httpClientBuilder.setDefaultRequestConfig(requestConfig);
   }
});

See the example.

The Apache caching client is not properly supported at the moment. You may return CachingHttpClientBuilder from the method, but the HttpClientBuilder does not have getters to see what is already set, so you need to set everything from scratch.

Upvotes: 2

Related Questions