Repository: cxf
Updated Branches:
  refs/heads/3.0.x-fixes fa4ae6a45 -> f29db4a71


[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/f29db4a7
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/f29db4a7
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/f29db4a7

Branch: refs/heads/3.0.x-fixes
Commit: f29db4a717731915290ac3193d8d55cf11feb002
Parents: fa4ae6a
Author: Sergey Beryozkin <sberyoz...@gmail.com>
Authored: Fri Apr 28 16:38:48 2017 +0100
Committer: Sergey Beryozkin <sberyoz...@gmail.com>
Committed: Fri Apr 28 16:46:38 2017 +0100

----------------------------------------------------------------------
 .../org/apache/cxf/jaxrs/utils/HttpUtils.java     | 18 ++++++++++++++----
 .../org/apache/cxf/jaxrs/utils/HttpUtilsTest.java | 17 +++++++++++++++++
 2 files changed, 31 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/f29db4a7/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 fed0204..1c4459d 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
@@ -80,7 +80,8 @@ 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 = "=@/:!$&\'(),;~";
     private static final String QUERY_RESERVED_CHARACTERS = "?/,";
@@ -544,7 +545,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;
         }
@@ -564,10 +565,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/f29db4a7/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 a6de9db..2dbcace 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));

Reply via email to