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;
}
}