You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/06/23 01:23:06 UTC

svn commit: r957079 - in /shindig/trunk/java: gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ gadgets/src/main/java/org/apache/shindig/gadgets/uri/ gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ gadgets/src/test/java/org/apache/shi...

Author: johnh
Date: Tue Jun 22 23:23:06 2010
New Revision: 957079

URL: http://svn.apache.org/viewvc?rev=957079&view=rev
Log:
Adding capability in accel servlet to act as accelerating proxy

Patch provided by Gagan Singh.


Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AccelUriManager.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AccelUriManagerTest.java
    shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java?rev=957079&r1=957078&r2=957079&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/AccelHandler.java Tue Jun 22 23:23:06 2010
@@ -24,14 +24,17 @@ import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
+import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.RequestPipeline;
+import org.apache.shindig.gadgets.rewrite.DomWalker;
 import org.apache.shindig.gadgets.rewrite.ResponseRewriterRegistry;
 import org.apache.shindig.gadgets.rewrite.RewritingException;
 import org.apache.shindig.gadgets.uri.AccelUriManager;
 import org.apache.shindig.gadgets.uri.ProxyUriManager;
+import org.apache.shindig.gadgets.uri.UriCommon;
 import org.apache.shindig.gadgets.uri.UriUtils;
 
 import java.io.IOException;
@@ -74,7 +77,7 @@ public class AccelHandler extends ProxyB
 
     // Parse and normalize to get a proxied request uri.
     Uri requestUri = new UriBuilder(request).toUri();
-    ProxyUriManager.ProxyUri proxyUri = uriManager.parseAndNormalize(requestUri);
+    ProxyUriManager.ProxyUri proxyUri = getProxyUri(requestUri);
 
     // Fetch the content of the requested uri.
     HttpRequest req = buildHttpRequest(request, proxyUri);
@@ -109,6 +112,30 @@ public class AccelHandler extends ProxyB
   }
 
   /**
+   * Returns the proxy uri encapsulating the request uri.
+   * @param requestUri The request uri.
+   * @return The proxy uri encapsulating the request uri.
+   * @throws GadgetException In case of errors.
+   */
+  public ProxyUriManager.ProxyUri getProxyUri(Uri requestUri) throws GadgetException {
+    Uri proxiedUri = uriManager.parseAndNormalize(requestUri);
+    String uriString = proxiedUri.getQueryParameter(UriCommon.Param.URL.getKey());
+
+    // Throw BAD_GATEWAY in case parsing of url fails.
+    Uri normalizedUri;
+    try {
+      normalizedUri = Uri.parse(uriString);
+    } catch (Uri.UriException e) {
+      throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR,
+                                "Failed to parse uri: " + uriString,
+                                HttpServletResponse.SC_BAD_GATEWAY);
+    }
+
+    Gadget gadget = DomWalker.makeGadget(requestUri);
+    return new ProxyUriManager.ProxyUri(gadget, normalizedUri);
+  }
+
+  /**
    * Generate a remote content request based on the parameters sent from the client.
    * @param request The http request.
    * @param uriToProxyOrRewrite The parsed uri to proxy or rewrite through

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AccelUriManager.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AccelUriManager.java?rev=957079&r1=957078&r2=957079&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AccelUriManager.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AccelUriManager.java Tue Jun 22 23:23:06 2010
@@ -18,26 +18,24 @@
  */
 package org.apache.shindig.gadgets.uri;
 
-import com.google.inject.Inject;
-import com.google.inject.internal.Nullable;
+import com.google.inject.ImplementedBy;
 
 import org.apache.shindig.common.uri.Uri;
-import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.GadgetException;
 
 /**
  * UriManager for Accel servlet.
  */
-public class AccelUriManager extends DefaultProxyUriManager {
+@ImplementedBy(DefaultAccelUriManager.class)
+public interface AccelUriManager {
+  public static final String PROXY_HOST_PARAM = DefaultProxyUriManager.PROXY_HOST_PARAM;
+  public static final String PROXY_PATH_PARAM = DefaultProxyUriManager.PROXY_PATH_PARAM;
 
-  @Inject
-  public AccelUriManager(ContainerConfig config,
-                         @Nullable Versioner versioner) {
-    super(config, versioner);
-  }
-
-  public ProxyUri parseAndNormalize(Uri requestUri) throws GadgetException {
-    // TODO: Handle normalization.
-    return process(requestUri);
-  }
+  /**
+   * Parses and normalizes the given uri to be proxied through accel.
+   * @param requestUri The uri to proxy through accel. @return Accel proxied uri.
+   * @return Normalized uri to be proxied through accel.
+   * @throws GadgetException In case of errors.
+   */
+  public Uri parseAndNormalize(Uri requestUri) throws GadgetException;
 }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java?rev=957079&r1=957078&r2=957079&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/HtmlAccelServletTest.java Tue Jun 22 23:23:06 2010
@@ -18,11 +18,12 @@
  */
 package org.apache.shindig.gadgets.servlet;
 
-import com.google.common.collect.Maps;
+import com.google.common.collect.ImmutableMap;
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.config.AbstractContainerConfig;
+import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.http.HttpRequest;
 import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.http.HttpResponseBuilder;
@@ -30,6 +31,8 @@ import org.apache.shindig.gadgets.rewrit
 import org.apache.shindig.gadgets.rewrite.DefaultResponseRewriterRegistry;
 import org.apache.shindig.gadgets.rewrite.ResponseRewriter;
 import org.apache.shindig.gadgets.uri.AccelUriManager;
+import org.apache.shindig.gadgets.uri.DefaultAccelUriManager;
+import org.apache.shindig.gadgets.uri.DefaultProxyUriManager;
 import static org.easymock.EasyMock.expect;
 import org.junit.Before;
 import org.junit.Test;
@@ -40,7 +43,10 @@ import java.util.Map;
 public class HtmlAccelServletTest extends ServletTestFixture {
 
   private static class FakeContainerConfig extends AbstractContainerConfig {
-    protected final Map<String, Object> data = Maps.newHashMap();
+    protected final Map<String, Object> data = ImmutableMap.<String, Object>builder()
+        .put(AccelUriManager.PROXY_HOST_PARAM, "apache.org")
+        .put(AccelUriManager.PROXY_PATH_PARAM, "/gadgets/accel")
+        .build();
 
     @Override
     public Object getProperty(String container, String name) {
@@ -70,8 +76,9 @@ public class HtmlAccelServletTest extend
   @Before
   public void setUp() throws Exception {
     servlet = new HtmlAccelServlet();
-    AccelUriManager accelUriManager = new AccelUriManager(
-        new FakeContainerConfig(), null);
+    ContainerConfig config = new FakeContainerConfig();
+    AccelUriManager accelUriManager = new DefaultAccelUriManager(
+        config, new DefaultProxyUriManager(config, null));
 
     rewriter = new FakeCaptureRewriter();
     rewriterRegistry = new DefaultResponseRewriterRegistry(
@@ -193,7 +200,8 @@ public class HtmlAccelServletTest extend
     expect(request.getRequestURL())
         .andReturn(new StringBuffer("apache.org" + SERVLET + extraPath))
         .anyTimes();
-    String queryParams = (url == null ? "" : "url=" + url + "&container=accel");
+    String queryParams = (url == null ? "" : "url=" + url + "&container=accel"
+                                             + "&gadget=test");
     expect(request.getQueryString()).andReturn(queryParams).anyTimes();
   }
 }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AccelUriManagerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AccelUriManagerTest.java?rev=957079&r1=957078&r2=957079&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AccelUriManagerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AccelUriManagerTest.java Tue Jun 22 23:23:06 2010
@@ -1,41 +0,0 @@
-/*
- * 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.
- */
-package org.apache.shindig.gadgets.uri;
-
-import org.apache.shindig.config.ContainerConfig;
-import static org.junit.Assert.assertTrue;
-import org.junit.Before;
-import org.junit.Test;
-
-/**
- * Test fot AccelUriManager.
- */
-public class AccelUriManagerTest {
-  AccelUriManager uriManager;
-  ContainerConfig config;
-
-  @Before
-  public void setUp() {
-    uriManager = new AccelUriManager(config, null);
-  }
-
-  @Test
-  public void testHttpBadPort() throws Exception {
-    assertTrue(true);
-  }
-}

Modified: shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml?rev=957079&r1=957078&r2=957079&view=diff
==============================================================================
--- shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml (original)
+++ shindig/trunk/java/server/src/main/webapp/WEB-INF/web.xml Tue Jun 22 23:23:06 2010
@@ -246,6 +246,11 @@
   </servlet-mapping>
 
   <servlet-mapping>
+    <servlet-name>accel</servlet-name>
+    <url-pattern>/*</url-pattern>
+  </servlet-mapping>
+
+  <servlet-mapping>
     <servlet-name>metadata</servlet-name>
     <url-pattern>/gadgets/metadata</url-pattern>
   </servlet-mapping>