code: private AMethodWithItsArgs findBestMethodByParamsNode(Set<Method> methods, JsonNode paramsNode) {
  		if (hasNoParameters(paramsNode)) {
  			return findBestMethodUsingParamIndexes(methods, 0, null);
  		}
  		AMethodWithItsArgs matchedMethod;
  		if (paramsNode.isArray()) {
  			matchedMethod = findBestMethodUsingParamIndexes(methods, paramsNode.size(), ArrayNode.class.cast(paramsNode));
  		} else if (paramsNode.isObject()) {
  			matchedMethod = findBestMethodUsingParamNames(methods, collectFieldNames(paramsNode), ObjectNode.class.cast(paramsNode));
  		} else {
  			throw new IllegalArgumentException("Unknown params node type: " + paramsNode.toString());
  		}
          if (matchedMethod == null) {
              matchedMethod = findBestMethodForVarargs(methods, paramsNode);
  		}
  		return matchedMethod;
  	}
docs: Finds the {@link Method} from the supplied {@link Set} that
  best matches the rest of the arguments supplied and returns
  it as a {@link AMethodWithItsArgs} class.
  
  @param methods    the {@link Method}s
  @param paramsNode the {@link JsonNode} passed as the parameters
  @return the {@link AMethodWithItsArgs}