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