@SuppressWarnings({"rawtypes", "unchecked"}) private Object[] getParamsFromMap(String methodName, Map params) { ExposedMethod exposedMethod = methodMap.get(methodName); String[] argNames = exposedMethod.paramNames; Class[] argTypes = exposedMethod.method.getParameterTypes(); Object[] argValues = new Object[argTypes.length]; Map extraParameters = null; // parameters that weren't mapped directly to method arguments // For each method parameter, get the corresponding url parameter value. if (argNames != null && params != null) { // TODO: check why params is null for (Object parameterName : params.keySet()) { Object parameterValue = params.get(parameterName); int index = ListUtils.findString((String) parameterName, argNames); if (index >= 0) { argValues[index] = parameterValue; } else if (!parameterName.equals(METHOD)) { if (extraParameters == null) extraParameters = new HashMap(); extraParameters.put(parameterName, parameterValue); } } } // support for a function having a single Map<String,String> parameter // see if we can find a Map arg. If so, set it to extraParameters if (argTypes != null) { for (int i = 0; i < argTypes.length; i++) { if (argTypes[i] == Map.class && argValues[i] == null) { // avoid passing a null Map to the function if (extraParameters == null) extraParameters = new HashMap<String, String>(); argValues[i] = extraParameters; extraParameters = null; break; } } } if (extraParameters != null) { System.out.println("Received servlet request: " + methodToString(methodName, argValues)); System.out.println("Unused parameters: " + extraParameters.entrySet()); } return argValues; }