예제 #1
0
  @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;
  }