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/03/11 00:00:32 UTC

svn commit: r921615 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java

Author: johnh
Date: Wed Mar 10 23:00:32 2010
New Revision: 921615

URL: http://svn.apache.org/viewvc?rev=921615&view=rev
Log:
Handle unescaped BOM chars at BOF in default spec factory.


Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java?rev=921615&r1=921614&r2=921615&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactory.java Wed Mar 10 23:00:32 2010
@@ -18,6 +18,10 @@
  */
 package org.apache.shindig.gadgets;
 
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+import com.google.inject.name.Named;
+
 import org.apache.shindig.common.cache.Cache;
 import org.apache.shindig.common.cache.CacheProvider;
 import org.apache.shindig.common.uri.Uri;
@@ -27,11 +31,6 @@ import org.apache.shindig.gadgets.http.R
 import org.apache.shindig.gadgets.servlet.HtmlAccelServlet;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.SpecParserException;
-
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-import com.google.inject.name.Named;
-
 import org.w3c.dom.Element;
 
 import java.util.concurrent.ExecutorService;
@@ -89,6 +88,11 @@ public class DefaultGadgetSpecFactory ex
 
   @Override
   protected GadgetSpec parse(String content, Query query) throws XmlException, GadgetException {
+    // Allow BOM entity as first item on stream and ignore it:
+    final String BOM_ENTITY = "";
+    if (content.substring(0, BOM_ENTITY.length()).equalsIgnoreCase(BOM_ENTITY)) {
+      content = content.substring(BOM_ENTITY.length());
+    }
     Element element = XmlUtil.parse(content);
     return new GadgetSpec(query.getSpecUri(), element, content);
   }

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java?rev=921615&r1=921614&r2=921615&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/DefaultGadgetSpecFactoryTest.java Wed Mar 10 23:00:32 2010
@@ -34,7 +34,6 @@ import org.apache.shindig.gadgets.http.H
 import org.apache.shindig.gadgets.http.RequestPipeline;
 import org.apache.shindig.gadgets.spec.GadgetSpec;
 import org.apache.shindig.gadgets.spec.SpecParserException;
-
 import org.easymock.EasyMock;
 import org.junit.Test;
 
@@ -134,6 +133,30 @@ public class DefaultGadgetSpecFactoryTes
     assertEquals(LOCAL_CONTENT, spec.getView(GadgetSpec.DEFAULT_VIEW).getContent());
   }
 
+  @Test
+  public void specFetchedWithBom() throws Exception {
+    HttpRequest request = createIgnoreCacheRequest();
+    HttpResponse response = new HttpResponse("" + LOCAL_SPEC_XML);
+    expect(pipeline.execute(request)).andReturn(response);
+    replay(pipeline);
+
+    GadgetSpec spec = specFactory.getGadgetSpec(createContext(SPEC_URL, true));
+
+    assertEquals(LOCAL_CONTENT, spec.getView(GadgetSpec.DEFAULT_VIEW).getContent());
+  }
+
+  @Test
+  public void specFetchedWithBomChar() throws Exception {
+    HttpRequest request = createIgnoreCacheRequest();
+    HttpResponse response = new HttpResponse("\uFEFF" + LOCAL_SPEC_XML);
+    expect(pipeline.execute(request)).andReturn(response);
+    replay(pipeline);
+
+    GadgetSpec spec = specFactory.getGadgetSpec(createContext(SPEC_URL, true));
+
+    assertEquals(LOCAL_CONTENT, spec.getView(GadgetSpec.DEFAULT_VIEW).getContent());
+  }
+
   // TODO: Move these tests into AbstractSpecFactoryTest
   @Test
   public void specRefetchedAsync() throws Exception {