Repository: cxf
Updated Branches:
  refs/heads/3.0.x-fixes c140c236d -> 3042e7a35


[CXF-7307] fix the 404 error in empty string query parameter injection.


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/3042e7a3
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/3042e7a3
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/3042e7a3

Branch: refs/heads/3.0.x-fixes
Commit: 3042e7a351c595d4bbe31398ec3a9eb425c535d6
Parents: c140c23
Author: Neal Hu <[email protected]>
Authored: Fri Mar 31 19:59:06 2017 +0800
Committer: Neal Hu <[email protected]>
Committed: Fri Mar 31 20:03:01 2017 +0800

----------------------------------------------------------------------
 .../org/apache/cxf/common/util/PrimitiveUtils.java  |  5 +++++
 .../org/apache/cxf/jaxrs/utils/InjectionUtils.java  |  5 +++++
 .../apache/cxf/jaxrs/utils/InjectionUtilsTest.java  | 16 ++++++++++++++++
 3 files changed, 26 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/3042e7a3/core/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java 
b/core/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java
index c641b50..cd60275 100644
--- a/core/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java
+++ b/core/src/main/java/org/apache/cxf/common/util/PrimitiveUtils.java
@@ -56,6 +56,11 @@ public final class PrimitiveUtils {
 
     public static <T> Object read(String value, Class<T> type) {
         Object ret = value;
+        if (!(Character.TYPE.equals(type) || Character.class.equals(type))
+                && value != null && value.equals("")) {
+            //pass empty string to number type will result in Exception
+            value = "0";
+        }
         if (Integer.TYPE.equals(type) || Integer.class.equals(type)) {
             ret = Integer.valueOf(value);
         }

http://git-wip-us.apache.org/repos/asf/cxf/blob/3042e7a3/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
----------------------------------------------------------------------
diff --git 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
index d4c5897..ea10274 100644
--- 
a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
+++ 
b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/InjectionUtils.java
@@ -394,6 +394,11 @@ public final class InjectionUtils {
             }
             return theResult;
         }
+
+        if (Number.class.isAssignableFrom(pClass) && "".equals(value)) {
+            //pass empty string to boxed number type will result in 404
+            return null;
+        }
         if (pClass.isPrimitive()) {
             try {
                 T ret = (T)PrimitiveUtils.read(value, pClass);

http://git-wip-us.apache.org/repos/asf/cxf/blob/3042e7a3/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java
----------------------------------------------------------------------
diff --git 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java
 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java
index eac8a42..521482d 100644
--- 
a/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java
+++ 
b/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/utils/InjectionUtilsTest.java
@@ -150,6 +150,22 @@ public class InjectionUtilsTest extends Assert {
     }
 
     @Test
+    public void testInstantiateIntegerInQuery() {
+        Integer integer = InjectionUtils.handleParameter("", false, 
Integer.class,
+                Integer.class, null,
+                ParameterType.QUERY, null);
+        assertNull("Integer is not null", integer);
+    }
+
+    @Test
+    public void testInstantiateFloatInQuery() {
+        Float f = InjectionUtils.handleParameter("", false, float.class,
+                float.class, null,
+                ParameterType.QUERY, null);
+        assertEquals("Float is not 0", Float.valueOf(0F), f);
+    }
+
+    @Test
     public void testGenericInterfaceType() throws NoSuchMethodException {
         Type str = 
InjectionUtils.getGenericResponseType(GenericInterface.class.getMethod("get"),
                        TestService.class, "", String.class, new 
ExchangeImpl());

Reply via email to