Author: etnu
Date: Thu Apr 30 22:47:55 2009
New Revision: 770480

URL: http://svn.apache.org/viewvc?rev=770480&view=rev
Log:
Fixed misuse of UTF8.encode in data pipelining. This was resulting in null 
bytes being appended to the POST body, which caused parsing errors for several 
popular JSON libraries.


Modified:
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
    
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java?rev=770480&r1=770479&r2=770480&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/preload/PipelinedDataPreloader.java
 Thu Apr 30 22:47:55 2009
@@ -18,11 +18,11 @@
  */
 package org.apache.shindig.gadgets.preload;
 
-import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.common.JsonSerializer;
 import org.apache.shindig.common.JsonUtil;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
+import org.apache.shindig.common.util.CharsetUtil;
 import org.apache.shindig.config.ContainerConfig;
 import org.apache.shindig.gadgets.AuthType;
 import org.apache.shindig.gadgets.GadgetContext;
@@ -39,6 +39,7 @@
 import com.google.common.collect.Lists;
 import com.google.inject.Inject;
 
+import org.apache.commons.lang.StringUtils;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -126,7 +127,7 @@
           .setSecurityToken(context.getToken())
           .setMethod("POST")
           .setAuthType(AuthType.NONE)
-          .setPostBody(UTF8.encode(socialRequestsJson).array())
+          .setPostBody(CharsetUtil.getUtf8Bytes(socialRequestsJson))
           .addHeader("Content-Type", "application/json; charset=UTF-8")
           .setContainer(context.getContainer())
           .setGadget(context.getUrl());
@@ -161,7 +162,7 @@
       String response) throws JSONException {
     // Unpack the response into a list of PreloadedData responses
     final List<Object> data = Lists.newArrayList();
-    
+
     if (response.startsWith("[")) {
       // A non-error response is a JSON array
       JSONArray array = new JSONArray(response);
@@ -179,10 +180,10 @@
         data.add(itemResponse);
       }
     }
-    
+
     return data;
   }
-  
+
   /** A task for loading os:HttpRequest */
   class HttpPreloadTask implements Callable<PreloadedData> {
     private final GadgetContext context;
@@ -338,7 +339,7 @@
     if (data.length() > 0) {
       error.put("data", data);
     }
-    
+
     return error;
   }
 

Modified: 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java
URL: 
http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java?rev=770480&r1=770479&r2=770480&view=diff
==============================================================================
--- 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java
 (original)
+++ 
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/render/ProxyRenderer.java
 Thu Apr 30 22:47:55 2009
@@ -21,6 +21,7 @@
 import org.apache.shindig.common.JsonSerializer;
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.uri.UriBuilder;
+import org.apache.shindig.common.util.CharsetUtil;
 import org.apache.shindig.gadgets.Gadget;
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
@@ -33,12 +34,12 @@
 import org.apache.shindig.gadgets.spec.PipelinedData;
 import org.apache.shindig.gadgets.spec.View;
 
-import java.nio.charset.Charset;
-
 import com.google.common.base.Preconditions;
 import com.google.common.collect.ImmutableList;
 import com.google.inject.Inject;
 
+import java.nio.charset.Charset;
+
 /**
  * Implements proxied rendering.
  */
@@ -68,7 +69,7 @@
     View view = gadget.getCurrentView();
     Uri href = view.getHref();
     Preconditions.checkArgument(href != null, "Gadget does not have href for 
the current view");
-    
+
     GadgetContext context = gadget.getContext();
     String path = context.getParameter(PATH_PARAM);
     if (path != null) {
@@ -89,7 +90,7 @@
 
     OAuthArguments oauthArgs = new OAuthArguments(view);
     oauthArgs.setProxiedContentRequest(true);
-    
+
     HttpRequest request = new HttpRequest(uri.toUri())
         .setIgnoreCache(context.getIgnoreCache())
         .setOAuthArguments(oauthArgs)
@@ -111,7 +112,7 @@
         response.getHttpStatusCode());
     }
 
-    return response.getResponseAsString();    
+    return response.getResponseAsString();
   }
 
   /**
@@ -121,22 +122,22 @@
   private HttpRequest createPipelinedProxyRequest(Gadget gadget, HttpRequest 
original) {
     HttpRequest request = new HttpRequest(original);
     request.setIgnoreCache(true);
-    
+
     PipelinedData data = gadget.getCurrentView().getPipelinedData();
     if (data != null) {
-      PipelineExecutor.Results results = 
+      PipelineExecutor.Results results =
         pipelineExecutor.execute(gadget.getContext(), ImmutableList.of(data));
-    
+
       if (results != null && !results.results.isEmpty()) {
         String postContent = JsonSerializer.serialize(results.results);
         // POST the preloaded content, with a method override of GET
         // to enable caching
         request.setMethod("POST")
-            .setPostBody(UTF8.encode(postContent).array())
+            .setPostBody(CharsetUtil.getUtf8Bytes(postContent))
             .setHeader("Content-Type", "application/json;charset=utf-8");
       }
     }
-    
+
     return request;
   }
 }


Reply via email to