[MAGNOLIA-8080] Magnolia will not start when module version in descriptor could not be parsed Created: 03/May/21  Updated: 04/Jul/22  Resolved: 01/Feb/22

Status: Closed
Project: Magnolia
Component/s: None
Affects Version/s: 6.2.7
Fix Version/s: 6.2.17

Type: Bug Priority: Neutral
Reporter: zzz_Philipp Güttler Assignee: Dai Ha
Resolution: Fixed Votes: 0
Labels: VN-Maintenance
Remaining Estimate: Not Specified
Time Spent: 0.5d
Original Estimate: Not Specified

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 1, DevX 2
Story Points: 3
Team: DeveloperX

 Description   

Magnolia will throw a NullPointerException on startup, when LightModuleDefinitionReader or BetwixtModuleDefinitionReader fail to parsed a module version.

Steps to reproduce

  1.  Set a version property in a module descriptor (lightmodule/xml) with 1.0.UNKNOWN
  2.  Start Magnolia
ERROR info.magnolia.init.MagnoliaServletContextListener : Oops, Magnolia could not be started
  at info.magnolia.objectfactory.configuration.ComponentProviderConfigurationBuilder.getComponentsFromModules(ComponentProviderConfigurationBuilder.java:78)
java.lang.NullPointerException: null
  at info.magnolia.init.MagnoliaServletContextListener.getSystemComponents(MagnoliaServletContextListener.java:252)
  at info.magnolia.objectfactory.configuration.ComponentProviderConfigurationBuilder.getComponentsFromModules(ComponentProviderConfigurationBuilder.java:78) ~[magnolia-core-6.2.7.jar:?]
  at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:165)
  at info.magnolia.init.MagnoliaServletContextListener.getSystemComponents(MagnoliaServletContextListener.java:252) ~[magnolia-core-6.2.7.jar:?]
  at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:128)
  at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:165) [magnolia-core-6.2.7.jar:?]
  at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4812)
  at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:128) [magnolia-core-6.2.7.jar:?]
  at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4812) [catalina.jar:8.5.37]
  at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5278)
  at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5278) [catalina.jar:8.5.37]
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
  at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) [catalina.jar:8.5.37]
  at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754)
  at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:754) [catalina.jar:8.5.37]
  at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730)
  at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:730) [catalina.jar:8.5.37]
  at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
  at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734) [catalina.jar:8.5.37]
  at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1140) [catalina.jar:8.5.37]
  at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1140)
  at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1875) [catalina.jar:8.5.37]
  at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1875)
  at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) [?:?]
  at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
  at java.util.concurrent.FutureTask.run(FutureTask.java:264) [?:?]
  at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
  at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
  at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
  at java.base/java.lang.Thread.run(Thread.java:834)

In order to prevent this

  • the DefinitionReaders should discard the modules from initializing by throwing an exception
  • the log statement in info.magnolia.objectfactory.configuration.ComponentProviderConfigurationBuilder#getComponentsFromModules:78 should be guarded


 Comments   
Comment by Roman Kovařík [ 07/Jan/22 ]

Could you add steps to reproduce?

  • how such version gets into the module descriptor?
  • does it come from pom.xml (via ${project.version}) or is it explicitly written in the module descriptor?
  • can you change the version as workaround?
Comment by zzz_Philipp Güttler [ 12/Jan/22 ]

Yes, it is a missing build step (maven resource filtering) on a ci server or when working locally with an IDE mostly, which skips the replacement of those placeholders. As you pointed out, the version always should be set to a known version format.

Anyhow, Magnolia does load module descriptors successfully, by setting the version to null when reading a non-parseable version in one of its modules: LightModuleDefinitionReader.java:165 Map2Bean fails for field version.

But after the initialization, Magnolia throws this NPE and stops working, because of the logging statement is assuming a non-null version - which is a breach of contract.

I tested this again with Magnolia 6.2.15 and got the reported behavior only for YAML module descriptors. XML descriptors tend to log an error message pointing to the non-parseable version nicely.

Generated at Mon Feb 12 04:29:28 CET 2024 using Jira 9.4.2#940002-sha1:46d1a51de284217efdcb32434eab47a99af2938b.