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";
   }