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/07/27 00:18:43 UTC

svn commit: r979472 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java

Author: johnh
Date: Mon Jul 26 22:18:43 2010
New Revision: 979472

URL: http://svn.apache.org/viewvc?rev=979472&view=rev
Log:
Handle null MutableContent.getDocument() gracefully in DomWalker.

Patch provided by Gagan Singh.


Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java?rev=979472&r1=979471&r2=979472&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/rewrite/DomWalker.java Mon Jul 26 22:18:43 2010
@@ -29,8 +29,10 @@ import org.apache.shindig.gadgets.http.H
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.uri.UriCommon.Param;
 
+import org.w3c.dom.Document;
 import org.w3c.dom.Node;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
 import java.util.LinkedList;
 import java.util.List;
@@ -148,7 +150,13 @@ public final class DomWalker {
       Map<Visitor, List<Node>> reservations = Maps.newHashMap();
         
       LinkedList<Node> toVisit = Lists.newLinkedList();
-      toVisit.add(content.getDocument().getDocumentElement());
+      Document doc = content.getDocument();
+      if (doc == null) {
+        throw new RewritingException("content.getDocument is null. Content: "
+                                     + content.getContent(),
+                                     HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+      }
+      toVisit.add(doc.getDocumentElement());
       boolean mutated = false;
       while (!toVisit.isEmpty()) {
         Node visiting = toVisit.removeFirst();

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java?rev=979472&r1=979471&r2=979472&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/rewrite/DomWalkerTest.java Mon Jul 26 22:18:43 2010
@@ -18,24 +18,19 @@
  */
 package org.apache.shindig.gadgets.rewrite;
 
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.expectLastCall;
-import static org.easymock.EasyMock.replay;
-import static org.easymock.EasyMock.verify;
-
 import com.google.common.collect.Lists;
-
 import org.apache.shindig.gadgets.Gadget;
-import org.apache.shindig.gadgets.rewrite.MutableContent;
-
 import org.junit.Before;
 import org.junit.Test;
-
 import org.w3c.dom.Node;
 
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
+import static org.easymock.EasyMock.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
 public class DomWalkerTest extends DomWalkerTestBase {
   private Node root;
   private Node child1;
@@ -245,7 +240,30 @@ public class DomWalkerTest extends DomWa
     // As before, MutableContent verification is the test.
     verify(mc);
   }
-  
+
+  @Test
+  public void rewriteThrowsRewritingExceptionIfGetDocumentIsNull() throws Exception {
+    DomWalker.Visitor visitor1 = createMock(DomWalker.Visitor.class);
+    DomWalker.Rewriter rewriter = getRewriter(visitor1);
+
+    MutableContent mc = createMock(MutableContent.class);
+    expect(mc.getDocument()).andReturn(null);
+    expect(mc.getContent()).andReturn("hello!");
+    replay(mc);
+
+    Gadget gadget = gadget();
+    boolean exceptionCaught = false;
+    try {
+      rewriter.rewrite(gadget, mc);
+    } catch (RewritingException e) {
+      assertEquals(e.getHttpStatusCode(),
+                   HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+      exceptionCaught = true;
+    }
+
+    assertTrue(exceptionCaught);
+  }
+
   private DomWalker.Rewriter getRewriter(DomWalker.Visitor... visitors) {
     return new DomWalker.Rewriter(Lists.newArrayList(visitors));
   }