You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by et...@apache.org on 2008/10/30 10:24:58 UTC
svn commit: r709124 - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/render/
main/java/org/apache/shindig/gadgets/servlet/
test/java/org/apache/shindig/gadgets/render/
test/java/org/apache/shindig/gadgets/servlet/
Author: etnu
Date: Thu Oct 30 02:24:58 2008
New Revision: 709124
URL: http://svn.apache.org/viewvc?rev=709124&view=rev
Log:
Fixed propagation of rendering error output.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java?rev=709124&r1=709123&r2=709124&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/Renderer.java Thu Oct 30 02:24:58 2008
@@ -22,6 +22,7 @@
import org.apache.shindig.common.uri.Uri;
import org.apache.shindig.gadgets.Gadget;
import org.apache.shindig.gadgets.GadgetContext;
+import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.LockedDomainService;
import org.apache.shindig.gadgets.process.ProcessingException;
import org.apache.shindig.gadgets.process.Processor;
@@ -33,6 +34,7 @@
import org.json.JSONArray;
import org.json.JSONException;
+import java.net.URI;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
@@ -90,14 +92,22 @@
return RenderingResults.ok(renderer.render(gadget));
} catch (RenderingException e) {
- LOG.log(Level.WARNING, "Failed to render gadget " + context.getUrl(), e);
- return RenderingResults.error(e.getLocalizedMessage());
+ return logError(context.getUrl(), e);
} catch (ProcessingException e) {
- LOG.log(Level.WARNING, "Failed to process gadget " + context.getUrl(), e);
- return RenderingResults.error(e.getLocalizedMessage());
+ return logError(context.getUrl(), e);
+ } catch (RuntimeException e) {
+ if (e.getCause() instanceof GadgetException) {
+ return logError(context.getUrl(), e.getCause());
+ }
+ throw e;
}
}
+ private RenderingResults logError(URI gadgetUrl, Throwable t) {
+ LOG.info("Failed to render gadget " + gadgetUrl + ": " + t.getMessage());
+ return RenderingResults.error(t.getMessage());
+ }
+
/**
* Validates that the parent parameter was acceptable.
*
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java?rev=709124&r1=709123&r2=709124&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServlet.java Thu Oct 30 02:24:58 2008
@@ -34,7 +34,7 @@
* Servlet for rendering Gadgets.
*/
public class GadgetRenderingServlet extends InjectedServlet {
- private static final int DEFAULT_CACHE_TTL = 60 * 5;
+ static final int DEFAULT_CACHE_TTL = 60 * 5;
private Renderer renderer;
@Inject
@@ -71,7 +71,7 @@
resp.getWriter().print(results.getContent());
break;
case ERROR:
- resp.sendError(HttpServletResponse.SC_BAD_GATEWAY, results.getErrorMessage());
+ resp.getWriter().print(results.getErrorMessage());
break;
case MUST_REDIRECT:
resp.sendRedirect(results.getRedirect().toString());
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java?rev=709124&r1=709123&r2=709124&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/render/RendererTest.java Thu Oct 30 02:24:58 2008
@@ -116,6 +116,21 @@
}
@Test
+ public void handlesRuntimeWrappedGadgetExceptionGracefully() {
+ htmlRenderer.runtimeException = new RuntimeException(
+ new GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT, "oh no!"));
+ RenderingResults results = renderer.render(makeContext("html"));
+ assertEquals(RenderingResults.Status.ERROR, results.getStatus());
+ assertEquals("oh no!", results.getErrorMessage());
+ }
+
+ @Test(expected = RuntimeException.class)
+ public void otherRuntimeExceptionsThrow() {
+ htmlRenderer.runtimeException = new RuntimeException("Help!");
+ renderer.render(makeContext("html"));
+ }
+
+ @Test
public void validateParent() throws Exception {
containerConfig.json.put("gadgets.parent",
new JSONArray(Arrays.asList("http:\\/\\/example\\.org\\/[a-z]+", "localhost")));
@@ -170,6 +185,7 @@
private static class FakeHtmlRenderer extends HtmlRenderer {
private RenderingException exception;
+ private RuntimeException runtimeException;
public FakeHtmlRenderer() {
super(null, null, null);
@@ -180,6 +196,9 @@
if (exception != null) {
throw exception;
}
+ if (runtimeException != null) {
+ throw runtimeException;
+ }
return gadget.getCurrentView().getContent();
}
}
@@ -196,7 +215,6 @@
if (exception != null) {
throw exception;
}
-
try {
GadgetSpec spec = new GadgetSpec(SPEC_URL, GADGET);
View view = spec.getView(context.getView());
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java?rev=709124&r1=709123&r2=709124&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/GadgetRenderingServletTest.java Thu Oct 30 02:24:58 2008
@@ -21,6 +21,7 @@
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isA;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
import org.apache.shindig.gadgets.GadgetContext;
import org.apache.shindig.gadgets.http.HttpRequest;
@@ -56,6 +57,36 @@
}
@Test
+ public void normalResponse() throws Exception {
+ servlet.setRenderer(renderer);
+ expect(renderer.render(isA(GadgetContext.class)))
+ .andReturn(RenderingResults.ok("working"));
+ control.replay();
+
+ servlet.doGet(request, recorder);
+
+ assertEquals(HttpServletResponse.SC_OK, recorder.getHttpStatusCode());
+ assertEquals("private,max-age=" + GadgetRenderingServlet.DEFAULT_CACHE_TTL,
+ recorder.getHeader("Cache-Control"));
+ assertEquals("working", recorder.getResponseAsString());
+ }
+
+ @Test
+ public void errorsPassedThrough() throws Exception {
+ servlet.setRenderer(renderer);
+ expect(renderer.render(isA(GadgetContext.class)))
+ .andReturn(RenderingResults.error("busted"));
+ control.replay();
+
+ servlet.doGet(request, recorder);
+
+ assertEquals(HttpServletResponse.SC_OK, recorder.getHttpStatusCode());
+ assertNull("Cache-Control header passed where it should not be.",
+ recorder.getHeader("Cache-Control"));
+ assertEquals("busted", recorder.getResponseAsString());
+ }
+
+ @Test
public void outputEncodingIsUtf8() throws Exception {
servlet.setRenderer(renderer);
expect(renderer.render(isA(GadgetContext.class)))