src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java

changeset 42
f962ff9dd44e
parent 40
276ef00a336d
child 43
9abf0bf44c7b
     1.1 --- a/src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java	Wed May 13 18:33:25 2020 +0200
     1.2 +++ b/src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java	Wed May 13 18:40:52 2020 +0200
     1.3 @@ -98,7 +98,19 @@
     1.4      private ResponseType invokeMapping(Method method, HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException {
     1.5          try {
     1.6              LOG.trace("invoke {}#{}", method.getDeclaringClass().getName(), method.getName());
     1.7 -            return (ResponseType) method.invoke(this, req, resp, dao);
     1.8 +            final var paramTypes = method.getParameterTypes();
     1.9 +            final var paramValues = new Object[paramTypes.length];
    1.10 +            for (int i = 0; i < paramTypes.length; i++) {
    1.11 +                if (paramTypes[i].isAssignableFrom(HttpServletRequest.class)) {
    1.12 +                    paramValues[i] = req;
    1.13 +                } else if (paramTypes[i].isAssignableFrom(HttpServletResponse.class)) {
    1.14 +                    paramValues[i] = resp;
    1.15 +                }
    1.16 +                if (paramTypes[i].isAssignableFrom(DataAccessObjects.class)) {
    1.17 +                    paramValues[i] = dao;
    1.18 +                }
    1.19 +            }
    1.20 +            return (ResponseType) method.invoke(this, paramValues);
    1.21          } catch (ReflectiveOperationException | ClassCastException ex) {
    1.22              LOG.error("invocation of method {} failed: {}", method.getName(), ex.getMessage());
    1.23              LOG.debug("Details: ", ex);
    1.24 @@ -144,12 +156,13 @@
    1.25                          continue;
    1.26                      }
    1.27  
    1.28 -                    Class<?>[] params = method.getParameterTypes();
    1.29 -                    if (params.length == 3
    1.30 -                            && HttpServletRequest.class.isAssignableFrom(params[0])
    1.31 -                            && HttpServletResponse.class.isAssignableFrom(params[1])
    1.32 -                            && DataAccessObjects.class.isAssignableFrom(params[2])) {
    1.33 -
    1.34 +                    boolean paramsInjectible = true;
    1.35 +                    for (var param : method.getParameterTypes()) {
    1.36 +                        paramsInjectible &= HttpServletRequest.class.isAssignableFrom(param)
    1.37 +                                || HttpServletResponse.class.isAssignableFrom(param)
    1.38 +                                || DataAccessObjects.class.isAssignableFrom(param);
    1.39 +                    }
    1.40 +                    if (paramsInjectible) {
    1.41                          final String requestPath = "/" + mapping.get().requestPath();
    1.42  
    1.43                          if (mappings
    1.44 @@ -168,7 +181,7 @@
    1.45                                  method.getName()
    1.46                          );
    1.47                      } else {
    1.48 -                        LOG.warn("{} is annotated with {} but has the wrong parameters - (HttpServletRequest,HttpServletResponse,DataAccessObjects) required",
    1.49 +                        LOG.warn("{} is annotated with {} but has the wrong parameters - only HttpServletRequest. HttpServletResponse, and DataAccessObjects are allowed",
    1.50                                  method.getName(), RequestMapping.class.getSimpleName()
    1.51                          );
    1.52                      }

mercurial