You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2017/04/28 15:39:19 UTC
cxf git commit: [CXF-7320] Unwrapping a charset if needed
Repository: cxf
Updated Branches:
refs/heads/master d7d30736a -> 99f6eb63f
[CXF-7320] Unwrapping a charset if needed
Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/99f6eb63
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/99f6eb63
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/99f6eb63
Branch: refs/heads/master
Commit: 99f6eb63fa7da2a29ea9d28f1c55c5cb90a09222
Parents: d7d3073
Author: Sergey Beryozkin <sb...@gmail.com>
Authored: Fri Apr 28 16:38:48 2017 +0100
Committer: Sergey Beryozkin <sb...@gmail.com>
Committed: Fri Apr 28 16:38:48 2017 +0100
----------------------------------------------------------------------
.../java/org/apache/cxf/jaxrs/utils/HttpUtils.java | 14 ++++++++++++--
.../org/apache/cxf/jaxrs/utils/HttpUtilsTest.java | 17 +++++++++++++++++
2 files changed, 29 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cxf/blob/99f6eb63/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
index 537d34b..e1b6c35 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java
@@ -86,6 +86,7 @@ public final class HttpUtils {
private static final Pattern ENCODE_PATTERN = Pattern.compile("%[0-9a-fA-F][0-9a-fA-F]");
private static final String CHARSET_PARAMETER = "charset";
+ private static final String DOUBLE_QUOTE = "\"";
// there are more of such characters, ex, '*' but '*' is not affected by UrlEncode
private static final String PATH_RESERVED_CHARACTERS = "=@/:!$&\'(),;~";
@@ -550,7 +551,7 @@ public final class HttpUtils {
public static String getSetEncoding(MediaType mt, MultivaluedMap<String, Object> headers,
String defaultEncoding) {
- String enc = mt.getParameters().get(CHARSET_PARAMETER);
+ String enc = getMediaTypeCharsetParameter(mt);
if (enc == null) {
return defaultEncoding;
}
@@ -570,10 +571,19 @@ public final class HttpUtils {
}
public static String getEncoding(MediaType mt, String defaultEncoding) {
- String charset = mt == null ? defaultEncoding : mt.getParameters().get("charset");
+ String charset = mt == null ? defaultEncoding : getMediaTypeCharsetParameter(mt);
return charset == null ? defaultEncoding : charset;
}
+ public static String getMediaTypeCharsetParameter(MediaType mt) {
+ String charset = mt.getParameters().get(CHARSET_PARAMETER);
+ if (charset != null && charset.startsWith(DOUBLE_QUOTE)
+ && charset.endsWith(DOUBLE_QUOTE) && charset.length() > 1) {
+ charset = charset.substring(1, charset.length() - 1);
+ }
+ return charset;
+ }
+
public static URI resolve(UriBuilder baseBuilder, URI uri) {
if (!uri.isAbsolute()) {
return baseBuilder.build().resolve(uri);
http://git-wip-us.apache.org/repos/asf/cxf/blob/99f6eb63/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java
index f1e36e8..5aced11 100644
--- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java
+++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/HttpUtilsTest.java
@@ -23,6 +23,7 @@ import java.net.URI;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.apache.cxf.jaxrs.model.ParameterType;
@@ -84,6 +85,22 @@ public class HttpUtilsTest extends Assert {
}
@Test
+ public void testMediaTypeWithUTF8() {
+ assertEquals("UTF-8",
+ HttpUtils.getEncoding(MediaType.valueOf("application/json;charset=UTF-8"), "UTF-16"));
+ }
+ @Test
+ public void testMediaTypeWithUTF8WithQuotes() {
+ assertEquals("UTF-8",
+ HttpUtils.getEncoding(MediaType.valueOf("application/json;charset=\"UTF-8\""), "UTF-16"));
+ }
+ @Test
+ public void testMediaTypeWithNoCharset() {
+ assertEquals("UTF-16",
+ HttpUtils.getEncoding(MediaType.valueOf("application/json"), "UTF-16"));
+ }
+
+ @Test
public void testIsDateHeader() {
assertFalse(HttpUtils.isDateRelatedHeader(HttpHeaders.ETAG));
assertTrue(HttpUtils.isDateRelatedHeader(HttpHeaders.EXPIRES));