You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by li...@apache.org on 2010/06/22 01:07:00 UTC
svn commit: r956726 - in /shindig/trunk/java: common/conf/
gadgets/src/main/java/org/apache/shindig/gadgets/http/
gadgets/src/main/java/org/apache/shindig/gadgets/oauth/
gadgets/src/test/java/org/apache/shindig/gadgets/http/
gadgets/src/test/java/org/a...
Author: lindner
Date: Mon Jun 21 23:07:00 2010
New Revision: 956726
URL: http://svn.apache.org/viewvc?rev=956726&view=rev
Log:
Patch from Gagan Goku | Support for http proxy settings
Modified:
shindig/trunk/java/common/conf/shindig.properties
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthCommandLine.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpFetcherTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultRpcServiceLookupTest.java
Modified: shindig/trunk/java/common/conf/shindig.properties
URL: http://svn.apache.org/viewvc/shindig/trunk/java/common/conf/shindig.properties?rev=956726&r1=956725&r2=956726&view=diff
==============================================================================
--- shindig/trunk/java/common/conf/shindig.properties (original)
+++ shindig/trunk/java/common/conf/shindig.properties Mon Jun 21 23:07:00 2010
@@ -124,6 +124,10 @@ shindig.http.client.max-object-size-byte
shindig.uri.proxy.use-strict-parsing=false
shindig.uri.concat.use-strict-parsing=false
+# Host:port of the proxy to use while fetching urls. Leave blank if proxy is
+# not to be used.
+org.apache.shindig.gadgets.http.basicHttpFetcherProxy=
+
org.apache.shindig.serviceExpirationDurationMinutes=60
#
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java?rev=956726&r1=956725&r2=956726&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/BasicHttpFetcher.java Mon Jun 21 23:07:00 2010
@@ -48,6 +48,7 @@ import org.apache.http.conn.ConnectionPo
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.conn.params.ConnManagerParams;
import org.apache.http.conn.params.ConnPerRouteBean;
+import org.apache.http.conn.params.ConnRouteParams;
import org.apache.http.conn.scheme.PlainSocketFactory;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.conn.scheme.SchemeRegistry;
@@ -113,9 +114,13 @@ public class BasicHttpFetcher implements
/**
* Creates a new fetcher using the default maximum object size and timeout --
* no limit and 5 seconds.
+ * @param basicHttpFetcherProxy The http proxy to use.
*/
- public BasicHttpFetcher() {
- this(DEFAULT_MAX_OBJECT_SIZE, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS);
+ @Inject
+ public BasicHttpFetcher(@Named("org.apache.shindig.gadgets.http.basicHttpFetcherProxy")
+ String basicHttpFetcherProxy) {
+ this(DEFAULT_MAX_OBJECT_SIZE, DEFAULT_CONNECT_TIMEOUT_MS, DEFAULT_READ_TIMEOUT_MS,
+ basicHttpFetcherProxy);
}
/**
@@ -126,8 +131,10 @@ public class BasicHttpFetcher implements
* @param maxObjSize Maximum size, in bytes, of the object we will fetch, 0 if no limit..
* @param connectionTimeoutMs timeout, in milliseconds, for connecting to hosts.
* @param readTimeoutMs timeout, in millseconds, for unresponsive connections
+ * @param basicHttpFetcherProxy The http proxy to use.
*/
- public BasicHttpFetcher(int maxObjSize, int connectionTimeoutMs, int readTimeoutMs) {
+ public BasicHttpFetcher(int maxObjSize, int connectionTimeoutMs, int readTimeoutMs,
+ String basicHttpFetcherProxy) {
// Create and initialize HTTP parameters
setMaxObjectSizeBytes(maxObjSize);
setSlowResponseWarning(DEFAULT_SLOW_RESPONSE_WARNING);
@@ -157,9 +164,15 @@ public class BasicHttpFetcher implements
schemeRegistry.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry);
-
DefaultHttpClient client = new DefaultHttpClient(cm, params);
+ // Set proxy if set via guice.
+ if (!StringUtils.isEmpty(basicHttpFetcherProxy)) {
+ String[] splits = basicHttpFetcherProxy.split(":");
+ ConnRouteParams.setDefaultProxy(
+ client.getParams(), new HttpHost(splits[0], Integer.parseInt(splits[1]), "http"));
+ }
+
// try resending the request once
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(1, true));
@@ -198,11 +211,13 @@ public class BasicHttpFetcher implements
});
client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler() );
- // Use Java's built-in proxy logic
- ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(
- client.getConnectionManager().getSchemeRegistry(),
- ProxySelector.getDefault());
- client.setRoutePlanner(routePlanner);
+ // Use Java's built-in proxy logic in case no proxy set via guice.
+ if (StringUtils.isEmpty(basicHttpFetcherProxy)) {
+ ProxySelectorRoutePlanner routePlanner = new ProxySelectorRoutePlanner(
+ client.getConnectionManager().getSchemeRegistry(),
+ ProxySelector.getDefault());
+ client.setRoutePlanner(routePlanner);
+ }
FETCHER = client;
}
@@ -282,12 +297,19 @@ public class BasicHttpFetcher implements
HttpServletResponse.SC_BAD_REQUEST);
}
}
- HttpHost host = new HttpHost(hostparts[0], port, uri.getScheme());
+
String requestUri = uri.getPath();
+ // Treat path as / if set as null.
+ if (uri.getPath() == null) {
+ requestUri = "/";
+ }
if (uri.getQuery() != null) {
requestUri += '?' + uri.getQuery();
}
+ // Get the http host to connect to.
+ HttpHost host = new HttpHost(hostparts[0], port, uri.getScheme());
+
try {
if ("POST".equals(methodType) || "PUT".equals(methodType)) {
HttpEntityEnclosingRequestBase enclosingMethod = ("POST".equals(methodType))
@@ -309,8 +331,10 @@ public class BasicHttpFetcher implements
httpMethod.addHeader(entry.getKey(), StringUtils.join(entry.getValue(), ','));
}
- if (!request.getFollowRedirects())
+ // Disable following redirects.
+ if (!request.getFollowRedirects()) {
httpMethod.getParams().setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, false);
+ }
// HttpClient doesn't handle all cases when breaking url (specifically '_' in domain)
// So lets pass it the url parsed:
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthCommandLine.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthCommandLine.java?rev=956726&r1=956725&r2=956726&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthCommandLine.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthCommandLine.java Mon Jun 21 23:07:00 2010
@@ -59,6 +59,7 @@ import java.util.Map;
* --postFile <file path of post body contents>
* --paramLocation <URI_QUERY | POST_BODY | AUTH_HEADER>
* --bodySigning hash|legacy|none
+ * --httpProxy=<http proxy to use for fetching>
*/
public class OAuthCommandLine {
@@ -73,6 +74,7 @@ public class OAuthCommandLine {
for (int i = 0; i < argv.length; i+=2) {
params.put(argv[i], argv[i+1]);
}
+ final String httpProxy = params.get("--httpProxy");
final String consumerKey = params.get("--consumerKey");
final String consumerSecret = params.get("--consumerSecret");
final String xOauthRequestor = params.get("--requestorId");
@@ -162,7 +164,7 @@ public class OAuthCommandLine {
}
request.setMethod(method);
- HttpFetcher fetcher = new BasicHttpFetcher();
+ HttpFetcher fetcher = new BasicHttpFetcher(httpProxy);
HttpResponse response = fetcher.fetch(request);
System.out.println("Request ------------------------------");
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java?rev=956726&r1=956725&r2=956726&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/AbstractHttpFetcherTest.java Mon Jun 21 23:07:00 2010
@@ -36,7 +36,7 @@ import org.junit.Test;
*/
public abstract class AbstractHttpFetcherTest {
private static final int ECHO_PORT = 9003;
- private static final Uri BASE_URL = Uri.parse("http://localhost:9003/");
+ protected static final Uri BASE_URL = Uri.parse("http://localhost:9003/");
private static EchoServer server;
protected HttpFetcher fetcher = null;
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpFetcherTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpFetcherTest.java?rev=956726&r1=956725&r2=956726&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpFetcherTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpFetcherTest.java Mon Jun 21 23:07:00 2010
@@ -17,12 +17,30 @@
*/
package org.apache.shindig.gadgets.http;
+import org.apache.shindig.common.uri.Uri;
+import org.apache.shindig.common.uri.UriBuilder;
+import static org.junit.Assert.assertEquals;
import org.junit.Before;
+import org.junit.Test;
public class BasicHttpFetcherTest extends AbstractHttpFetcherTest {
-
@Before
- public void setUp() {
- fetcher = new BasicHttpFetcher();
+ public void setUp() throws Exception {
+ fetcher = new BasicHttpFetcher(null);
+ }
+
+ @Test
+ public void testWithProxy() throws Exception {
+ fetcher = new BasicHttpFetcher(BASE_URL.getAuthority());
+
+ String content = "Hello, Gagan!";
+ Uri uri = new UriBuilder(Uri.parse("http://www.google.com/search"))
+ .addQueryParameter("body", content)
+ .addQueryParameter("status", "201")
+ .toUri();
+ HttpRequest request = new HttpRequest(uri);
+ HttpResponse response = fetcher.fetch(request);
+ assertEquals(201, response.getHttpStatusCode());
+ assertEquals(content, response.getResponseAsString());
}
-}
\ No newline at end of file
+}
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultRpcServiceLookupTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultRpcServiceLookupTest.java?rev=956726&r1=956725&r2=956726&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultRpcServiceLookupTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/DefaultRpcServiceLookupTest.java Mon Jun 21 23:07:00 2010
@@ -39,7 +39,8 @@ public class DefaultRpcServiceLookupTest
@Before
public void setUp() throws Exception {
- svcLookup = new DefaultRpcServiceLookup(new DefaultServiceFetcher(null, new BasicHttpFetcher()), 60l);
+ svcLookup = new DefaultRpcServiceLookup(new DefaultServiceFetcher(null, new BasicHttpFetcher(null)),
+ 60l);
socialEndpoint = "http://localhost:8080/social/rpc";
host = "localhost:8080";
}