diff --git a/core/src/main/java/org/jclouds/Constants.java b/core/src/main/java/org/jclouds/Constants.java
index 1b0d770378..9204863fe7 100644
--- a/core/src/main/java/org/jclouds/Constants.java
+++ b/core/src/main/java/org/jclouds/Constants.java
@@ -18,6 +18,9 @@
*/
package org.jclouds;
+import java.net.Proxy;
+
+import org.jclouds.domain.Location;
import org.jclouds.location.reference.LocationConstants;
/**
@@ -103,24 +106,38 @@ public interface Constants {
* Whether or not to use the proxy setup from the underlying operating system.
*/
public static final String PROPERTY_PROXY_SYSTEM = "jclouds.use-system-proxy";
+
/**
* String property.
*
- *Explicitly sets the host name of a HTTP proxy server.
+ *Explicitly sets the host name of a proxy server.
*/
public static final String PROPERTY_PROXY_HOST = "jclouds.proxy-host";
+
/**
- * Integer property.
+ * Integer property. default is 80 when {@link #PROPERTY_PROXY_TYPE} is
+ * {@code HTTP}, and 1080 when {@link #PROPERTY_PROXY_TYPE} is {@code SOCKS}.
*
- * Explicitly sets the port number of a HTTP proxy server.
+ * Explicitly sets the port number of a proxy server.
*/
public static final String PROPERTY_PROXY_PORT = "jclouds.proxy-port";
+
+ /**
+ * String property. default {@code HTTP}, valid options: {@code HTTP}, {@code SOCKS}.
+ *
+ * Explicitly sets the type of a proxy server.
+ *
+ * @see Proxy.Type
+ */
+ public static final String PROPERTY_PROXY_TYPE = "jclouds.proxy-type";
+
/**
* String property.
*
* Explicitly sets the user name credential for proxy authentication.
*/
public static final String PROPERTY_PROXY_USER = "jclouds.proxy-user";
+
/**
* String property.
*
diff --git a/core/src/main/java/org/jclouds/http/HttpUtils.java b/core/src/main/java/org/jclouds/http/HttpUtils.java
index d173a2fb32..860fc712a7 100644
--- a/core/src/main/java/org/jclouds/http/HttpUtils.java
+++ b/core/src/main/java/org/jclouds/http/HttpUtils.java
@@ -79,27 +79,11 @@ public class HttpUtils {
@Named(Constants.PROPERTY_RELAX_HOSTNAME)
private boolean relaxHostname = false;
- @Inject(optional = true)
- @Named(Constants.PROPERTY_PROXY_SYSTEM)
- private boolean systemProxies = System.getProperty("java.net.useSystemProxies") != null ? Boolean
- .parseBoolean(System.getProperty("java.net.useSystemProxies")) : false;
-
private final int globalMaxConnections;
private final int globalMaxConnectionsPerHost;
private final int connectionTimeout;
private final int soTimeout;
- @Inject(optional = true)
- @Named(Constants.PROPERTY_PROXY_HOST)
- private String proxyHost;
- @Inject(optional = true)
- @Named(Constants.PROPERTY_PROXY_PORT)
- private Integer proxyPort;
- @Inject(optional = true)
- @Named(Constants.PROPERTY_PROXY_USER)
- private String proxyUser;
- @Inject(optional = true)
- @Named(Constants.PROPERTY_PROXY_PASSWORD)
- private String proxyPassword;
+
@Inject(optional = true)
@Named(Constants.PROPERTY_TRUST_ALL_CERTS)
private boolean trustAllCerts;
@@ -115,34 +99,6 @@ public class HttpUtils {
this.globalMaxConnectionsPerHost = globalMaxConnectionsPerHost;
}
- /**
- * @see org.jclouds.Constants.PROPERTY_PROXY_HOST
- */
- public String getProxyHost() {
- return proxyHost;
- }
-
- /**
- * @see org.jclouds.Constants.PROPERTY_PROXY_PORT
- */
- public Integer getProxyPort() {
- return proxyPort;
- }
-
- /**
- * @see org.jclouds.Constants.PROPERTY_PROXY_USER
- */
- public String getProxyUser() {
- return proxyUser;
- }
-
- /**
- * @see org.jclouds.Constants.PROPERTY_PROXY_PASSWORD
- */
- public String getProxyPassword() {
- return proxyPassword;
- }
-
public int getSocketOpenTimeout() {
return soTimeout;
}
@@ -159,10 +115,6 @@ public class HttpUtils {
return trustAllCerts;
}
- public boolean useSystemProxies() {
- return systemProxies;
- }
-
public int getMaxConnections() {
return globalMaxConnections;
}
diff --git a/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java b/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
index 7cba6f6afb..bf17b3c099 100644
--- a/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
+++ b/core/src/main/java/org/jclouds/http/internal/JavaUrlHttpCommandExecutorService.java
@@ -20,7 +20,6 @@ package org.jclouds.http.internal;
import static com.google.common.base.Preconditions.checkArgument;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Throwables.propagate;
-import static com.google.common.collect.Iterables.getLast;
import static com.google.common.io.ByteStreams.toByteArray;
import static com.google.common.io.Closeables.closeQuietly;
import static com.google.common.net.HttpHeaders.CONTENT_LENGTH;
@@ -33,14 +32,10 @@ import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
-import java.net.Authenticator;
import java.net.HttpURLConnection;
-import java.net.InetSocketAddress;
-import java.net.PasswordAuthentication;
import java.net.ProtocolException;
import java.net.Proxy;
-import java.net.ProxySelector;
-import java.net.SocketAddress;
+import java.net.URI;
import java.net.URL;
import java.util.List;
import java.util.Map;
@@ -64,6 +59,7 @@ import org.jclouds.io.ContentMetadataCodec;
import org.jclouds.io.MutableContentMetadata;
import org.jclouds.io.Payload;
+import com.google.common.base.Function;
import com.google.common.base.Supplier;
import com.google.common.collect.ImmutableMultimap;
import com.google.common.collect.ImmutableMultimap.Builder;
@@ -83,23 +79,26 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
.getProperty("java.version"));
private final Supplier untrustedSSLContextProvider;
+ private final Function proxyForURI;
private final HostnameVerifier verifier;
private final Field methodField;
@Inject(optional = true)
Supplier sslContextSupplier;
+
@Inject
public JavaUrlHttpCommandExecutorService(HttpUtils utils, ContentMetadataCodec contentMetadataCodec,
@Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
DelegatingRetryHandler retryHandler, IOExceptionRetryHandler ioRetryHandler,
DelegatingErrorHandler errorHandler, HttpWire wire, @Named("untrusted") HostnameVerifier verifier,
- @Named("untrusted") Supplier untrustedSSLContextProvider) throws SecurityException,
- NoSuchFieldException {
+ @Named("untrusted") Supplier untrustedSSLContextProvider, Function proxyForURI)
+ throws SecurityException, NoSuchFieldException {
super(utils, contentMetadataCodec, ioExecutor, retryHandler, ioRetryHandler, errorHandler, wire);
if (utils.getMaxConnections() > 0)
System.setProperty("http.maxConnections", String.valueOf(checkNotNull(utils, "utils").getMaxConnections()));
this.untrustedSSLContextProvider = checkNotNull(untrustedSSLContextProvider, "untrustedSSLContextProvider");
this.verifier = checkNotNull(verifier, "verifier");
+ this.proxyForURI = checkNotNull(proxyForURI, "proxyForURI");
this.methodField = HttpURLConnection.class.getDeclaredField("method");
methodField.setAccessible(true);
}
@@ -159,26 +158,7 @@ public class JavaUrlHttpCommandExecutorService extends BaseHttpCommandExecutorSe
boolean chunked = "chunked".equals(request.getFirstHeaderOrNull("Transfer-Encoding"));
URL url = request.getEndpoint().toURL();
- HttpURLConnection connection;
-
- if (utils.useSystemProxies()) {
- System.setProperty("java.net.useSystemProxies", "true");
- Iterable proxies = ProxySelector.getDefault().select(request.getEndpoint());
- Proxy proxy = getLast(proxies);
- connection = (HttpURLConnection) url.openConnection(proxy);
- } else if (utils.getProxyHost() != null) {
- SocketAddress addr = new InetSocketAddress(utils.getProxyHost(), utils.getProxyPort());
- Proxy proxy = new Proxy(Proxy.Type.HTTP, addr);
- Authenticator authenticator = new Authenticator() {
- public PasswordAuthentication getPasswordAuthentication() {
- return new PasswordAuthentication(utils.getProxyUser(), utils.getProxyPassword().toCharArray());
- }
- };
- Authenticator.setDefault(authenticator);
- connection = (HttpURLConnection) url.openConnection(proxy);
- } else {
- connection = (HttpURLConnection) url.openConnection();
- }
+ HttpURLConnection connection = (HttpURLConnection) url.openConnection(proxyForURI.apply(request.getEndpoint()));
if (connection instanceof HttpsURLConnection) {
HttpsURLConnection sslCon = (HttpsURLConnection) connection;
if (utils.relaxHostname())
diff --git a/core/src/main/java/org/jclouds/predicates/InetSocketAddressConnect.java b/core/src/main/java/org/jclouds/predicates/InetSocketAddressConnect.java
index de95e5c2ff..14deef1375 100644
--- a/core/src/main/java/org/jclouds/predicates/InetSocketAddressConnect.java
+++ b/core/src/main/java/org/jclouds/predicates/InetSocketAddressConnect.java
@@ -18,9 +18,13 @@
*/
package org.jclouds.predicates;
+import static com.google.common.base.Preconditions.checkNotNull;
+
import java.io.IOException;
import java.net.InetSocketAddress;
+import java.net.Proxy;
import java.net.Socket;
+import java.net.URI;
import javax.annotation.Resource;
import javax.inject.Named;
@@ -28,6 +32,8 @@ import javax.inject.Singleton;
import org.jclouds.logging.Logger;
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
import com.google.common.net.HostAndPort;
import com.google.inject.Inject;
@@ -47,6 +53,14 @@ public class InetSocketAddressConnect implements SocketOpen {
@Named("org.jclouds.socket_timeout")
private int timeout = 2000;
+ private final Function proxyForURI;
+
+ @VisibleForTesting
+ @Inject
+ InetSocketAddressConnect(Function proxyForURI) {
+ this.proxyForURI = checkNotNull(proxyForURI, "proxyForURI");
+ }
+
@Override
public boolean apply(HostAndPort socketA) {
InetSocketAddress socketAddress = new InetSocketAddress(socketA.getHostText(), socketA
@@ -54,7 +68,8 @@ public class InetSocketAddressConnect implements SocketOpen {
Socket socket = null;
try {
logger.trace("testing socket %s", socketAddress);
- socket = new Socket();
+ socket = new Socket(
+ proxyForURI.apply(URI.create("socket://" + socketA.getHostText() + ":" + socketA.getPort())));
socket.setReuseAddress(false);
socket.setSoLinger(false, 1);
socket.setSoTimeout(timeout);
diff --git a/core/src/main/java/org/jclouds/proxy/ProxyConfig.java b/core/src/main/java/org/jclouds/proxy/ProxyConfig.java
new file mode 100644
index 0000000000..c13a1692a4
--- /dev/null
+++ b/core/src/main/java/org/jclouds/proxy/ProxyConfig.java
@@ -0,0 +1,62 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.
+ */
+package org.jclouds.proxy;
+
+import java.net.Proxy.Type;
+
+import org.jclouds.domain.Credentials;
+import org.jclouds.proxy.internal.GuiceProxyConfig;
+
+import com.google.common.base.Optional;
+import com.google.common.net.HostAndPort;
+import com.google.inject.ImplementedBy;
+
+/**
+ * parameters needed to configure {@link java.net.Proxy}. Check presence of
+ * {@link #getProxyHost()} to decide if proxy support should even be attempted.
+ *
+ * @author Adrian Cole
+ *
+ */
+@ImplementedBy(GuiceProxyConfig.class)
+public interface ProxyConfig {
+
+ /**
+ * @see org.jclouds.Constants#PROPERTY_PROXY_SYSTEM
+ */
+ boolean useSystem();
+
+ /**
+ * @see org.jclouds.Constants#PROPERTY_PROXY_TYPE
+ */
+ Type getType();
+
+ /**
+ * @see org.jclouds.Constants#PROPERTY_PROXY_HOST
+ * @see org.jclouds.Constants#PROPERTY_PROXY_PORT
+ */
+ Optional getProxy();
+
+ /**
+ * @see org.jclouds.Constants#PROPERTY_PROXY_USER
+ * @see org.jclouds.Constants#PROPERTY_PROXY_PASSWORD
+ */
+ Optional getCredentials();
+
+}
\ No newline at end of file
diff --git a/core/src/main/java/org/jclouds/proxy/ProxyForURI.java b/core/src/main/java/org/jclouds/proxy/ProxyForURI.java
new file mode 100644
index 0000000000..09e046429d
--- /dev/null
+++ b/core/src/main/java/org/jclouds/proxy/ProxyForURI.java
@@ -0,0 +1,89 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.
+ */
+package org.jclouds.proxy;
+
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.collect.Iterables.getLast;
+
+import java.net.Authenticator;
+import java.net.InetSocketAddress;
+import java.net.PasswordAuthentication;
+import java.net.Proxy;
+import java.net.ProxySelector;
+import java.net.SocketAddress;
+import java.net.URI;
+
+import javax.inject.Singleton;
+
+import org.jclouds.domain.Credentials;
+
+import com.google.common.annotations.VisibleForTesting;
+import com.google.common.base.Function;
+import com.google.common.base.Optional;
+import com.google.inject.Inject;
+
+/**
+ * @author Adrian Cole
+ */
+@Singleton
+public class ProxyForURI implements Function {
+ private final ProxyConfig config;
+
+ @VisibleForTesting
+ @Inject
+ ProxyForURI(ProxyConfig config) {
+ this.config = checkNotNull(config, "config");
+ }
+
+ /**
+ * @param endpoint
+ *
+ * - http URI for http connections
+ * - https URI for https connections
+ * - ftp URI for ftp connections
+ * - socket://host:port for tcp client sockets connections
+ *
+ */
+ @Override
+ public Proxy apply(URI endpoint) {
+ if (config.useSystem()) {
+ System.setProperty("java.net.useSystemProxies", "true");
+ Iterable proxies = ProxySelector.getDefault().select(endpoint);
+ return getLast(proxies);
+ } else if (config.getProxy().isPresent()) {
+ SocketAddress addr = new InetSocketAddress(config.getProxy().get().getHostText(), config.getProxy().get()
+ .getPort());
+ Proxy proxy = new Proxy(config.getType(), addr);
+
+ final Optional creds = config.getCredentials();
+ if (creds.isPresent()) {
+ Authenticator authenticator = new Authenticator() {
+ public PasswordAuthentication getPasswordAuthentication() {
+ return new PasswordAuthentication(creds.get().identity, creds.get().credential.toCharArray());
+ }
+ };
+ Authenticator.setDefault(authenticator);
+ }
+ return proxy;
+ } else {
+ return Proxy.NO_PROXY;
+ }
+ }
+
+}
diff --git a/core/src/main/java/org/jclouds/proxy/internal/GuiceProxyConfig.java b/core/src/main/java/org/jclouds/proxy/internal/GuiceProxyConfig.java
new file mode 100644
index 0000000000..5013ad275c
--- /dev/null
+++ b/core/src/main/java/org/jclouds/proxy/internal/GuiceProxyConfig.java
@@ -0,0 +1,123 @@
+/**
+ * Licensed to jclouds, Inc. (jclouds) under one or more
+ * contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. jclouds 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.
+ */
+package org.jclouds.proxy.internal;
+
+import static com.google.common.base.Preconditions.checkArgument;
+import static org.jclouds.Constants.PROPERTY_PROXY_HOST;
+import static org.jclouds.Constants.PROPERTY_PROXY_PASSWORD;
+import static org.jclouds.Constants.PROPERTY_PROXY_PORT;
+import static org.jclouds.Constants.PROPERTY_PROXY_SYSTEM;
+import static org.jclouds.Constants.PROPERTY_PROXY_TYPE;
+import static org.jclouds.Constants.PROPERTY_PROXY_USER;
+
+import java.net.Proxy;
+import java.net.Proxy.Type;
+
+import javax.inject.Named;
+import javax.inject.Singleton;
+
+import org.jclouds.domain.Credentials;
+import org.jclouds.proxy.ProxyConfig;
+
+import com.google.common.base.Objects;
+import com.google.common.base.Optional;
+import com.google.common.base.Strings;
+import com.google.common.net.HostAndPort;
+import com.google.inject.Inject;
+
+/**
+ * Configuration derived from Guice properties.
+ *
+ * @author Adrian Cole
+ */
+@Singleton
+public class GuiceProxyConfig implements ProxyConfig {
+
+ @Inject(optional = true)
+ @Named(PROPERTY_PROXY_SYSTEM)
+ private boolean systemProxies = Boolean.parseBoolean(System.getProperty("java.net.useSystemProxies", "false"));
+ @Inject(optional = true)
+ @Named(PROPERTY_PROXY_HOST)
+ private String host;
+ @Inject(optional = true)
+ @Named(PROPERTY_PROXY_PORT)
+ private Integer port;
+ @Inject(optional = true)
+ @Named(PROPERTY_PROXY_USER)
+ private String user;
+ @Inject(optional = true)
+ @Named(PROPERTY_PROXY_PASSWORD)
+ private String password;
+ @Inject(optional = true)
+ @Named(PROPERTY_PROXY_TYPE)
+ private Proxy.Type type = Proxy.Type.HTTP;
+
+ @Override
+ public Optional getProxy() {
+ if (host == null)
+ return Optional.absent();
+ Integer port = this.port;
+ if (port == null) {
+ switch (type) {
+ case HTTP:
+ port = 80;
+ break;
+ case SOCKS:
+ port = 1080;
+ break;
+ default:
+ throw new IllegalArgumentException(type + " not supported");
+ }
+ }
+ return Optional.of(HostAndPort.fromParts(host, port));
+ }
+
+ @Override
+ public Optional getCredentials() {
+ if (user == null)
+ return Optional.absent();
+ return Optional.of(new Credentials(user, checkNotEmpty(password, "set property %s for user %s",
+ PROPERTY_PROXY_PASSWORD, user)));
+ }
+
+ private static String checkNotEmpty(String nullableString, String message, Object... args) {
+ checkArgument(Strings.emptyToNull(nullableString) != null, message, args);
+ return nullableString;
+ }
+
+ @Override
+ public Type getType() {
+ return type;
+ }
+
+ @Override
+ public boolean useSystem() {
+ return systemProxies;
+ }
+
+ /**
+ * {@inheritDoc}
+ */
+ @Override
+ public String toString() {
+ return Objects.toStringHelper(this).omitNullValues().add("systemProxies", systemProxies ? "true" : null)
+ .add("proxy", getProxy().orNull()).add("user", user).add("type", host != null ? type : null).toString();
+ }
+
+}
diff --git a/core/src/main/java/org/jclouds/rest/config/RestModule.java b/core/src/main/java/org/jclouds/rest/config/RestModule.java
index 315f152bde..5112d57891 100644
--- a/core/src/main/java/org/jclouds/rest/config/RestModule.java
+++ b/core/src/main/java/org/jclouds/rest/config/RestModule.java
@@ -33,6 +33,7 @@ import static org.jclouds.util.Maps2.transformKeys;
import static org.jclouds.util.Predicates2.startsWith;
import java.lang.reflect.Method;
+import java.net.Proxy;
import java.net.URI;
import java.util.Map;
import java.util.Set;
@@ -46,6 +47,8 @@ import org.jclouds.http.functions.config.SaxParserModule;
import org.jclouds.internal.FilterStringsBoundToInjectorByName;
import org.jclouds.json.config.GsonModule;
import org.jclouds.location.config.LocationModule;
+import com.google.common.reflect.Invokable;
+import org.jclouds.proxy.ProxyForURI;
import org.jclouds.rest.AuthorizationException;
import org.jclouds.rest.HttpAsyncClient;
import org.jclouds.rest.HttpClient;
@@ -59,7 +62,6 @@ import com.google.common.cache.Cache;
import com.google.common.cache.CacheBuilder;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
-import com.google.common.reflect.Invokable;
import com.google.common.reflect.Parameter;
import com.google.inject.AbstractModule;
import com.google.inject.Provides;
@@ -147,8 +149,8 @@ public class RestModule extends AbstractModule {
}).toInstance(authException);
bind(new TypeLiteral, Map>>() {
}).to(FilterStringsBoundToInjectorByName.class);
- bind(new TypeLiteral, Map>>() {
- }).to(FilterStringsBoundToInjectorByName.class);
+ bind(new TypeLiteral>() {
+ }).to(ProxyForURI.class);
installLocations();
}
diff --git a/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java b/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java
index 0719883ef7..c4c1db4bb2 100644
--- a/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java
+++ b/core/src/test/java/org/jclouds/http/internal/TrackingJavaUrlHttpCommandExecutorService.java
@@ -18,6 +18,8 @@
*/
package org.jclouds.http.internal;
+import java.net.Proxy;
+import java.net.URI;
import java.util.Collection;
import java.util.List;
@@ -37,6 +39,7 @@ import org.jclouds.http.handlers.DelegatingRetryHandler;
import org.jclouds.io.ContentMetadataCodec;
import org.jclouds.rest.internal.GeneratedHttpRequest;
+import com.google.common.base.Function;
import com.google.common.base.Supplier;
import com.google.common.collect.Iterables;
import com.google.common.reflect.Invokable;
@@ -91,10 +94,10 @@ public class TrackingJavaUrlHttpCommandExecutorService extends JavaUrlHttpComman
@Named(Constants.PROPERTY_IO_WORKER_THREADS) ListeningExecutorService ioExecutor,
DelegatingRetryHandler retryHandler, IOExceptionRetryHandler ioRetryHandler,
DelegatingErrorHandler errorHandler, HttpWire wire, @Named("untrusted") HostnameVerifier verifier,
- @Named("untrusted") Supplier untrustedSSLContextProvider, List commandsInvoked)
- throws SecurityException, NoSuchFieldException {
+ @Named("untrusted") Supplier untrustedSSLContextProvider, Function proxyForURI,
+ List commandsInvoked) throws SecurityException, NoSuchFieldException {
super(utils, contentMetadataCodec, ioExecutor, retryHandler, ioRetryHandler, errorHandler, wire, verifier,
- untrustedSSLContextProvider);
+ untrustedSSLContextProvider, proxyForURI);
this.commandsInvoked = commandsInvoked;
}
diff --git a/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/config/ApacheHCHttpCommandExecutorServiceModule.java b/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/config/ApacheHCHttpCommandExecutorServiceModule.java
index 1fe98a9fd1..7733debcdc 100644
--- a/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/config/ApacheHCHttpCommandExecutorServiceModule.java
+++ b/drivers/apachehc/src/main/java/org/jclouds/http/apachehc/config/ApacheHCHttpCommandExecutorServiceModule.java
@@ -53,6 +53,7 @@ import org.jclouds.http.apachehc.ApacheHCHttpCommandExecutorService;
import org.jclouds.http.config.ConfiguresHttpCommandExecutorService;
import org.jclouds.http.config.SSLModule;
import org.jclouds.lifecycle.Closer;
+import org.jclouds.proxy.ProxyConfig;
import com.google.common.base.Supplier;
import com.google.inject.AbstractModule;
@@ -155,9 +156,9 @@ public class ApacheHCHttpCommandExecutorServiceModule extends AbstractModule {
@Provides
@Singleton
- HttpClient newDefaultHttpClient(HttpUtils utils, BasicHttpParams params, ClientConnectionManager cm) {
+ HttpClient newDefaultHttpClient(ProxyConfig config, BasicHttpParams params, ClientConnectionManager cm) {
DefaultHttpClient client = new DefaultHttpClient(cm, params);
- if (utils.useSystemProxies()) {
+ if (config.useSystem()) {
ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(client.getConnectionManager()
.getSchemeRegistry(), ProxySelector.getDefault());
client.setRoutePlanner(routePlanner);