Uploaded image for project: 'Cache Modules'
  1. Cache Modules
  2. MGNLCACHE-222

NullPointerException: DefaultCacheKeyGenerator.getParametersFromRequest()

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: Neutral Neutral
    • None
    • 5.5.7
    • cache core

      Encountered on Magnolia Cache Core v5.6.2

       

      I've got a custom filter in my server filter chain, but I keep getting a NullPointerException.

      2019-12-04 01:07:36,235 WARN  com.signalsciences.servlet.filter.SigSciFilter    : An error occurred during the application filter chain: null
      2019-12-04 01:07:36,235 DEBUG com.signalsciences.servlet.filter.SigSciFilter    : Error details for application filter chain: 
      java.lang.NullPointerException: null
      	at info.magnolia.module.cache.cachekey.DefaultCacheKeyGenerator.getParametersFromRequest(DefaultCacheKeyGenerator.java:132) ~[magnolia-cache-core-5.6.2.jar:?]
      	at info.magnolia.module.cache.cachekey.DefaultCacheKeyGenerator.generateKey(DefaultCacheKeyGenerator.java:81) ~[magnolia-cache-core-5.6.2.jar:?]
      	at info.magnolia.module.cache.cachekey.DefaultCacheKeyGenerator.generateKey(DefaultCacheKeyGenerator.java:57) ~[magnolia-cache-core-5.6.2.jar:?]
      	at info.magnolia.module.cache.cachepolicy.Default.retrieveCacheKey(Default.java:184) ~[magnolia-cache-core-5.6.2.jar:?]
      	at info.magnolia.module.cache.cachepolicy.Default.shouldCache(Default.java:116) ~[magnolia-cache-core-5.6.2.jar:?]
      	at info.magnolia.advancedcache.personalization.cache.PersonalizedCachePolicy.shouldCache(PersonalizedCachePolicy.java:99) ~[magnolia-advanced-cache-personalization-2.0.1.jar:?]
      	at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:200) ~[magnolia-cache-core-5.6.2.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:89) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:77) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:84) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:94) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.module.site.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:119) ~[magnolia-site-1.2.2.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.multisite.filters.MultiSiteFilter.doFilter(MultiSiteFilter.java:120) ~[magnolia-module-multisite-1.3.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:83) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:73) ~[magnolia-cache-core-5.6.2.jar:?]
      	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:127) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:75) ~[magnolia-module-enterprise-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.UnicodeNormalizationFilter.doFilter(UnicodeNormalizationFilter.java:89) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.personalization.preview.filter.PreviewFilter.doFilter(PreviewFilter.java:92) ~[magnolia-personalization-preview-app-1.6.2.jar:?]
      	at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:155) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:128) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-5.7.5.jar:?]
      	at com.signalsciences.servlet.filter.SigSciFilter.doFilter(SigSciFilter.java:372) [sigsci-module-java-2.0.0-shaded-debug.jar:2.0.0]
      	at info.magnolia.cms.filters.FilterDecorator.doFilter(FilterDecorator.java:90) [magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) [magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:65) [magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) [magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:107) [magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:67) [magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:110) [magnolia-core-5.7.5.jar:?]
      	at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:96) [magnolia-core-5.7.5.jar:?]
      	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) [catalina.jar:9.0.27]
      	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) [catalina.jar:9.0.27]
      	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) [catalina.jar:9.0.27]
      	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) [catalina.jar:9.0.27]
      	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526) [catalina.jar:9.0.27]
      	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) [catalina.jar:9.0.27]
      	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) [catalina.jar:9.0.27]
      	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) [catalina.jar:9.0.27]
      	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) [catalina.jar:9.0.27]
      	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) [catalina.jar:9.0.27]
      	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) [tomcat-coyote.jar:9.0.27]
      	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-coyote.jar:9.0.27]
      	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:861) [tomcat-coyote.jar:9.0.27]
      	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1579) [tomcat-coyote.jar:9.0.27]
      	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-coyote.jar:9.0.27]
      	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
      	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
      	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:9.0.27]
      	at java.lang.Thread.run(Thread.java:834) [?:?]
      

      The stack trace leads to line 132 in info.magnolia.module.cache.cachekey.DefaultCacheKeyGenerator.getParametersFromRequest(), a call to val.replace() where val may be null.

      DefaultCacheKeyGenerator.java

          // ...
          private Map<String, String> getParametersFromRequest(HttpServletRequest request) {
              Map<String, String> map = new TreeMap<String, String>();
              for (Object obj : request.getParameterMap().entrySet()) {
                  Map.Entry<String, String[]> entry = (Map.Entry) obj;
                  String[] values = entry.getValue();
                  List<String> newValues = new ArrayList<String>();
                  for (String val : values) {
                      String str = val.replace(";", ";;");
                      newValues.add(str);
                  }
                  String value = StringUtils.join(newValues, ";");
                  map.put(entry.getKey(), value);
              }
              return map;
          }
          // ...
      

      Should probably be something like:

          // ...
          private Map<String, String> getParametersFromRequest(HttpServletRequest request) {
              Map<String, String> map = new TreeMap<String, String>();
              for (Object obj : request.getParameterMap().entrySet()) {
                  Map.Entry<String, String[]> entry = (Map.Entry) obj;
                  String[] values = entry.getValue();
                  List<String> newValues = new ArrayList<String>();
                  for (String val : values) {
                      String str = val;
                      if (str != null) {
                          str = str.replace(";", ";;");
                      }
                      newValues.add(str);
                  }
                  String value = StringUtils.join(newValues, ";");
                  map.put(entry.getKey(), value);
              }
              return map;
          }
          // ...
      

        Acceptance criteria

              Unassigned Unassigned
              iancervantez Ian Cervantez
              DeveloperX
              Votes:
              1 Vote for this issue
              Watchers:
              5 Start watching this issue

                Created:
                Updated:

                  Bug DoR
                  Task DoD