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 }