[MAGNOLIA-8605] NullPointerExceptions NPEs when starting Magnolia 6.3 in development mode Created: 02/Nov/22 Updated: 30/May/23 Resolved: 30/May/23 |
|
| Status: | Closed |
| Project: | Magnolia |
| Component/s: | configuration, resource-loader, yaml |
| Affects Version/s: | 6.3.0 |
| Fix Version/s: | 6.3.0 |
| Type: | Bug | Priority: | Major |
| Reporter: | Janek Valgma | Assignee: | Michael Duerig |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Remaining Estimate: | Not Specified | ||
| Time Spent: | Not Specified | ||
| Original Estimate: | Not Specified | ||
| Environment: |
Using demo from https://nexus.magnolia-cms.com/content/groups/public/info/magnolia/bundle/magnolia-community-demo-webapp/6.3-SNAPSHOT/ on Windows 10 |
||
| Attachments: |
|
||||||||||||||||||||
| Issue Links: |
|
||||||||||||||||||||
| 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: |
[ ]*
Steps to reproduce, expected, and actual results filled
[ ]*
Affected version filled
|
||||||||||||||||||||
| Date of First Response: | |||||||||||||||||||||
| Work Started: | |||||||||||||||||||||
| Description |
Steps to reproduce
Actual resultsERROR info.magnolia.config.source.yaml.YamlConfigurationSource 02.11.2022 14:45:24 -- 1 severe problems have been encountered:
ERROR info.magnolia.config.source.yaml.YamlConfigurationSource 02.11.2022 14:45:24 --
Severity type: SEVERE
Title: /: [Definition resolution] - Parsing configuration data from [/ui-admincentral/fieldTypes/timeZone.yaml] failed
Problem details: Failed to parse YAML file:
Null pointer
java.lang.NullPointerException: null
ERROR info.magnolia.config.source.yaml.YamlConfigurationSource 02.11.2022 14:45:24 -- 1 severe problems have been encountered:
ERROR info.magnolia.config.source.yaml.YamlConfigurationSource 02.11.2022 14:45:24 --
Severity type: SEVERE
Title: /: [Definition resolution] - Parsing configuration data from [/ui-framework/fieldTypes/basicUpload.yaml] failed
Problem details: Failed to parse YAML file:
I o: Resource is already open -- cannot open it again without first calling close()
java.io.IOException: Resource is already open -- cannot open it again without first calling close()
at io.github.classgraph.ClasspathElementZip$1.open(ClasspathElementZip.java:386) ~[classgraph-4.8.149.jar:4.8.149]
at info.magnolia.resourceloader.classpath.service.impl.devmode.DevelopmentModeClasspathFile.openStream(DevelopmentModeClasspathFile.java:80) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.resourceloader.classpath.ClasspathResourceOrigin.doOpenStream(ClasspathResourceOrigin.java:152) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.resourceloader.classpath.ClasspathResourceOrigin.doOpenStream(ClasspathResourceOrigin.java:67) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.resourceloader.AbstractResourceOrigin.openStream(AbstractResourceOrigin.java:190) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.resourceloader.AbstractResourceOrigin.openReader(AbstractResourceOrigin.java:203) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.resourceloader.AbstractResource.openReader(AbstractResource.java:109) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.resourceloader.layered.LayeredResourceOrigin.openReader(LayeredResourceOrigin.java:204) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.resourceloader.layered.LayeredResourceOrigin.openReader(LayeredResourceOrigin.java:72) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.resourceloader.AbstractResource.openReader(AbstractResource.java:109) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.YamlReader.doReadWithDependencies(YamlReader.java:119) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.YamlReader.readWithDependencies(YamlReader.java:100) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.YamlReader.readWithDependencies(YamlReader.java:96) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.YamlDefinitionProvider.getYamlConversionResult(YamlDefinitionProvider.java:85) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.AbstractYamlDefinitionProvider.resolve(AbstractYamlDefinitionProvider.java:198) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.AbstractYamlDefinitionProvider.getDelegate(AbstractYamlDefinitionProvider.java:133) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.registry.AbstractDefinitionProviderWrapper.getMetadata(AbstractDefinitionProviderWrapper.java:56) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.registry.RegistryMap.asStringKey(RegistryMap.java:184) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.registry.RegistryMap.put(RegistryMap.java:98) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.AbstractFileResourceConfigurationSource.register(AbstractFileResourceConfigurationSource.java:190) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.YamlConfigurationSource.loadAndRegister(YamlConfigurationSource.java:115) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.yaml.AbstractFileResourceConfigurationSource.lambda$start$2(AbstractFileResourceConfigurationSource.java:138) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
...
at java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:497) ~[?:?]
at info.magnolia.config.source.yaml.AbstractFileResourceConfigurationSource.start(AbstractFileResourceConfigurationSource.java:136) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at java.util.ArrayList.forEach(ArrayList.java:1541) ~[?:?]
at info.magnolia.config.source.composite.CompositeConfigurationSource.start(CompositeConfigurationSource.java:77) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.decoration.DecoratingConfigurationSource.start(DecoratingConfigurationSource.java:87) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.decoration.YamlDecorationConfigurationSource.start(YamlDecorationConfigurationSource.java:112) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.config.source.ConfigurationSourceFactory$DefaultConfigSourcesBuilder.build(ConfigurationSourceFactory.java:245) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?]
at info.magnolia.ui.UiFrameworkJcrModule.lambda$start$1(UiFrameworkJcrModule.java:128) ~[magnolia-ui-framework-jcr-6.3-SNAPSHOT.jar:?]
at java.util.Optional.ifPresent(Optional.java:183) ~[?:?]
at info.magnolia.ui.UiFrameworkJcrModule.start(UiFrameworkJcrModule.java:122) ~[magnolia-ui-framework-jcr-6.3-SNAPSHOT.jar:?]
...
at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:136) ~[magnolia-core-6.3-SNAPSHOT.jar:?]
...
Development notesThis is happening because start() method in AbstractFileResourceConfigurationSource is being called twice, from DecoratingConfigurationSource.start() and ConfigurationSourceFactory$DefaultConfigSourcesBuilder.build(). When in production mode (magnolia.develop=false) this does not cause issues because actual opening of yaml resources does not result in opening jars, they are read internally. When in development mode, yaml files are read with classgraph in ClasspathElementZip, on the second run of the start() method a different Resource instance is created for the same path/file so the isOpen() check is false in ClasspathElementZip -> newResource -> open() and the error appears when it starts reading the same file that has not been previously closed. |
| Comments |
| Comment by Mercedes Iruela [ 03/Nov/22 ] |
|
Hello Janek, Magnolia 6.3 is in development at the moment, this brach has not been released yet so you are just seeing a SNAPSHOT. I am closing this ticket then, FYI, last available Magnolia release is 6.2.25. Best regards, |
| Comment by Janek Valgma [ 09/Nov/22 ] |
|
Workaround described in liked issue MAGNOLIA-6612 and my comment there fixes this problem. |
| Comment by Mikaël Geljić [ 24/May/23 ] |
|
Update: bug is still present, encountering a slightly different trace nowadays: 2023-05-24 09:39:01,797 ERROR agnolia.config.source.yaml.YamlConfigurationSource: 1 severe problems have been encountered: 2023-05-24 09:39:01,797 ERROR agnolia.config.source.yaml.YamlConfigurationSource: Severity type: SEVERE Title: /: [Definition resolution] - Parsing configuration data from [/periscope-core/config.yaml] failed Problem details: Failed to parse YAML file: Null pointer: Cannot invoke "java.nio.channels.FileChannel.read(java.nio.ByteBuffer, long)" because "this.fileChannel" is null java.lang.NullPointerException: Cannot invoke "java.nio.channels.FileChannel.read(java.nio.ByteBuffer, long)" because "this.fileChannel" is null at nonapi.io.github.classgraph.fileslice.reader.RandomAccessFileChannelReader.read(RandomAccessFileChannelReader.java:97) ~[classgraph-4.8.157.jar:4.8.157] at nonapi.io.github.classgraph.fileslice.reader.RandomAccessFileChannelReader.readInt(RandomAccessFileChannelReader.java:160) ~[classgraph-4.8.157.jar:4.8.157] at nonapi.io.github.classgraph.fastzipfilereader.FastZipEntry.getSlice(FastZipEntry.java:194) ~[classgraph-4.8.157.jar:4.8.157] at io.github.classgraph.ClasspathElementZip$1.open(ClasspathElementZip.java:390) ~[classgraph-4.8.157.jar:4.8.157] at info.magnolia.resourceloader.classpath.service.impl.devmode.DevelopmentModeClasspathFile.openStream(DevelopmentModeClasspathFile.java:80) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.resourceloader.classpath.ClasspathResourceOrigin.doOpenStream(ClasspathResourceOrigin.java:152) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.resourceloader.classpath.ClasspathResourceOrigin.doOpenStream(ClasspathResourceOrigin.java:67) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.resourceloader.AbstractResourceOrigin.openStream(AbstractResourceOrigin.java:190) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.resourceloader.AbstractResourceOrigin.openReader(AbstractResourceOrigin.java:203) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.resourceloader.AbstractResource.openReader(AbstractResource.java:109) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.resourceloader.layered.LayeredResourceOrigin.openReader(LayeredResourceOrigin.java:204) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.resourceloader.layered.LayeredResourceOrigin.openReader(LayeredResourceOrigin.java:72) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.resourceloader.AbstractResource.openReader(AbstractResource.java:109) ~[magnolia-resource-loader-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.YamlReader.doReadWithDependencies(YamlReader.java:119) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.YamlReader.readWithDependencies(YamlReader.java:100) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.YamlReader.readWithDependencies(YamlReader.java:96) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.YamlDefinitionProvider.getYamlConversionResult(YamlDefinitionProvider.java:85) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.AbstractYamlDefinitionProvider.resolve(AbstractYamlDefinitionProvider.java:198) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.AbstractYamlDefinitionProvider.getDelegate(AbstractYamlDefinitionProvider.java:133) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.registry.AbstractDefinitionProviderWrapper.getMetadata(AbstractDefinitionProviderWrapper.java:56) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.registry.RegistryMap.asStringKey(RegistryMap.java:184) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.registry.RegistryMap.put(RegistryMap.java:98) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.AbstractFileResourceConfigurationSource.register(AbstractFileResourceConfigurationSource.java:190) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.YamlConfigurationSource.loadAndRegister(YamlConfigurationSource.java:115) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.yaml.AbstractFileResourceConfigurationSource.lambda$start$2(AbstractFileResourceConfigurationSource.java:138) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[?:?] at info.magnolia.config.source.yaml.AbstractFileResourceConfigurationSource.start(AbstractFileResourceConfigurationSource.java:136) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at java.util.Arrays$ArrayList.forEach(Arrays.java:4204) ~[?:?] at info.magnolia.config.source.composite.CompositeConfigurationSource.start(CompositeConfigurationSource.java:77) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.decoration.DecoratingConfigurationSource.start(DecoratingConfigurationSource.java:87) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.decoration.YamlDecorationConfigurationSource.start(YamlDecorationConfigurationSource.java:112) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.source.decoration.YamlDecorationConfigurationSource.<init>(YamlDecorationConfigurationSource.java:107) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.module.ModuleConfigurationSourceFactory$2$1.<init>(ModuleConfigurationSourceFactory.java:111) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.module.ModuleConfigurationSourceFactory$2.build(ModuleConfigurationSourceFactory.java:111) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.module.ModuleConfigurationRegistry.start(ModuleConfigurationRegistry.java:94) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.config.module.ModuleConfigurationRegistry.lambda$new$0(ModuleConfigurationRegistry.java:79) ~[magnolia-configuration-6.3-SNAPSHOT.jar:?] at info.magnolia.module.PopulateModulesEvent.dispatch(PopulateModulesEvent.java:46) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.module.PopulateModulesEvent.dispatch(PopulateModulesEvent.java:42) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.event.SimpleEventBus.fireEvent(SimpleEventBus.java:75) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.module.ModuleManagerImpl.startModules(ModuleManagerImpl.java:355) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.module.ui.ModuleManagerWebUI.onStartup(ModuleManagerWebUI.java:78) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.cms.beans.config.ConfigLoader.load(ConfigLoader.java:147) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.init.MagnoliaServletContextListener$1.doExec(MagnoliaServletContextListener.java:284) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.context.MgnlContext$VoidOp.exec(MgnlContext.java:407) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.context.MgnlContext$VoidOp.exec(MgnlContext.java:404) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.context.MgnlContext.doInSystemContext(MgnlContext.java:378) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.init.MagnoliaServletContextListener.startServer(MagnoliaServletContextListener.java:281) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:195) ~[magnolia-core-6.3-SNAPSHOT.jar:?] at info.magnolia.init.MagnoliaServletContextListener.contextInitialized(MagnoliaServletContextListener.java:136) ~[magnolia-core-6.3-SNAPSHOT.jar:?] |
| Comment by Mikaël Geljić [ 25/May/23 ] |
|
I just attached the quick'n dirty patch that does the trick for me; it would be worth abstracting away the "URL resolution cascade" between jarResource, resourceUrl, classpathLocation, since similar logic is used or would need to be on other methods. |