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>