From 683af85f6bf117bee84fc5eafcfe6d203c49d572 Mon Sep 17 00:00:00 2001 From: crazyhzm Date: Thu, 27 Dec 2018 13:35:20 +0800 Subject: [PATCH] fix #3069 --- .../apache/dubbo/common/utils/ClassHelper.java | 7 ++++--- .../dubbo/common/utils/ClassHelperTest.java | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassHelper.java b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassHelper.java index b5aa79f2fcc..73f04230f2b 100644 --- a/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassHelper.java +++ b/dubbo-common/src/main/java/org/apache/dubbo/common/utils/ClassHelper.java @@ -104,8 +104,7 @@ public static ClassLoader getClassLoader(Class clazz) { // getClassLoader() returning null indicates the bootstrap ClassLoader try { cl = ClassLoader.getSystemClassLoader(); - } - catch (Throwable ex) { + } catch (Throwable ex) { // Cannot access system ClassLoader - oh well, maybe the caller can live with null... } } @@ -265,7 +264,9 @@ public static boolean isPrimitive(Class type) { } public static Object convertPrimitive(Class type, String value) { - if (type == char.class || type == Character.class) { + if (StringUtils.isEmpty(value)) { + return null; + } else if (type == char.class || type == Character.class) { return value.length() > 0 ? value.charAt(0) : '\0'; } else if (type == boolean.class || type == Boolean.class) { return Boolean.valueOf(value); diff --git a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ClassHelperTest.java b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ClassHelperTest.java index 1ccd15339b7..e6e072fd03d 100644 --- a/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ClassHelperTest.java +++ b/dubbo-common/src/test/java/org/apache/dubbo/common/utils/ClassHelperTest.java @@ -25,6 +25,7 @@ import static org.apache.dubbo.common.utils.ClassHelper.getClassLoader; import static org.apache.dubbo.common.utils.ClassHelper.resolvePrimitiveClassName; import static org.apache.dubbo.common.utils.ClassHelper.toShortString; +import static org.apache.dubbo.common.utils.ClassHelper.convertPrimitive; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.sameInstance; @@ -118,4 +119,20 @@ public void testToShortString() throws Exception { assertThat(toShortString(null), equalTo("null")); assertThat(toShortString(new ClassHelperTest()), startsWith("ClassHelperTest@")); } + + @Test + public void testConvertPrimitive() throws Exception { + + assertThat(convertPrimitive(int.class, ""), equalTo(null)); + assertThat(convertPrimitive(int.class, null), equalTo(null)); + + assertThat(convertPrimitive(char.class, "6"), equalTo('6')); + assertThat(convertPrimitive(boolean.class, "true"), equalTo(Boolean.TRUE)); + assertThat(convertPrimitive(byte.class, "127"), equalTo(Byte.MAX_VALUE)); + assertThat(convertPrimitive(short.class, "32767"), equalTo(Short.MAX_VALUE)); + assertThat(convertPrimitive(int.class, "6"), equalTo(6)); + assertThat(convertPrimitive(long.class, "6"), equalTo(new Long(6))); + assertThat(convertPrimitive(float.class, "6"), equalTo(new Float(6))); + assertThat(convertPrimitive(double.class, "6"), equalTo(new Double(6))); + } }