static void invoke()

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);
        }
    }