-
Bug
-
Resolution: Unresolved
-
Neutral
-
None
-
5.5.7
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