in dekaf-jdbc/src/impl/JdbcValueGetters.java [548:583]
private static Object copySlice(Class<?> sliceClass, Object sliceSource) {
Class<?> componentType = sliceClass.getComponentType();
int n = java.lang.reflect.Array.getLength(sliceSource);
Object result = java.lang.reflect.Array.newInstance(sliceClass.getComponentType(), n);
if (n == 0) return result;
for (int i = 0; i < n; i++) {
final Object x = java.lang.reflect.Array.get(sliceSource, i);
if (x == null) continue;
final Class<?> xClass = x.getClass();
final Object component;
if (componentType.isAssignableFrom(xClass)) {
component = x;
}
else if (componentType == String.class) {
component = x.toString();
}
else if (componentType.isArray()) {
component = copySlice(componentType, x);
}
else if ((componentType.isPrimitive() || Number.class.isAssignableFrom(componentType)) &&
Number.class.isAssignableFrom(xClass)) {
//noinspection unchecked
component = Numbers.convertNumber((Class<Number>) componentType, (Number) x);
}
else {
String message =
String.format("Array value fetching problem: unknown how to convert value (%s) of type %s to %s.",
x.toString(), xClass.getCanonicalName(), componentType.getCanonicalName());
throw new IllegalStateException(message);
}
java.lang.reflect.Array.set(result, i, component);
}
return result;
}