From 75f7b398ea64cf5bbef0bc3e4cb6ba65fdc1ea53 Mon Sep 17 00:00:00 2001 From: Oleg Kalnichevski Date: Thu, 12 Jan 2017 10:07:41 +0000 Subject: [PATCH] HTTPCLIENT-1777: fixed binary compatibility with 4.4 git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/branches/4.5.x@1778410 13f79535-47bb-0310-9956-ffa450edef68 --- .../impl/HttpProxyConfigurationActivator.java | 4 +- ... OSGiCachingHttpClientBuilderFactory.java} | 7 +-- .../osgi/impl/OSGiClientBuilderFactory.java | 41 ++++++++----- .../impl/OSGiHttpClientBuilderFactory.java | 57 +++++++++++++++++++ 4 files changed, 89 insertions(+), 20 deletions(-) rename httpclient-osgi/src/main/java/org/apache/http/osgi/impl/{OSGiCachingClientBuilderFactory.java => OSGiCachingHttpClientBuilderFactory.java} (93%) create mode 100644 httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilderFactory.java diff --git a/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java b/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java index ae2d8c7e8..16d5c1bf5 100644 --- a/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java +++ b/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java @@ -100,7 +100,7 @@ public final class HttpProxyConfigurationActivator implements BundleActivator, M props.put(Constants.SERVICE_VENDOR, context.getBundle().getHeaders().get(Constants.BUNDLE_VENDOR)); props.put(Constants.SERVICE_DESCRIPTION, BUILDER_FACTORY_SERVICE_NAME); clientFactory = context.registerService(HttpClientBuilderFactory.class.getName(), - new OSGiClientBuilderFactory(configurator, httpClientTracker), + new OSGiHttpClientBuilderFactory(configurator, httpClientTracker), props); props.clear(); @@ -108,7 +108,7 @@ public final class HttpProxyConfigurationActivator implements BundleActivator, M props.put(Constants.SERVICE_VENDOR, context.getBundle().getHeaders().get(Constants.BUNDLE_VENDOR)); props.put(Constants.SERVICE_DESCRIPTION, CACHEABLE_BUILDER_FACTORY_SERVICE_NAME); cachingClientFactory = context.registerService(CachingHttpClientBuilderFactory.class.getName(), - new OSGiCachingClientBuilderFactory(configurator, httpClientTracker), + new OSGiCachingHttpClientBuilderFactory(configurator, httpClientTracker), props); } diff --git a/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCachingClientBuilderFactory.java b/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCachingHttpClientBuilderFactory.java similarity index 93% rename from httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCachingClientBuilderFactory.java rename to httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCachingHttpClientBuilderFactory.java index 80661c83c..4d505a51b 100644 --- a/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCachingClientBuilderFactory.java +++ b/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCachingHttpClientBuilderFactory.java @@ -30,16 +30,13 @@ import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.cache.CachingHttpClientBuilder; import org.apache.http.osgi.services.CachingHttpClientBuilderFactory; -/** - * @since 4.3 - */ -final class OSGiCachingClientBuilderFactory implements CachingHttpClientBuilderFactory { +final class OSGiCachingHttpClientBuilderFactory implements CachingHttpClientBuilderFactory { private final HttpClientBuilderConfigurator configurator; private final HttpProxyConfigurationActivator.HttpClientTracker httpClientTracker; - OSGiCachingClientBuilderFactory( + OSGiCachingHttpClientBuilderFactory( final HttpClientBuilderConfigurator configurator, final HttpProxyConfigurationActivator.HttpClientTracker httpClientTracker) { this.configurator = configurator; diff --git a/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java b/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java index 84a76f86e..aef9d6490 100644 --- a/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java +++ b/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java @@ -26,35 +26,50 @@ */ package org.apache.http.osgi.impl; +import java.util.List; +import java.util.Map; + import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.osgi.services.HttpClientBuilderFactory; +import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceRegistration; /** * @since 4.3 + * + * @deprecated (4.5). No longer used. */ -final class OSGiClientBuilderFactory implements HttpClientBuilderFactory { +@Deprecated +public final class OSGiClientBuilderFactory implements HttpClientBuilderFactory { - private final HttpClientBuilderConfigurator configurator; + private final BundleContext bundleContext; - private final HttpProxyConfigurationActivator.HttpClientTracker httpClientTracker; + private final Map registeredConfigurations; - OSGiClientBuilderFactory( - final HttpClientBuilderConfigurator configurator, - final HttpProxyConfigurationActivator.HttpClientTracker httpClientTracker) { - this.configurator = configurator; - this.httpClientTracker = httpClientTracker; + private final List trackedHttpClients; + + public OSGiClientBuilderFactory( + final BundleContext bundleContext, + final Map registeredConfigurations, + final List trackedHttpClients) { + this.bundleContext = bundleContext; + this.registeredConfigurations = registeredConfigurations; + this.trackedHttpClients = trackedHttpClients; } @Override public HttpClientBuilder newBuilder() { - return configurator.configure(new HttpClientBuilder() { + return new HttpClientBuilder() { @Override public CloseableHttpClient build() { - final CloseableHttpClient client = super.build(); - httpClientTracker.track(client); - return client; + final CloseableHttpClient httpClient = super.build(); + synchronized (trackedHttpClients) { + trackedHttpClients.add(httpClient); + } + return httpClient; } - }); + }; } + } diff --git a/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilderFactory.java b/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilderFactory.java new file mode 100644 index 000000000..628892dc5 --- /dev/null +++ b/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilderFactory.java @@ -0,0 +1,57 @@ +/* + * ==================================================================== + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + */ +package org.apache.http.osgi.impl; + +import org.apache.http.impl.client.CloseableHttpClient; +import org.apache.http.impl.client.HttpClientBuilder; +import org.apache.http.osgi.services.HttpClientBuilderFactory; + +final class OSGiHttpClientBuilderFactory implements HttpClientBuilderFactory { + + private final HttpClientBuilderConfigurator configurator; + + private final HttpProxyConfigurationActivator.HttpClientTracker httpClientTracker; + + OSGiHttpClientBuilderFactory( + final HttpClientBuilderConfigurator configurator, + final HttpProxyConfigurationActivator.HttpClientTracker httpClientTracker) { + this.configurator = configurator; + this.httpClientTracker = httpClientTracker; + } + + @Override + public HttpClientBuilder newBuilder() { + return configurator.configure(new HttpClientBuilder() { + @Override + public CloseableHttpClient build() { + final CloseableHttpClient client = super.build(); + httpClientTracker.track(client); + return client; + } + }); + } +}