You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2013/04/18 11:45:20 UTC
svn commit: r1469247 - in /httpcomponents/httpclient/trunk: ./
httpclient-osgi/ httpclient-osgi/src/main/java/
httpclient-osgi/src/main/java/org/ httpclient-osgi/src/main/java/org/apache/
httpclient-osgi/src/main/java/org/apache/http/ httpclient-osgi/s...
Author: olegk
Date: Thu Apr 18 09:45:19 2013
New Revision: 1469247
URL: http://svn.apache.org/r1469247
Log:
HTTPCLIENT-1238: Contribute Bundle Activator And Central Proxy Configuration
Contributed by Simone Tripodi <simonetripodi at apache.org>
Added:
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCredentialsProvider.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilder.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpRoutePlanner.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiProxyConfiguration.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/PropertiesUtils.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/package-info.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/package-info.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/HttpClientBuilderFactory.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/ProxyConfiguration.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/package-info.java (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.properties (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.xml (with props)
httpcomponents/httpclient/trunk/httpclient-osgi/src/test/
httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/
httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/
httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/
httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/
httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/
httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/
httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/TestPropertiesUtils.java (with props)
Modified:
httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
httpcomponents/httpclient/trunk/httpclient-osgi/pom.xml
Modified: httpcomponents/httpclient/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/RELEASE_NOTES.txt?rev=1469247&r1=1469246&r2=1469247&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/RELEASE_NOTES.txt (original)
+++ httpcomponents/httpclient/trunk/RELEASE_NOTES.txt Thu Apr 18 09:45:19 2013
@@ -1,6 +1,9 @@
Changes since release 4.3 BETA1
-------------------
+* [HTTPCLIENT-1238] Contribute Bundle Activator And Central Proxy Configuration.
+ Contributed by Simone Tripodi <simonetripodi at apache.org>
+
* [HTTPCLIENT-1341] DeflateDecompressingEntity does not call Inflater#end.
Contributed by Oleg Kalnichevski <olegk at apache.org>
Modified: httpcomponents/httpclient/trunk/httpclient-osgi/pom.xml
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/pom.xml?rev=1469247&r1=1469246&r2=1469247&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/pom.xml (original)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/pom.xml Thu Apr 18 09:45:19 2013
@@ -49,6 +49,11 @@
<scope>compile</scope>
</dependency>
<dependency>
+ <groupId>org.apache.httpcomponents</groupId>
+ <artifactId>httpcore</artifactId>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>${commons-codec.version}</version>
@@ -72,16 +77,30 @@
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.core</artifactId>
+ <version>4.2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.osgi</groupId>
+ <artifactId>org.osgi.compendium</artifactId>
+ <version>4.2.0</version>
+ <scope>provided</scope>
+ </dependency>
+ <!-- test dependencies, mainly OSGi runtime environment -->
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
- <filtering>true</filtering>
- <includes>
- <include>**/*.properties</include>
- </includes>
</resource>
</resources>
<plugins>
@@ -103,6 +122,7 @@
org.apache.http.impl.cookie.*;version=${project.version},
org.apache.http.impl.conn.*;version=${project.version},
org.apache.http.impl.client.*;version=${project.version}
+ org.apache.http.osgi.services;version=${project.version}
</_exportcontents>
<Embed-Dependency>*;scope=compile|runtime;inline=true</Embed-Dependency>
<Import-Package>
@@ -111,10 +131,11 @@
javax.net,
javax.net.ssl,
javax.security.auth.x500,
- org.ietf.jgss,
+ org.ietf.jgss,,
+ org.osgi.framework,
+ org.osgi.service.cm,
org.apache.commons.logging;version=${commons-logging.version},
org.apache.http;version=${httpcore.version},
- org.apache.http.config.*;version=${httpcore.version},
org.apache.http.concurrent;version=${httpcore.version},
org.apache.http.entity;version=${httpcore.version},
org.apache.http.io;version=${httpcore.version},
@@ -130,6 +151,7 @@
net.sf.ehcache.*;resolution:=optional,
net.spy.memcached.*;resolution:=optional
</Import-Package>
+ <Bundle-Activator>org.apache.http.osgi.impl.HttpProxyConfigurationActivator</Bundle-Activator>
<!-- Stop the JAVA_1_n_HOME variables from being treated as headers by Bnd -->
<_removeheaders>JAVA_1_3_HOME,JAVA_1_4_HOME</_removeheaders>
</instructions>
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,165 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.impl;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.osgi.services.HttpClientBuilderFactory;
+import org.apache.http.osgi.services.ProxyConfiguration;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cm.ConfigurationException;
+import org.osgi.service.cm.ManagedServiceFactory;
+
+/**
+ * @since 4.3
+ */
+public final class HttpProxyConfigurationActivator implements BundleActivator, ManagedServiceFactory {
+
+ private static final String SERVICE_FACTORY_NAME = "Apache HTTP Client Proxy Configuration Factory";
+
+ private static final String SERVICE_PID = "org.apache.http.proxyconfigurator";
+
+ private ServiceRegistration configurator;
+
+ private ServiceRegistration clientFactory;
+
+ private BundleContext context;
+
+ private final Map<String, ServiceRegistration> registeredConfigurations = new LinkedHashMap<String, ServiceRegistration>();
+
+ private final List<CloseableHttpClient> trackedHttpClients = new LinkedList<CloseableHttpClient>();
+
+ /**
+ * {@inheritDoc}
+ */
+ public void start(final BundleContext context) throws Exception {
+ this.context = context;
+
+ // ensure we receive configurations for the proxy selector
+ final Hashtable<String, Object> props = new Hashtable<String, Object>();
+ props.put(Constants.SERVICE_PID, getName());
+ props.put(Constants.SERVICE_VENDOR, context.getBundle().getHeaders(Constants.BUNDLE_VENDOR));
+ props.put(Constants.SERVICE_DESCRIPTION, SERVICE_FACTORY_NAME);
+
+ configurator = context.registerService(ManagedServiceFactory.class.getName(), this, props);
+ clientFactory = context.registerService(HttpClientBuilderFactory.class.getName(),
+ new OSGiClientBuilderFactory(context, registeredConfigurations, trackedHttpClients),
+ props);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void stop(final BundleContext context) throws Exception {
+ // unregister services
+ for (final ServiceRegistration registeredConfiguration : registeredConfigurations.values()) {
+ registeredConfiguration.unregister();
+ }
+
+ // unregister service factory
+ if (configurator != null) {
+ configurator.unregister();
+ }
+
+ if (clientFactory != null) {
+ clientFactory.unregister();
+ }
+
+ // ensure all http clients - generated with the - are terminated
+ for (final CloseableHttpClient client : trackedHttpClients) {
+ if (null != client) {
+ closeQuietly(client);
+ }
+ }
+
+ // remove all tracked services
+ registeredConfigurations.clear();
+ // remove all tracked created clients
+ trackedHttpClients.clear();
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public String getName() {
+ return SERVICE_PID;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void updated(final String pid, @SuppressWarnings("rawtypes") final Dictionary config) throws ConfigurationException {
+ final ServiceRegistration registration = registeredConfigurations.get(pid);
+ OSGiProxyConfiguration proxyConfiguration;
+
+ if (registration == null) {
+ proxyConfiguration = new OSGiProxyConfiguration();
+ final ServiceRegistration configurationRegistration = context.registerService(ProxyConfiguration.class.getName(),
+ proxyConfiguration,
+ config);
+ registeredConfigurations.put(pid, configurationRegistration);
+ } else {
+ proxyConfiguration = (OSGiProxyConfiguration) context.getService(registration.getReference());
+ }
+
+ @SuppressWarnings("unchecked") // data type is known
+ final
+ Dictionary<String, Object> properties = config;
+ proxyConfiguration.update(properties);
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void deleted(final String pid) {
+ final ServiceRegistration registeredConfiguration = registeredConfigurations.get(pid);
+ if (null != registeredConfiguration) {
+ registeredConfiguration.unregister();
+ registeredConfigurations.remove(pid);
+ }
+ }
+
+ private static void closeQuietly(final Closeable closeable) {
+ try {
+ closeable.close();
+ } catch (final IOException e) {
+ // do nothing
+ }
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/HttpProxyConfigurationActivator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,62 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+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
+ */
+public final class OSGiClientBuilderFactory implements HttpClientBuilderFactory {
+
+ private final BundleContext bundleContext;
+
+ private final Map<String, ServiceRegistration> registeredConfigurations;
+
+ private final List<CloseableHttpClient> trackedHttpClients;
+
+ public OSGiClientBuilderFactory(
+ final BundleContext bundleContext,
+ final Map<String, ServiceRegistration> registeredConfigurations,
+ final List<CloseableHttpClient> trackedHttpClients) {
+ this.bundleContext = bundleContext;
+ this.registeredConfigurations = registeredConfigurations;
+ this.trackedHttpClients = trackedHttpClients;
+ }
+
+ public HttpClientBuilder newBuilder() {
+ return new OSGiHttpClientBuilder(bundleContext, registeredConfigurations, trackedHttpClients);
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiClientBuilderFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCredentialsProvider.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCredentialsProvider.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCredentialsProvider.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCredentialsProvider.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,92 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.impl;
+
+import java.util.Map;
+
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.Credentials;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+import org.apache.http.osgi.services.ProxyConfiguration;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ * @since 4.3
+ */
+final class OSGiCredentialsProvider implements CredentialsProvider {
+
+ private final BundleContext bundleContext;
+
+ private final Map<String, ServiceRegistration> registeredConfigurations;
+
+ public OSGiCredentialsProvider(
+ final BundleContext bundleContext,
+ final Map<String, ServiceRegistration> registeredConfigurations) {
+ this.bundleContext = bundleContext;
+ this.registeredConfigurations = registeredConfigurations;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void setCredentials(final AuthScope authscope, final Credentials credentials) {
+ // do nothing, not used in this version
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public Credentials getCredentials(final AuthScope authscope) {
+ // iterate over all active proxy configurations at the moment of getting the credential
+ for (final ServiceRegistration registration : registeredConfigurations.values()) {
+ final Object proxyConfigurationObject = bundleContext.getService(registration.getReference());
+ if (proxyConfigurationObject != null) {
+ final ProxyConfiguration proxyConfiguration = (ProxyConfiguration) proxyConfigurationObject;
+ if (proxyConfiguration.isEnabled()) {
+ final AuthScope actual = new AuthScope(proxyConfiguration.getHostname(), proxyConfiguration.getPort());
+ if (authscope.equals(actual)) {
+ return new UsernamePasswordCredentials(proxyConfiguration.getUsername(),
+ proxyConfiguration.getPassword());
+ }
+
+ }
+ }
+ }
+ // credentials no longer available!
+ return null;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ public void clear() {
+ // do nothing, not used in this version
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCredentialsProvider.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCredentialsProvider.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiCredentialsProvider.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilder.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilder.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilder.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,62 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+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.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ * @since 4.3
+ */
+final class OSGiHttpClientBuilder extends HttpClientBuilder {
+
+ private final List<CloseableHttpClient> trackedHttpClients;
+
+ public OSGiHttpClientBuilder(
+ final BundleContext bundleContext,
+ final Map<String, ServiceRegistration> registeredConfigurations,
+ final List<CloseableHttpClient> trackedHttpClients) {
+ this.trackedHttpClients = trackedHttpClients;
+ setDefaultCredentialsProvider(
+ new OSGiCredentialsProvider(bundleContext, registeredConfigurations));
+ setRoutePlanner(
+ new OSGiHttpRoutePlanner(bundleContext, registeredConfigurations));
+ }
+
+ @Override
+ public CloseableHttpClient build() {
+ final CloseableHttpClient httpClient = super.build();
+ trackedHttpClients.add(httpClient);
+ return httpClient;
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilder.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilder.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpClientBuilder.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpRoutePlanner.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpRoutePlanner.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpRoutePlanner.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpRoutePlanner.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,206 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.impl;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.apache.http.HttpException;
+import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
+import org.apache.http.impl.conn.DefaultRoutePlanner;
+import org.apache.http.osgi.services.ProxyConfiguration;
+import org.apache.http.protocol.HttpContext;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+
+/**
+ * @since 4.3
+ */
+final class OSGiHttpRoutePlanner extends DefaultRoutePlanner {
+
+ private static final String DOT = ".";
+
+ /**
+ * The IP mask pattern against which hosts are matched.
+ */
+ public static final Pattern IP_MASK_PATTERN = Pattern.compile("^([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
+ "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
+ "([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\." +
+ "([01]?\\d\\d?|2[0-4]\\d|25[0-5])$");
+
+ private final BundleContext bundleContext;
+
+ private final Map<String, ServiceRegistration> registeredConfigurations;
+
+ public OSGiHttpRoutePlanner(
+ final BundleContext bundleContext,
+ final Map<String, ServiceRegistration> registeredConfigurations) {
+ super(null);
+ this.bundleContext = bundleContext;
+ this.registeredConfigurations = registeredConfigurations;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ protected HttpHost determineProxy(final HttpHost target, final HttpRequest request, final HttpContext context) throws HttpException {
+ ProxyConfiguration proxyConfiguration = null;
+
+ for (final ServiceRegistration registration : registeredConfigurations.values()) {
+ final Object proxyConfigurationObject = bundleContext.getService(registration.getReference());
+ if (proxyConfigurationObject != null) {
+ proxyConfiguration = (ProxyConfiguration) proxyConfigurationObject;
+ if (proxyConfiguration.isEnabled()) {
+ for (final String exception : proxyConfiguration.getProxyExceptions()) {
+ if (createMatcher(exception).matches(target.getHostName())) {
+ return null;
+ } else {
+ return new HttpHost(proxyConfiguration.getHostname(), proxyConfiguration.getPort());
+ }
+ }
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private static HostMatcher createMatcher(final String name) {
+ final NetworkAddress na = NetworkAddress.parse(name);
+ if (na != null) {
+ return new IPAddressMatcher(na);
+ }
+
+ if (name.startsWith(DOT)) {
+ return new DomainNameMatcher(name);
+ }
+
+ return new HostNameMatcher(name);
+ }
+
+ private static interface HostMatcher {
+
+ boolean matches(String host);
+
+ }
+
+ private static class HostNameMatcher implements HostMatcher {
+
+ private final String hostName;
+
+ HostNameMatcher(final String hostName) {
+ this.hostName = hostName;
+ }
+
+ public boolean matches(final String host) {
+ return hostName.equalsIgnoreCase(host);
+ }
+ }
+
+ private static class DomainNameMatcher implements HostMatcher {
+
+ private final String domainName;
+
+ DomainNameMatcher(final String domainName) {
+ this.domainName = domainName.toLowerCase(Locale.ENGLISH);
+ }
+
+ public boolean matches(final String host) {
+ return host.toLowerCase(Locale.ENGLISH).endsWith(domainName);
+ }
+ }
+
+ private static class IPAddressMatcher implements HostMatcher {
+
+ private final NetworkAddress address;
+
+ IPAddressMatcher(final NetworkAddress address) {
+ this.address = address;
+ }
+
+ public boolean matches(final String host) {
+ final NetworkAddress hostAddress = NetworkAddress.parse(host);
+ return hostAddress != null && address.address == (hostAddress.address & address.mask);
+ }
+
+ }
+
+ private static class NetworkAddress {
+
+ final int address;
+
+ final int mask;
+
+ static NetworkAddress parse(final String adrSpec) {
+
+ if (null != adrSpec) {
+ final Matcher nameMatcher = IP_MASK_PATTERN.matcher(adrSpec);
+ if (nameMatcher.matches()) {
+ try {
+ final int i1 = toInt(nameMatcher.group(1), 255);
+ final int i2 = toInt(nameMatcher.group(2), 255);
+ final int i3 = toInt(nameMatcher.group(3), 255);
+ final int i4 = toInt(nameMatcher.group(4), 255);
+ final int ip = i1 << 24 | i2 << 16 | i3 << 8 | i4;
+
+ int mask = toInt(nameMatcher.group(6), 32);
+ mask = (mask == 32) ? -1 : -1 - (-1 >>> mask);
+
+ return new NetworkAddress(ip, mask);
+ } catch (final NumberFormatException nfe) {
+ // not expected after the pattern match !
+ }
+ }
+ }
+
+ return null;
+ }
+
+ private static int toInt(final String value, final int max) {
+ if (value == null || value.length() == 0) {
+ return max;
+ }
+
+ int number = Integer.parseInt(value);
+ if (number > max) {
+ number = max;
+ }
+ return number;
+ }
+
+ NetworkAddress(final int address, final int mask) {
+ this.address = address;
+ this.mask = mask;
+ }
+
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpRoutePlanner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpRoutePlanner.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiHttpRoutePlanner.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiProxyConfiguration.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiProxyConfiguration.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiProxyConfiguration.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiProxyConfiguration.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,135 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.impl;
+
+import static java.lang.String.format;
+import static org.apache.http.osgi.impl.PropertiesUtils.to;
+
+import java.util.Dictionary;
+
+import org.apache.http.osgi.services.ProxyConfiguration;
+
+/**
+ * @since 4.3
+ */
+public final class OSGiProxyConfiguration implements ProxyConfiguration {
+
+ /**
+ * Property indicating whether this particular proxy is enabled (shall be used or not). Defaults to true.
+ */
+ private static final String PROPERTYNAME_PROXY_ENABLED = "proxy.enabled";
+
+ private static final boolean PROPERTYDEFAULT_PROXY_ENABLED = true;
+
+ /**
+ * Property representing the hostname of the proxy. Defaults to empty.
+ */
+ private static final String PROPERTYNAME_PROXY_HOSTNAME = "proxy.host";
+
+ private static final String PROPERTYDEFAULT_PROXY_HOSTNAME = "";
+
+ /**
+ * Property representing the port of the proxy. Defaults to 0.
+ */
+ private static final String PROPERTYNAME_PROXY_PORT = "proxy.port";
+
+ private static final int PROPERTYDEFAULT_PROXY_PORT = 0;
+
+ /**
+ * Property representing the username to authenticate with towards the proxy. Defaults to empty.
+ */
+ private static final String PROPERTYNAME_PROXY_USERNAME = "proxy.username";
+
+ private static final String PROPERTYDEFAULT_PROXY_USERNAME = "";
+
+ /**
+ * Property representing the password to authenticate with towards the proxy. Defaults to empty.
+ */
+ private static final String PROPERTYNAME_PROXY_PASSWORD = "proxy.password";
+
+ private static final String PROPERTYDEFAULT_PROXY_PASSWORD = "";
+
+ /**
+ * A multivalue property representing host patterns for which no proxy shall be used. By default localhost is
+ * excluded.
+ */
+ private static final String PROPERTYNAME_PROXY_EXCEPTIONS = "proxy.exceptions";
+
+ private static final String[] PROPERTYDEFAULT_PROXY_EXCEPTIONS = new String[]{"localhost", "127.0.0.1"};
+
+ private boolean enabled;
+
+ private String hostname;
+
+ private int port;
+
+ private String username;
+
+ private String password;
+
+ private String[] proxyExceptions;
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public String getHostname() {
+ return hostname;
+ }
+
+ public int getPort() {
+ return port;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public String[] getProxyExceptions() {
+ return proxyExceptions;
+ }
+
+ public void update(final Dictionary<String, Object> config) {
+ enabled = to(config.get(PROPERTYNAME_PROXY_ENABLED), boolean.class, PROPERTYDEFAULT_PROXY_ENABLED);
+ hostname = to(config.get(PROPERTYNAME_PROXY_HOSTNAME), String.class, PROPERTYDEFAULT_PROXY_HOSTNAME);
+ port = to(config.get(PROPERTYNAME_PROXY_PORT), int.class, PROPERTYDEFAULT_PROXY_PORT);
+ username = to(config.get(PROPERTYNAME_PROXY_USERNAME), String.class, PROPERTYDEFAULT_PROXY_USERNAME);
+ password = to(config.get(PROPERTYNAME_PROXY_PASSWORD), String.class, PROPERTYDEFAULT_PROXY_PASSWORD);
+ proxyExceptions = to(config.get(PROPERTYNAME_PROXY_EXCEPTIONS), String[].class, PROPERTYDEFAULT_PROXY_EXCEPTIONS);
+ }
+
+ @Override
+ public String toString() {
+ return format("ProxyConfiguration [enabled=%s, hostname=%s, port=%s, username=%s, password=%s, proxyExceptions=%s]",
+ proxyExceptions, enabled, hostname, port, username, password, proxyExceptions);
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiProxyConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiProxyConfiguration.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/OSGiProxyConfiguration.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/PropertiesUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/PropertiesUtils.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/PropertiesUtils.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/PropertiesUtils.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,199 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.impl;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @since 4.3
+ */
+final class PropertiesUtils {
+
+ private static final Map<Class<?>, PropertyConverter<?>> CONVERTERS_REGISTRY =
+ new HashMap<Class<?>, PropertiesUtils.PropertyConverter<?>>();
+
+ static {
+ register(new BooleanPropertyConverter(), boolean.class, Boolean.class);
+ register(new StringPropertyConverter(), String.class);
+ register(new StringArrayPropertyConverter(), String[].class);
+ register(new IntegerPropertyConverter(), int.class, Integer.class);
+ register(new LongPropertyConverter(), long.class, Long.class);
+ register(new DoublePropertyConverter(), double.class, Double.class);
+ }
+
+ private static void register(PropertyConverter<?> converter, Class<?>...targetTypes) {
+ for (Class<?> targetType : targetTypes) {
+ CONVERTERS_REGISTRY.put(targetType, converter);
+ }
+ }
+
+ public static <T> T to(Object propValue, Class<T> targetType, T defaultValue) {
+ if (propValue == null) {
+ return defaultValue;
+ }
+
+ if (!targetType.isArray()) {
+ propValue = toObject(propValue);
+ }
+
+ if (targetType.isInstance(propValue)) {
+ return targetType.cast(propValue);
+ }
+
+ if (CONVERTERS_REGISTRY.containsKey(targetType)) {
+ @SuppressWarnings("unchecked") // type driven by targetType
+ PropertyConverter<T> converter = (PropertyConverter<T>) CONVERTERS_REGISTRY.get(targetType);
+ try {
+ return converter.to(propValue);
+ } catch (Throwable t) {
+ // don't care, fall through to default value
+ }
+ }
+
+ return defaultValue;
+ }
+
+ /**
+ * Returns the parameter as a single value. If the
+ * parameter is neither an array nor a <code>java.util.Collection</code> the
+ * parameter is returned unmodified. If the parameter is a non-empty array,
+ * the first array element is returned. If the property is a non-empty
+ * <code>java.util.Collection</code>, the first collection element is returned.
+ *
+ * @param propValue the parameter to convert.
+ */
+ private static Object toObject(Object propValue) {
+ if (propValue.getClass().isArray()) {
+ Object[] prop = (Object[]) propValue;
+ return prop.length > 0 ? prop[0] : null;
+ }
+
+ if (propValue instanceof Collection<?>) {
+ Collection<?> prop = (Collection<?>) propValue;
+ return prop.isEmpty() ? null : prop.iterator().next();
+ }
+
+ return propValue;
+ }
+
+ /**
+ * Hidden constructor, this class must not be instantiated.
+ */
+ private PropertiesUtils() {
+ // do nothing
+ }
+
+ private static interface PropertyConverter<T> {
+
+ T to(Object propValue);
+
+ }
+
+ private static class BooleanPropertyConverter implements PropertyConverter<Boolean> {
+
+ public Boolean to(Object propValue) {
+ return Boolean.valueOf(String.valueOf(propValue));
+ }
+
+ }
+
+ private static class StringPropertyConverter implements PropertyConverter<String> {
+
+ public String to(Object propValue) {
+ return String.valueOf(propValue);
+ }
+
+ }
+
+ private static class StringArrayPropertyConverter implements PropertyConverter<String[]> {
+
+ public String[] to(Object propValue) {
+ if (propValue instanceof String) {
+ // single string
+ return new String[] { (String) propValue };
+ }
+
+ if (propValue.getClass().isArray()) {
+ // other array
+ Object[] valueArray = (Object[]) propValue;
+ List<String> values = new ArrayList<String>(valueArray.length);
+ for (Object value : valueArray) {
+ if (value != null) {
+ values.add(value.toString());
+ }
+ }
+ return values.toArray(new String[values.size()]);
+
+ }
+
+ if (propValue instanceof Collection<?>) {
+ // collection
+ Collection<?> valueCollection = (Collection<?>) propValue;
+ List<String> valueList = new ArrayList<String>(valueCollection.size());
+ for (Object value : valueCollection) {
+ if (value != null) {
+ valueList.add(value.toString());
+ }
+ }
+ return valueList.toArray(new String[valueList.size()]);
+ }
+
+ // don't care, fall through to default value
+ throw new IllegalArgumentException();
+ }
+
+ }
+
+ private static class IntegerPropertyConverter implements PropertyConverter<Integer> {
+
+ public Integer to(Object propValue) {
+ return Integer.valueOf(String.valueOf(propValue));
+ }
+
+ }
+
+ private static class LongPropertyConverter implements PropertyConverter<Long> {
+
+ public Long to(Object propValue) {
+ return Long.valueOf(String.valueOf(propValue));
+ }
+
+ }
+
+ private static class DoublePropertyConverter implements PropertyConverter<Double> {
+
+ public Double to(Object propValue) {
+ return Double.valueOf(String.valueOf(propValue));
+ }
+
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/PropertiesUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/PropertiesUtils.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/PropertiesUtils.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/package-info.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/package-info.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/package-info.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/package-info.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,27 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.impl;
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/package-info.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/package-info.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/impl/package-info.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/package-info.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/package-info.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/package-info.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/package-info.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,31 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+
+/**
+ * @since 4.3
+ */
+package org.apache.http.osgi;
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/package-info.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/package-info.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/package-info.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/HttpClientBuilderFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/HttpClientBuilderFactory.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/HttpClientBuilderFactory.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/HttpClientBuilderFactory.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,38 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.services;
+
+import org.apache.http.impl.client.HttpClientBuilder;
+
+/**
+ * @since 4.3
+ */
+public interface HttpClientBuilderFactory {
+
+ HttpClientBuilder newBuilder();
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/HttpClientBuilderFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/HttpClientBuilderFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/HttpClientBuilderFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/ProxyConfiguration.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/ProxyConfiguration.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/ProxyConfiguration.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/ProxyConfiguration.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,46 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.services;
+
+/**
+ * @since 4.3
+ */
+public interface ProxyConfiguration {
+
+ boolean isEnabled();
+
+ String getHostname();
+
+ int getPort();
+
+ String getUsername();
+
+ String getPassword();
+
+ String[] getProxyExceptions();
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/ProxyConfiguration.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/ProxyConfiguration.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/ProxyConfiguration.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/package-info.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/package-info.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/package-info.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/package-info.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,31 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+
+/**
+ * @since 4.3
+ */
+package org.apache.http.osgi.services;
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/package-info.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/package-info.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/java/org/apache/http/osgi/services/package-info.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.properties
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.properties?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.properties (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.properties Thu Apr 18 09:45:19 2013
@@ -0,0 +1,77 @@
+#
+# 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.
+#
+
+proxyconfigurator.name = Apache HTTP Components Proxy Configurator
+proxyconfigurator.description = Factory configuration for transparent proxies used by every HTTP Client.
+
+proxyconfig.name = Apache HTTP Components Proxy Configuration
+proxyconfig.description = Proxy configuration for central and transparent proxying of http client connections.
+
+proxy.enabled.name = Enable HTTP Proxy
+proxy.enabled.description = Whether to enable or disable this particular proxy configuration. \
+The default value is false.
+
+proxy.host.name = HTTP Proxy Host
+proxy.host.description = Host name (or IP Address) of the HTTP Proxy. This property is ignored if \
+ this proxy configuration is disabled. This property does not have a default value. Enabling \
+ this proxy but not setting the HTTP Proxy Host effectively disables this configuration.
+
+proxy.port.name = HTTP Proxy Port
+proxy.port.description = TCP port of the HTTP Proxy. This property is ignored if \
+ this proxy configuration is disabled. This property does not have a default value. Enabling \
+ this proxy but not setting the HTTP Proxy Port effectively disables this configuration.
+
+proxy.user.name = HTTP Proxy User
+proxy.user.description = The name of the user to authenticate as with the HTTP \
+ Proxy Host. If this field is empty, the proxy is considered to not be \
+ authenticated. The default is empty. This property is ignored if proxying is \
+ disabled or the proxy host is not properly configured.
+
+proxy.password.name = HTTP Proxy Password
+proxy.password.description = The password of the HTTP Proxy user to authenticate \
+ with. The default is empty. This property is ignored if proxying is \
+ disabled or the proxy host is not properly configured.
+
+proxy.ntlm.host.name = HTTP Proxy NTLM Host
+proxy.ntlm.host.description = The host the authentication request is \
+ originating from. Essentially, the computer name for this machine. By default \
+ the credentials assume simple username password authentication. If the proxy \
+ happens to be a Microsoft IIS Server using NTLM authentication this property \
+ must be set to the NT Domain name of the user to authenticate as. This is \
+ not set by default.
+
+proxy.ntlm.domain.name = HTTP Proxy NTLM Domain
+proxy.ntlm.domain.description = The NTLM domain to authenticate within. By \
+ default the credentials assume simple username password authentication. If \
+ the proxy happens to be a Microsoft IIS Server using NTLM authentication this \
+ property must be set to the NT Domain name of the user to authenticate as. \
+ This is not set by default.
+
+proxy.exceptions.name = No Proxy For
+proxy.exceptions.description = Lists domain names, host names, IP Addresses or \
+ or network addresses for which this proxy configuration should not be used. A domain \
+ name indicating all hosts of a domain is indicated by a leading dot, e.g. \
+ ".day.com". A network address is indicated with subnet mask notation indicating \
+ the number of bits make up the network address, e.g 192.168.1.0/24 means the \
+ class C network "192.168.1". Note that for proxy selection, the host name of \
+ URL is not resolved but directly compared to the list of exceptions. For this \
+ reason you might want to indicate both the network address and the domain for \
+ targets which should not be passed through the proxy. This property has no \
+ effect if this proxy configuration is disabled. The default value is [ localhost, \
+ 127.0.0.1 ].
\ No newline at end of file
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.properties
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.properties
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.properties
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.xml
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.xml?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.xml (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.xml Thu Apr 18 09:45:19 2013
@@ -0,0 +1,76 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ====================================================================
+ 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
+ <http://www.apache.org />.
+ -->
+<metatype:MetaData xmlns:metatype="http://www.osgi.org/xmlns/metatype/v1.0.0" localization="metatype">
+
+ <OCD id="org.apache.http.proxyconfigurator"
+ name="%proxyconfig.name"
+ description="%proxyconfig.description">
+
+ <AD id="proxy.enabled"
+ type="Boolean"
+ default="false"
+ name="%proxy.enabled.name"
+ description="%proxy.enabled.description" />
+
+ <AD id="proxy.host"
+ type="String"
+ default=""
+ name="%proxy.host.name"
+ description="%proxy.host.description" />
+
+ <AD id="proxy.port"
+ type="Integer"
+ default=""
+ name="%proxy.port.name"
+ description="%proxy.port.description" />
+
+ <AD id="proxy.user"
+ type="String"
+ default=""
+ name="%proxy.user.name"
+ description="%proxy.user.description" />
+
+ <AD id="proxy.password"
+ type="String"
+ default=""
+ name="%proxy.password.name"
+ description="%proxy.password.description" />
+
+ <AD id="proxy.exceptions"
+ type="String"
+ default="localhost,127.0.0.1"
+ cardinality="2147483647"
+ name="%proxy.exceptions.name"
+ description="%proxy.exceptions.description" />
+
+ </OCD>
+
+ <Designate pid="org.apache.http.proxyconfigurator">
+ <Object ocdref="org.apache.http.proxyconfigurator" />
+ </Designate>
+
+</metatype:MetaData>
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.xml
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/main/resources/OSGI-INF/metatype/metatype.xml
------------------------------------------------------------------------------
svn:mime-type = text/xml
Added: httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/TestPropertiesUtils.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/TestPropertiesUtils.java?rev=1469247&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/TestPropertiesUtils.java (added)
+++ httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/TestPropertiesUtils.java Thu Apr 18 09:45:19 2013
@@ -0,0 +1,129 @@
+/*
+ * ====================================================================
+ * 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
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.osgi.impl;
+
+import static org.apache.http.osgi.impl.PropertiesUtils.to;
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import org.junit.Test;
+
+/**
+ * @since 4.3
+ */
+public final class TestPropertiesUtils {
+
+ @Test
+ public void toBoolean() {
+ assertConverted(true, null, boolean.class, true);
+ assertConverted(true, null, Boolean.class, true);
+ assertConverted(false, "false", boolean.class, null);
+ assertConverted(false, "false", Boolean.class, null);
+ // whatever value is interpreted as `false` by Boolean.valueOf
+ assertConverted(false, "not a boolean", boolean.class, true);
+ assertConverted(false, "not a boolean", Boolean.class, true);
+ }
+
+ @Test
+ public void toSingleString() {
+ assertConverted("fallback to default value", null, String.class, "fallback to default value");
+ // use an object which represents the string
+ assertConverted("use the passed value", new StringBuilder("use the passed value"), String.class, null);
+ // use the "identity" converter
+ assertConverted("use the passed value", "use the passed value", String.class, null);
+ // convert another object
+ assertConverted("456789", 456789, String.class, null);
+ }
+
+ @Test
+ public void toStringArray() {
+ assertConvertedArray(new String[]{"fallback to default value"},
+ null,
+ String[].class,
+ new String[]{"fallback to default value"});
+ // a string is converted to an array with 1 element
+ assertConvertedArray(new String[]{"a single string"},
+ "a single string",
+ String[].class,
+ null);
+ // use an object which represents the string
+ assertConvertedArray(new String[]{"null objects", "will be ignored"},
+ new Object[]{new StringBuilder("null objects"), null, new StringBuilder("will be ignored")},
+ String[].class,
+ null);
+ // use the "identity" converter
+ assertConvertedArray(new String[]{"null objects", "will be ignored"},
+ new Object[]{"null objects", null, "will be ignored"},
+ String[].class,
+ null);
+ assertConvertedArray(new String[]{"fallback to default value"},
+ 456789,
+ String[].class,
+ new String[]{"fallback to default value"});
+ }
+
+ @Test
+ public void toInt() {
+ assertConverted(123, null, int.class, 123);
+ assertConverted(123, null, Integer.class, 123);
+ assertConverted(456, "456", int.class, null);
+ assertConverted(456, "456", Integer.class, null);
+ assertConverted(789, "not an integer", int.class, 789);
+ assertConverted(789, "not an integer", Integer.class, 789);
+ }
+
+ @Test
+ public void toLong() {
+ assertConverted(123l, null, long.class, 123l);
+ assertConverted(123l, null, Long.class, 123l);
+ assertConverted(456l, "456", long.class, null);
+ assertConverted(456l, "456", Long.class, null);
+ assertConverted(789l, "not a long", long.class, 789l);
+ assertConverted(789l, "not a long", Long.class, 789l);
+ }
+
+ @Test
+ public void toDouble() {
+ assertConverted(123d, null, double.class, 123d);
+ assertConverted(123d, null, Double.class, 123d);
+ assertConverted(456d, "456", double.class, null);
+ assertConverted(456d, "456", Double.class, null);
+ assertConverted(789d, "not a double", double.class, 789d);
+ assertConverted(789d, "not a double", Double.class, 789d);
+ }
+
+ private static <T> void assertConverted(T expected, Object propValue, Class<T> targetType, T defaultValue) {
+ T actual = to(propValue, targetType, defaultValue);
+ assertEquals(expected, actual);
+ }
+
+ private static <T> void assertConvertedArray(T[] expected, Object propValue, Class<T[]> targetType, T[] defaultValue) {
+ T[] actual = to(propValue, targetType, defaultValue);
+ assertArrayEquals(expected, actual);
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/TestPropertiesUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/TestPropertiesUtils.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient-osgi/src/test/java/org/apache/http/osgi/impl/TestPropertiesUtils.java
------------------------------------------------------------------------------
svn:mime-type = text/plain