docs: @SuppressWarnings("unchecked")
    public HttpMethodInfo handle(HttpRequest request,
                                 HttpResponder responder, Map<String, String> groupValues) throws Exception {
      //TODO: Refactor group values.
      try {
        if (httpMethods.contains(request.method())) {
          //Setup args for reflection call
          Object [] args = new Object[paramsInfo.size()];
  
          int idx = 0;
          for (Map<Class<? extends Annotation>, ParameterInfo<?>> info : paramsInfo) {
            if (info.containsKey(PathParam.class)) {
              args[idx] = getPathParamValue(info, groupValues);
            }
            if (info.containsKey(QueryParam.class)) {
              args[idx] = getQueryParamValue(info, request.uri());
            }
            if (info.containsKey(HeaderParam.class)) {
              args[idx] = getHeaderParamValue(info, request);
            }
            idx++;
          }
  
          return new HttpMethodInfo(method, handler, responder, args, exceptionHandler);
        } else {
          //Found a matching resource but could not find the right HttpMethod so return 405
          throw new HandlerException(HttpResponseStatus.METHOD_NOT_ALLOWED, String.format
            ("Problem accessing: %s. Reason: Method Not Allowed", request.uri()));
        }
      } catch (Throwable e) {
        throw new HandlerException(HttpResponseStatus.INTERNAL_SERVER_ERROR,
                                   String.format("Error in executing request: %s %s", request.method(),
                                                 request.uri()), e);
      }
    }