Skip to content

Commit

Permalink
support char[] for generic invoke, #2003 (#2138)
Browse files Browse the repository at this point in the history
  • Loading branch information
jerrick-zhu authored and zonghaishang committed Jul 26, 2018
1 parent 50b124f commit ee7870c
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,19 @@ public static Object compatibleTypeConvert(Object value, Class<?> type) {
} catch (ClassNotFoundException e) {
throw new RuntimeException(e.getMessage(), e);
}
} else if (char[].class.equals(type)) {
// Process string to char array for generic invoke
// See
// - https://github.com/apache/incubator-dubbo/issues/2003
if (string == null) {
return null;
}
else {
int len = string.length();
char[] chars = new char[len];
string.getChars(0, len, chars, 0);
return chars;
}
}
} else if (value instanceof Number) {
Number number = (Number) value;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,17 @@ public void testCompatibleTypeConvert() throws Exception {

result = CompatibleTypeUtils.compatibleTypeConvert("2011-12-11 12:24:12", Date.class);
assertEquals(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2011-12-11 12:24:12"), (Date) result);

result = CompatibleTypeUtils.compatibleTypeConvert("ab", char[].class);
assertEquals(2, ((char[]) result).length);
assertEquals('a', ((char[]) result)[0]);
assertEquals('b', ((char[]) result)[1]);

result = CompatibleTypeUtils.compatibleTypeConvert("", char[].class);
assertEquals(0, ((char[]) result).length);

result = CompatibleTypeUtils.compatibleTypeConvert(null, char[].class);
assertEquals(null, result);
}

{
Expand Down

0 comments on commit ee7870c

Please sign in to comment.