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