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)))