This is an automated email from the ASF dual-hosted git repository.

amccright pushed a commit to branch 3.4.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.4.x-fixes by this push:
     new 0fbdfd6  [CXF-7996] Fix `@Encode` TCK test
0fbdfd6 is described below

commit 0fbdfd6519dd3e0759a0a5a1fdf625314392bc3e
Author: Andy McCright <[email protected]>
AuthorDate: Tue Apr 13 21:27:22 2021 -0500

    [CXF-7996] Fix `@Encode` TCK test
    
    Signed-off-by: Andy McCright <[email protected]>
---
 .../java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java    | 12 ++++++++++--
 .../src/test/java/org/apache/cxf/jaxrs/Customer.java   |  6 ++++++
 .../org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java     | 18 ++++++++++++++++++
 3 files changed, 34 insertions(+), 2 deletions(-)

diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
index 585711d..7aaabdb 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXRSUtils.java
@@ -1029,15 +1029,15 @@ public final class JAXRSUtils {
         MultivaluedMap<String, String> params =
             (MultivaluedMap<String, String>)m.get(FormUtils.FORM_PARAM_MAP);
 
+        String enc = HttpUtils.getEncoding(mt, StandardCharsets.UTF_8.name());
         if (params == null) {
             params = new MetadataMap<>();
             m.put(FormUtils.FORM_PARAM_MAP, params);
 
             if (mt == null || 
mt.isCompatible(MediaType.APPLICATION_FORM_URLENCODED_TYPE)) {
                 InputStream entityStream = copyAndGetEntityStream(m);
-                String enc = HttpUtils.getEncoding(mt, 
StandardCharsets.UTF_8.name());
                 String body = FormUtils.readBody(entityStream, enc);
-                FormUtils.populateMapFromStringOrHttpRequest(params, m, body, 
enc, decode);
+                FormUtils.populateMapFromStringOrHttpRequest(params, m, body, 
enc, false);
             } else {
                 if ("multipart".equalsIgnoreCase(mt.getType())
                     && MediaType.MULTIPART_FORM_DATA_TYPE.isCompatible(mt)) {
@@ -1054,6 +1054,14 @@ public final class JAXRSUtils {
             }
         }
 
+        if (decode) {
+            List<String> values = params.get(key);
+            if (values != null) {
+                values = values.stream().map(value -> 
HttpUtils.urlDecode(value, enc)).collect(Collectors.toList());
+                params.replace(key, values);
+            }
+        }
+
         if ("".equals(key)) {
             return InjectionUtils.handleBean(pClass, paramAnns, params, 
ParameterType.FORM, m, false);
         }
diff --git a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java
index 10f7e50..d731c29 100644
--- a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java
+++ b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/Customer.java
@@ -37,6 +37,7 @@ import javax.ws.rs.BeanParam;
 import javax.ws.rs.Consumes;
 import javax.ws.rs.CookieParam;
 import javax.ws.rs.DefaultValue;
+import javax.ws.rs.Encoded;
 import javax.ws.rs.FormParam;
 import javax.ws.rs.GET;
 import javax.ws.rs.HeaderParam;
@@ -262,6 +263,11 @@ public class Customer extends AbstractCustomer implements 
CustomerInfo {
     public void testBeanParam(@BeanParam CustomerBean cb) {
 
     }
+
+    public void testEncodedFormParams(@FormParam("p1") String p1, 
@FormParam("p2") @Encoded String p2) {
+
+    }
+
     public Application getApplication1() {
         return application1;
     }
diff --git 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
index 9638f37..c07d3b0 100644
--- 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
+++ 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/JAXRSUtilsTest.java
@@ -1635,6 +1635,24 @@ public class JAXRSUtilsTest {
         assertEquals("3", list.get(1));
     }
 
+    @Test
+    public void testEncodedFormParameters() throws Exception {
+        Class<?>[] argType = {String.class, String.class};
+        Method m = Customer.class.getMethod("testEncodedFormParams", argType);
+        final Message messageImpl = createMessage();
+        String body = "p1=yay&p2=%21";
+        messageImpl.put(Message.REQUEST_URI, "/foo");
+        messageImpl.put("Content-Type", MediaType.APPLICATION_FORM_URLENCODED);
+        messageImpl.setContent(InputStream.class, new 
ByteArrayInputStream(body.getBytes()));
+
+        List<Object> params = JAXRSUtils.processParameters(new 
OperationResourceInfo(m,
+                                                               new 
ClassResourceInfo(Customer.class)),
+                                                           new 
MetadataMap<String, String>(), messageImpl);
+        assertEquals("2 params should've been identified", 2, params.size());
+        assertEquals("yay", (String)params.get(0));
+        assertEquals("%21", (String)params.get(1)); // if decoded, this will 
return "!" instead of "%21"
+    }
+
     private static Map<ClassResourceInfo, MultivaluedMap<String, String>> 
getMap(ClassResourceInfo cri) {
         return Collections.singletonMap(cri, new MetadataMap<String, 
String>());
     }

Reply via email to