in modules/shell/src/main/java/org/apache/tuscany/sca/shell/commands/Invoke.java [90:141]
static void invoke(Object proxy, String operationName, String... params) throws IllegalAccessException, InvocationTargetException {
Method foundMethod = null;
for (Method m : proxy.getClass().getMethods()) {
if (m.getName().equals(operationName)) {
if (m.getParameterTypes().length == params.length) {
Object parameters[] = new Object[params.length];
int i = 0;
for (Class<?> type : m.getParameterTypes()) {
if (type == byte.class || type == Byte.class) {
parameters[i] = Byte.valueOf(params[i]);
} else if (type == char.class || type == Character.class) {
parameters[i] = params[i].charAt(0);
} else if (type == boolean.class || type == Boolean.class) {
parameters[i] = Boolean.valueOf(params[i]);
} else if (type == short.class || type == Short.class) {
parameters[i] = Short.valueOf(params[i]);
} else if (type == int.class || type == Integer.class) {
parameters[i] = Integer.valueOf(params[i]);
} else if (type == long.class || type == Long.class) {
parameters[i] = Long.valueOf(params[i]);
} else if (type == float.class || type == Float.class) {
parameters[i] = Float.valueOf(params[i]);
} else if (type == double.class || type == Double.class) {
parameters[i] = Double.valueOf(params[i]);
} else if (type == String.class) {
parameters[i] = params[i];
} else {
throw new IllegalArgumentException("Parameter type is not supported: " + type);
}
i++;
}
Object result = m.invoke(proxy, parameters);
if (result != null && result.getClass().isArray()) {
out.println(Arrays.toString((Object[])result));
} else {
out.println(result);
}
return;
} else {
foundMethod = m;
}
}
}
if (foundMethod != null) {
System.err.println("Service operation " + foundMethod.getName() + " expects " + foundMethod.getParameterTypes().length + " arguments");
} else {
System.err.println("Operation not found: " + operationName);
}
}