Wed, 13 May 2020 18:40:52 +0200
makes every parameter in a handler method optional
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 }
2.1 --- a/src/main/java/de/uapcore/lightpit/modules/ErrorModule.java Wed May 13 18:33:25 2020 +0200 2.2 +++ b/src/main/java/de/uapcore/lightpit/modules/ErrorModule.java Wed May 13 18:40:52 2020 +0200 2.3 @@ -29,11 +29,9 @@ 2.4 package de.uapcore.lightpit.modules; 2.5 2.6 import de.uapcore.lightpit.*; 2.7 -import de.uapcore.lightpit.dao.DataAccessObjects; 2.8 2.9 import javax.servlet.annotation.WebServlet; 2.10 import javax.servlet.http.HttpServletRequest; 2.11 -import javax.servlet.http.HttpServletResponse; 2.12 2.13 /** 2.14 * Entry point for the application. 2.15 @@ -62,17 +60,17 @@ 2.16 } 2.17 2.18 @RequestMapping(requestPath = "404", method = HttpMethod.GET) 2.19 - public ResponseType handle404(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) { 2.20 + public ResponseType handle404(HttpServletRequest req) { 2.21 return handle(req, 404); 2.22 } 2.23 2.24 @RequestMapping(requestPath = "403", method = HttpMethod.GET) 2.25 - public ResponseType handle403(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) { 2.26 + public ResponseType handle403(HttpServletRequest req) { 2.27 return handle(req, 403); 2.28 } 2.29 2.30 @RequestMapping(requestPath = "500", method = HttpMethod.GET) 2.31 - public ResponseType handle500(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) { 2.32 + public ResponseType handle500(HttpServletRequest req) { 2.33 return handle(req, 500); 2.34 } 2.35 }
3.1 --- a/src/main/java/de/uapcore/lightpit/modules/HomeModule.java Wed May 13 18:33:25 2020 +0200 3.2 +++ b/src/main/java/de/uapcore/lightpit/modules/HomeModule.java Wed May 13 18:40:52 2020 +0200 3.3 @@ -29,11 +29,8 @@ 3.4 package de.uapcore.lightpit.modules; 3.5 3.6 import de.uapcore.lightpit.*; 3.7 -import de.uapcore.lightpit.dao.DataAccessObjects; 3.8 3.9 import javax.servlet.annotation.WebServlet; 3.10 -import javax.servlet.http.HttpServletRequest; 3.11 -import javax.servlet.http.HttpServletResponse; 3.12 3.13 /** 3.14 * Entry point for the application. 3.15 @@ -50,7 +47,7 @@ 3.16 public final class HomeModule extends AbstractLightPITServlet { 3.17 3.18 @RequestMapping(method = HttpMethod.GET) 3.19 - public ResponseType handle(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) { 3.20 + public ResponseType handle() { 3.21 3.22 return ResponseType.HTML_FULL; 3.23 }
4.1 --- a/src/main/java/de/uapcore/lightpit/modules/LanguageModule.java Wed May 13 18:33:25 2020 +0200 4.2 +++ b/src/main/java/de/uapcore/lightpit/modules/LanguageModule.java Wed May 13 18:40:52 2020 +0200 4.3 @@ -29,7 +29,6 @@ 4.4 package de.uapcore.lightpit.modules; 4.5 4.6 import de.uapcore.lightpit.*; 4.7 -import de.uapcore.lightpit.dao.DataAccessObjects; 4.8 import org.slf4j.Logger; 4.9 import org.slf4j.LoggerFactory; 4.10 4.11 @@ -86,7 +85,7 @@ 4.12 } 4.13 4.14 @RequestMapping(method = HttpMethod.GET) 4.15 - public ResponseType handle(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) { 4.16 + public ResponseType handle(HttpServletRequest req) { 4.17 4.18 req.setAttribute("languages", languages); 4.19 req.setAttribute("browserLanguage", req.getLocale()); 4.20 @@ -97,7 +96,7 @@ 4.21 } 4.22 4.23 @RequestMapping(method = HttpMethod.POST) 4.24 - public ResponseType switchLanguage(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) { 4.25 + public ResponseType switchLanguage(HttpServletRequest req, HttpServletResponse resp) { 4.26 4.27 Optional<Locale> chosenLanguage = Optional.ofNullable(req.getParameter("language")) 4.28 .map(Locale::forLanguageTag) 4.29 @@ -106,6 +105,6 @@ 4.30 chosenLanguage.ifPresent((l) -> req.getSession().setAttribute(Constants.SESSION_ATTR_LANGUAGE, l)); 4.31 chosenLanguage.ifPresent(resp::setLocale); 4.32 4.33 - return handle(req, resp, dao); 4.34 + return handle(req); 4.35 } 4.36 }
5.1 --- a/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Wed May 13 18:33:25 2020 +0200 5.2 +++ b/src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java Wed May 13 18:40:52 2020 +0200 5.3 @@ -34,7 +34,6 @@ 5.4 5.5 import javax.servlet.annotation.WebServlet; 5.6 import javax.servlet.http.HttpServletRequest; 5.7 -import javax.servlet.http.HttpServletResponse; 5.8 5.9 @LightPITModule( 5.10 bundleBaseName = "localization.projects", 5.11 @@ -48,7 +47,7 @@ 5.12 public final class ProjectsModule extends AbstractLightPITServlet { 5.13 5.14 @RequestMapping(method = HttpMethod.GET) 5.15 - public ResponseType handle(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) { 5.16 + public ResponseType handle(HttpServletRequest req, DataAccessObjects dao) { 5.17 5.18 return ResponseType.HTML_FULL; 5.19 }
6.1 --- a/src/main/java/de/uapcore/lightpit/modules/VersionsModule.java Wed May 13 18:33:25 2020 +0200 6.2 +++ b/src/main/java/de/uapcore/lightpit/modules/VersionsModule.java Wed May 13 18:40:52 2020 +0200 6.3 @@ -33,7 +33,6 @@ 6.4 6.5 import javax.servlet.annotation.WebServlet; 6.6 import javax.servlet.http.HttpServletRequest; 6.7 -import javax.servlet.http.HttpServletResponse; 6.8 6.9 6.10 @LightPITModule( 6.11 @@ -47,7 +46,7 @@ 6.12 ) 6.13 public final class VersionsModule extends AbstractLightPITServlet { 6.14 @RequestMapping(method = HttpMethod.GET) 6.15 - public ResponseType handle(HttpServletRequest req, HttpServletResponse resp, DataAccessObjects dao) { 6.16 + public ResponseType handle(HttpServletRequest req, DataAccessObjects dao) { 6.17 6.18 return ResponseType.HTML_FULL; 6.19 }