[MAGNOLIA-8903] Problems handling broken definitions gracefully - areas Created: 31/Oct/22 Updated: 30/May/23 Resolved: 26/May/23 |
|
| Status: | Closed |
| Project: | Magnolia |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | 6.3.0, 6.2.35 |
| Type: | Bug | Priority: | Neutral |
| Reporter: | Richard Gange | Assignee: | Milan Divilek |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Σ Remaining Estimate: | Not Specified | Remaining Estimate: | Not Specified |
| Σ Time Spent: | 0.25d | Time Spent: | Not Specified |
| Σ Original Estimate: | Not Specified | Original Estimate: | Not Specified |
| Issue Links: |
|
|||||||||||||||||||||||||
| Sub-Tasks: |
|
|||||||||||||||||||||||||
| Template: |
|
|||||||||||||||||||||||||
| Acceptance criteria: |
Empty
|
|||||||||||||||||||||||||
| Task DoD: |
[X]*
Doc/release notes changes? Comment present?
[X]*
Downstream builds green?
[X]*
Solution information and context easily available?
[X]*
Tests
[X]*
FixVersion filled and not yet released
[ ] 
Architecture Decision Record (ADR)
|
|||||||||||||||||||||||||
| Bug DoR: |
[X]*
Steps to reproduce, expected, and actual results filled
[X]*
Affected version filled
|
|||||||||||||||||||||||||
| Date of First Response: | ||||||||||||||||||||||||||
| Epic Link: | Support | |||||||||||||||||||||||||
| Sprint: | DevX 38 | |||||||||||||||||||||||||
| Story Points: | 2 | |||||||||||||||||||||||||
| Team: | ||||||||||||||||||||||||||
| Work Started: | ||||||||||||||||||||||||||
| Approved: |
Yes
|
|||||||||||||||||||||||||
| Description |
|
The definitions app can completely error out under certain conditions of a broken definition. For example, having an areas node without any configured areas.
templateScript: /mtk2/templates/pages/basic.ftl
dialog: mtk2:pages/basic
renderType: freemarker
class: info.magnolia.module.site.templates.PageTemplateDefinition
cssFiles:
normalize:
link: /.resources/mtk2/webresources/css/normalize-3.0.3.css
main:
link: /.resources/mtk2/webresources/css/html5boilerplate-main-5.3.0.css
video:
link: /.resources/mtk2/webresources/css/video.css
jsFiles:
modernizr:
link: /.resources/mtk2/webresources/js/modernizr-2.8.3.min.js
areas:
While the configuration state doesn't really make sense the app should still be able to report the issue without throwing exceptions. ERROR info.magnolia.admincentral.AdmincentralErrorHandler 31.10.2022 05:48:53 -- Admincentral has encountered an unhandled exception. java.lang.NullPointerException: null at info.magnolia.rendering.template.registry.validator.TemplateDefinitionValidator.validateDefinition(TemplateDefinitionValidator.java:93) ~[magnolia-rendering-6.2.25.jar:?] at info.magnolia.pages.rendering.registry.validator.DialogAwareTemplateDefinitionValidator.validateDefinition(DialogAwareTemplateDefinitionValidator.java:71) ~[magnolia-pages-app-6.2.23.jar:?] at info.magnolia.rendering.template.registry.validator.TemplateDefinitionValidator.validate(TemplateDefinitionValidator.java:82) ~[magnolia-rendering-6.2.25.jar:?] at info.magnolia.config.registry.AbstractRegistry$1.lambda$getProblems$0(AbstractRegistry.java:234) ~[magnolia-configuration-6.2.25.jar:?] at java.lang.Iterable.forEach(Iterable.java:75) ~[?:?] at info.magnolia.config.registry.AbstractRegistry$1.getProblems(AbstractRegistry.java:234) ~[magnolia-configuration-6.2.25.jar:?] at info.magnolia.definitions.app.data.bean.DefinitionBean$DefinitionProviderBean.getProblems(DefinitionBean.java:248) ~[magnolia-definitions-app-2.1.3.jar:?] at info.magnolia.definitions.app.column.DefinitionDescriptionGenerator.apply(DefinitionDescriptionGenerator.java:57) ~[magnolia-definitions-app-2.1.3.jar:?] at info.magnolia.definitions.app.column.DefinitionDescriptionGenerator.apply(DefinitionDescriptionGenerator.java:47) ~[magnolia-definitions-app-2.1.3.jar:?] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[?:?] at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:195) ~[?:?] at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1655) ~[?:?] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484) ~[?:?] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474) ~[?:?] at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913) ~[?:?] at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) ~[?:?] at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578) ~[?:?] at info.magnolia.definitions.app.column.DefinitionDescriptionGenerator.apply(DefinitionDescriptionGenerator.java:55) ~[magnolia-definitions-app-2.1.3.jar:?] at info.magnolia.definitions.app.column.DefinitionDescriptionGenerator.apply(DefinitionDescriptionGenerator.java:47) ~[magnolia-definitions-app-2.1.3.jar:?] at com.vaadin.ui.Grid$Column$1.generateData(Grid.java:930) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.data.provider.DataCommunicator.getDataObject(DataCommunicator.java:506) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.data.provider.DataCommunicator.pushData(DataCommunicator.java:486) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.data.provider.DataCommunicator.sendDataToClient(DataCommunicator.java:408) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.data.provider.DataCommunicator.beforeClientResponse(DataCommunicator.java:364) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.server.communication.UidlWriter.write(UidlWriter.java:126) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.server.communication.UidlRequestHandler.writeUidl(UidlRequestHandler.java:125) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:93) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1637) ~[vaadin-server-8.15.2.jar:8.15.2] at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:464) ~[vaadin-server-8.15.2.jar:8.15.2] at info.magnolia.admincentral.AdmincentralServlet.service(AdmincentralServlet.java:119) ~[magnolia-admincentral-6.2.23.jar:?] at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[servlet-api.jar:4.0.FR] at info.magnolia.cms.filters.ServletDispatchingFilter.doFilter(ServletDispatchingFilter.java:148) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:75) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.module.cache.executor.Bypass.processCacheRequest(Bypass.java:58) ~[magnolia-cache-core-5.9.4.jar:?] at info.magnolia.module.cache.executor.CompositeExecutor.processCacheRequest(CompositeExecutor.java:66) ~[magnolia-cache-core-5.9.4.jar:?] at info.magnolia.module.cache.filter.CacheFilter.doFilter(CacheFilter.java:164) ~[magnolia-cache-core-5.9.4.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.i18n.I18nContentSupportFilter.doFilter(I18nContentSupportFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.virtualuri.VirtualUriFilter.doFilter(VirtualUriFilter.java:102) ~[magnolia-virtual-uri-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.RangeSupportFilter.doFilter(RangeSupportFilter.java:78) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.security.BaseSecurityFilter.doFilter(BaseSecurityFilter.java:57) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cors.AbstractCorsFilter.doFilter(AbstractCorsFilter.java:77) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.security.SecurityCallbackFilter.doFilter(SecurityCallbackFilter.java:84) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.security.LogoutFilter.doFilter(LogoutFilter.java:94) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.module.site.filters.SiteMergeFilter.doFilter(SiteMergeFilter.java:119) ~[magnolia-site-1.4.4.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.multisite.filters.MultiSiteFilter.doFilter(MultiSiteFilter.java:120) ~[magnolia-module-multisite-2.1.2.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MultiChannelFilter.doFilter(MultiChannelFilter.java:83) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.module.cache.filter.GZipFilter.doFilter(GZipFilter.java:74) ~[magnolia-cache-core-5.9.4.jar:?] at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.security.auth.login.LoginFilter.doFilter(LoginFilter.java:128) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.enterprise.registration.RegistrationFilter.doFilter(RegistrationFilter.java:91) ~[magnolia-module-enterprise-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.UnicodeNormalizationFilter.doFilter(UnicodeNormalizationFilter.java:89) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.personalization.preview.filter.PreviewFilter.doFilter(PreviewFilter.java:92) ~[magnolia-personalization-preview-app-2.1.6.jar:?] at info.magnolia.cms.filters.OncePerRequestAbstractMgnlFilter.doFilter(OncePerRequestAbstractMgnlFilter.java:59) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:81) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:155) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.ContextFilter.doFilter(ContextFilter.java:128) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterChain.doFilter(MgnlFilterChain.java:79) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.CompositeFilter.doFilter(CompositeFilter.java:75) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.AbstractMgnlFilter.doFilter(AbstractMgnlFilter.java:85) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.SafeDestroyMgnlFilterWrapper.doFilter(SafeDestroyMgnlFilterWrapper.java:107) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlFilterDispatcher.doDispatch(MgnlFilterDispatcher.java:67) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:110) ~[magnolia-core-6.2.25.jar:?] at info.magnolia.cms.filters.MgnlMainFilter.doFilter(MgnlMainFilter.java:96) ~[magnolia-core-6.2.25.jar:?] at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[catalina.jar:9.0.65] at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[catalina.jar:9.0.65] at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[catalina.jar:9.0.65] at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[catalina.jar:9.0.65] at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[catalina.jar:9.0.65] at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[catalina.jar:9.0.65] at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[catalina.jar:9.0.65] at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) ~[catalina.jar:9.0.65] at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[catalina.jar:9.0.65] at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:769) ~[catalina.jar:9.0.65] at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:360) ~[catalina.jar:9.0.65] at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) ~[tomcat-coyote.jar:9.0.65] at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-coyote.jar:9.0.65] at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:890) ~[tomcat-coyote.jar:9.0.65] at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1789) ~[tomcat-coyote.jar:9.0.65] at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-coyote.jar:9.0.65] at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-util.jar:9.0.65] at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-util.jar:9.0.65] at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-util.jar:9.0.65] at java.lang.Thread.run(Thread.java:829) ~[?:?] Notes |
| Comments |
| Comment by Milan Divilek [ 16/May/23 ] |
|
After discussion we agreed that issue is in TemplateDefinitionValidator and needs to be fixed there. Affected lines #93,137,please also check for other places where could NPE occur. We agreed also that we want to handle possible future errors by catching unhandled validator exceptions in abstract registry and report them as severe(we don't know if problem is in validator and how much is definition broken). From report title needs to be clear that validation of definition failed. |