makes every parameter in a handler method optional

Wed, 13 May 2020 18:40:52 +0200

author
Mike Becker <universe@uap-core.de>
date
Wed, 13 May 2020 18:40:52 +0200
changeset 42
f962ff9dd44e
parent 41
4f1c026a8aab
child 43
9abf0bf44c7b

makes every parameter in a handler method optional

src/main/java/de/uapcore/lightpit/AbstractLightPITServlet.java file | annotate | diff | comparison | revisions
src/main/java/de/uapcore/lightpit/modules/ErrorModule.java file | annotate | diff | comparison | revisions
src/main/java/de/uapcore/lightpit/modules/HomeModule.java file | annotate | diff | comparison | revisions
src/main/java/de/uapcore/lightpit/modules/LanguageModule.java file | annotate | diff | comparison | revisions
src/main/java/de/uapcore/lightpit/modules/ProjectsModule.java file | annotate | diff | comparison | revisions
src/main/java/de/uapcore/lightpit/modules/VersionsModule.java file | annotate | diff | comparison | revisions
     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      }

mercurial