diff --git a/org.springframework.web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java b/org.springframework.web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java index d41a0694998..cf864fcfc07 100644 --- a/org.springframework.web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java +++ b/org.springframework.web/src/main/java/org/springframework/http/client/SimpleClientHttpRequestFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2009 the original author or authors. + * Copyright 2002-2010 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,9 @@ package org.springframework.http.client; import java.io.IOException; import java.net.HttpURLConnection; +import java.net.Proxy; import java.net.URI; +import java.net.URL; import java.net.URLConnection; import org.springframework.http.HttpMethod; @@ -34,17 +36,40 @@ import org.springframework.util.Assert; */ public class SimpleClientHttpRequestFactory implements ClientHttpRequestFactory { + private Proxy proxy; + + /** + * Sets the {@link Proxy} to use for this request factory. + */ + public void setProxy(Proxy proxy) { + this.proxy = proxy; + } + public ClientHttpRequest createRequest(URI uri, HttpMethod httpMethod) throws IOException { - URLConnection urlConnection = uri.toURL().openConnection(); - Assert.isInstanceOf(HttpURLConnection.class, urlConnection); - HttpURLConnection connection = (HttpURLConnection) urlConnection; + HttpURLConnection connection = openConnection(uri.toURL(), proxy); prepareConnection(connection, httpMethod.name()); return new SimpleClientHttpRequest(connection); } /** - * Template method for preparing the given {@link HttpURLConnection}.
The default implementation prepares the - * connection for input and output, and sets the HTTP method. + * Opens and returns a connection to the given URL. + *
The default implementation uses the given {@linkplain #setProxy(java.net.Proxy) proxy} - if any - to open a + * connection. + * + * @param url the URL to open a connection to + * @param proxy the proxy to use, may be {@code null} + * @return the opened connection + * @throws IOException in case of I/O errors + */ + protected HttpURLConnection openConnection(URL url, Proxy proxy) throws IOException { + URLConnection urlConnection = proxy != null ? url.openConnection(proxy) : url.openConnection(); + Assert.isInstanceOf(HttpURLConnection.class, urlConnection); + return (HttpURLConnection) urlConnection; + } + + /** + * Template method for preparing the given {@link HttpURLConnection}. + *
The default implementation prepares the connection for input and output, and sets the HTTP method.
*
* @param connection the connection to prepare
* @param httpMethod the HTTP request method ({@code GET}, {@code POST}, etc.)
diff --git a/org.springframework.web/src/main/java/org/springframework/http/client/support/ProxyFactoryBean.java b/org.springframework.web/src/main/java/org/springframework/http/client/support/ProxyFactoryBean.java
new file mode 100644
index 00000000000..0ba4e815416
--- /dev/null
+++ b/org.springframework.web/src/main/java/org/springframework/http/client/support/ProxyFactoryBean.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2002-2010 the original author or authors.
+ *
+ * Licensed 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.springframework.http.client.support;
+
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.SocketAddress;
+
+import org.springframework.beans.factory.FactoryBean;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.util.Assert;
+
+/**
+ * {@link FactoryBean} that creates a {@link Proxy java.net.Proxy}.
+ *
+ * @author Arjen Poutsma
+ * @since 3.0.4
+ * @see FactoryBean
+ * @see Proxy
+ */
+public class ProxyFactoryBean implements FactoryBean