Author: johnh
Date: Wed Apr 7 18:34:45 2010
New Revision: 931639
URL: http://svn.apache.org/viewvc?rev=931639&view=rev
Log:
"Issue found due to rewritters change.
Basically when a new response is created based on current response with encoding
different then utf8, and then setResponseString is called, the encoding would be
wrong.
The solution is to update encoding when calling setResponseString."
Patch supplied by Ziv Horesh.
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java?rev=931639&r1=931638&r2=931639&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
(original)
+++
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponseBuilder.java
Wed Apr 7 18:34:45 2010
@@ -17,16 +17,17 @@
*/
package org.apache.shindig.gadgets.http;
-import org.apache.shindig.common.util.CharsetUtil;
-import org.apache.shindig.common.util.DateUtil;
-
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
import org.apache.commons.lang.ArrayUtils;
+import org.apache.commons.lang.StringUtils;
+import org.apache.shindig.common.util.CharsetUtil;
+import org.apache.shindig.common.util.DateUtil;
+import java.nio.charset.Charset;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -71,6 +72,27 @@ public class HttpResponseBuilder {
*/
public HttpResponseBuilder setResponseString(String body) {
responseBytes = CharsetUtil.getUtf8Bytes(body);
+ setEncoding(CharsetUtil.UTF8);
+ return this;
+ }
+
+ public HttpResponseBuilder setEncoding(Charset charset) {
+
+ Collection<String> values = headers.get("Content-Type");
+ if (!values.isEmpty()) {
+ String contentType = values.iterator().next();
+ String newContentType = "";
+ // Remove previously set charset:
+ String[] parts = StringUtils.split(contentType, ';');
+ for (String part : parts) {
+ if (part.indexOf("charset=") < 0) {
+ newContentType += part + "; ";
+ }
+ }
+ newContentType += "charset=" + charset.name();
+ values.clear();
+ values.add(newContentType);
+ }
return this;
}
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java?rev=931639&r1=931638&r2=931639&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseBuilderTest.java
Wed Apr 7 18:34:45 2010
@@ -31,6 +31,7 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
+import org.apache.shindig.common.util.CharsetUtil;
import org.junit.Test;
import java.util.Arrays;
@@ -131,6 +132,25 @@ public class HttpResponseBuilderTest {
assertEquals("no-cache", headers.get("Pragma").iterator().next());
}
+ @Test
+ public void setEncoding() {
+ HttpResponseBuilder builder = new HttpResponseBuilder()
+ .addHeader("Content-Type", "text/html; charset=Big5")
+ .setEncoding(CharsetUtil.UTF8);
+
+ Multimap<String, String> headers = builder.getHeaders();
+ assertEquals("text/html; charset=UTF-8",
headers.get("Content-Type").iterator().next());
+ }
+
+ @Test
+ public void setEncodingEmpty() {
+ HttpResponseBuilder builder = new HttpResponseBuilder()
+ .addHeader("Content-Type", "text/html")
+ .setEncoding(CharsetUtil.UTF8);
+
+ Multimap<String, String> headers = builder.getHeaders();
+ assertEquals("text/html; charset=UTF-8",
headers.get("Content-Type").iterator().next());
+ }
@Test
public void setResponseString() {
@@ -141,6 +161,17 @@ public class HttpResponseBuilderTest {
}
@Test
+ public void setResponseStringWithContentType() {
+ HttpResponse resp = new HttpResponseBuilder()
+ .addHeader("Content-Type", "text/html")
+ .setResponseString("foo")
+ .create();
+ Multimap<String, String> headers = resp.getHeaders();
+ assertEquals("text/html; charset=UTF-8",
headers.get("Content-Type").iterator().next());
+ assertEquals("foo", resp.getResponseAsString());
+ }
+
+ @Test
public void setResponse() {
byte[] someData = "some data".getBytes();
HttpResponse resp = new HttpResponseBuilder()
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java?rev=931639&r1=931638&r2=931639&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/oauth/OAuthRequestTest.java
Wed Apr 7 18:34:45 2010
@@ -24,6 +24,13 @@ import static org.junit.Assert.assertNul
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
+import com.google.common.collect.Lists;
+
+import net.oauth.OAuth;
+import net.oauth.OAuth.Parameter;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang.ArrayUtils;
import org.apache.shindig.auth.BasicSecurityToken;
import org.apache.shindig.auth.SecurityToken;
import org.apache.shindig.common.crypto.BasicBlobCrypter;
@@ -43,19 +50,11 @@ import org.apache.shindig.gadgets.oauth.
import org.apache.shindig.gadgets.oauth.testing.FakeOAuthServiceProvider;
import org.apache.shindig.gadgets.oauth.testing.MakeRequestClient;
import
org.apache.shindig.gadgets.oauth.testing.FakeOAuthServiceProvider.TokenPair;
-
-import com.google.common.collect.Lists;
-
-import net.oauth.OAuth;
-import net.oauth.OAuth.Parameter;
-
-import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.lang.ArrayUtils;
import org.json.JSONObject;
import org.junit.After;
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
-import org.junit.Assert;
import java.io.PrintWriter;
import java.io.StringWriter;
@@ -1817,7 +1816,7 @@ public class OAuthRequestTest {
client.approveToken("user_data=hello-oauth");
response = client.sendGet(FakeOAuthServiceProvider.ACCESS_TOKEN_URL);
- assertEquals("application/json; charset=utf-8",
response.getHeader("Content-Type"));
+ assertEquals("application/json; charset=UTF-8",
response.getHeader("Content-Type"));
JSONObject json = new JSONObject(response.getResponseAsString());
assertEquals("userid value", json.get("userid"));
assertEquals("xoauth_stuff value", json.get("xoauth_stuff"));
Modified:
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
URL:
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java?rev=931639&r1=931638&r2=931639&view=diff
==============================================================================
---
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
(original)
+++
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/servlet/ProxyHandlerTest.java
Wed Apr 7 18:34:45 2010
@@ -163,7 +163,7 @@ public class ProxyHandlerTest extends Se
// Some headers may be blacklisted. These are OK.
String url = "http://example.org/file.evil";
String domain = "example.org";
- String contentType = "text/evil; charset=utf-8";
+ String contentType = "text/evil; charset=UTF-8";
String magicGarbage = "fadfdfdfd";
Map<String, List<String>> headers = Maps.newHashMap();
headers.put("Content-Type", Arrays.asList(contentType));
@@ -347,6 +347,7 @@ public class ProxyHandlerTest extends Se
@Test
public void testMimeMatchVarySupport() throws Exception {
- expectMime("image/*", "image/gif", "image/gif");
+ // We use CaptureRewrite which always rewrite - always set encoding
+ expectMime("image/*", "image/gif", "image/gif; charset=UTF-8");
}
}