diff -r 4f1c026a8aab -r f962ff9dd44e src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java --- a/src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java Wed May 13 18:33:25 2020 +0200 +++ b/src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java Wed May 13 18:40:52 2020 +0200 @@ -98,7 +98,19 @@ private ResponseType invokeMapping(Method method, HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) throws IOException { try { LOG.trace("invoke {}#{}", method.getDeclaringClass().getName(), method.getName()); - return (ResponseType) method.invoke(this, req, resp, dao); + final var paramTypes = method.getParameterTypes(); + final var paramValues = new Object[paramTypes.length]; + for (int i = 0; i < paramTypes.length; i++) { + if (paramTypes[i].isAssignableFrom(HttpServletRequest.class)) { + paramValues[i] = req; + } else if (paramTypes[i].isAssignableFrom(HttpServletResponse.class)) { + paramValues[i] = resp; + } + if (paramTypes[i].isAssignableFrom(DataAccessObjects.class)) { + paramValues[i] = dao; + } + } + return (ResponseType) method.invoke(this, paramValues); } catch (ReflectiveOperationException | ClassCastException ex) { LOG.error("invocation of method {} failed: {}", method.getName(), ex.getMessage()); LOG.debug("Details: ", ex); @@ -144,12 +156,13 @@ continue; } - Class[] params = method.getParameterTypes(); - if (params.length == 3 - && HttpServletRequest.class.isAssignableFrom(params[0]) - && HttpServletResponse.class.isAssignableFrom(params[1]) - && DataAccessObjects.class.isAssignableFrom(params[2])) { - + boolean paramsInjectible = true; + for (var param : method.getParameterTypes()) { + paramsInjectible &= HttpServletRequest.class.isAssignableFrom(param) + || HttpServletResponse.class.isAssignableFrom(param) + || DataAccessObjects.class.isAssignableFrom(param); + } + if (paramsInjectible) { final String requestPath = "/" + mapping.get().requestPath(); if (mappings @@ -168,7 +181,7 @@ method.getName() ); } else { - LOG.warn("{} is annotated with {} but has the wrong parameters - (HttpServletRequest,HttpServletResponse,DataAccessObjects) required", + LOG.warn("{} is annotated with {} but has the wrong parameters - only HttpServletRequest. HttpServletResponse, and DataAccessObjects are allowed", method.getName(), RequestMapping.class.getSimpleName() ); }