Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PropertiesUtil fails due to blank key lookup #2414

Closed
jolly28 opened this issue Mar 26, 2024 · 6 comments
Closed

PropertiesUtil fails due to blank key lookup #2414

jolly28 opened this issue Mar 26, 2024 · 6 comments
Assignees
Labels
api Affects the public API bug Incorrect, unexpected, or unintended behavior of existing code
Milestone

Comments

@jolly28
Copy link

jolly28 commented Mar 26, 2024

Description

My java:17.0.5 Application is based on struts2-core:6.3.0.2 and I am using the log4j-api:2.17.2 as the dependency and the application is running fine.
When log4j-api uplifted to 2.20.0 (supported by struts), I am getting below exception

Configuration

Version: 2.20.0 (also in 2.18.0 and 2.23.1)

Operating system: OracleLinux 8.9

JDK: 17.0.5

Tomcat: 9.0.87

Logs

SEVERE [main] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [Struts2Filter]
        java.lang.NoClassDefFoundError: Could not initialize class org.apache.logging.log4j.util.PropertiesUtil
                at org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:77)
                at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:61)
                at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.<clinit>(StrutsPrepareAndExecuteFilter.java:49)
                at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
                at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
                at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
                at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
                at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:143)
                at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:242)
                at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:97)
                at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4311)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4940)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:661)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1014)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1866)
                at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
                at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
                at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:816)
                at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:468)
                at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1584)
                at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)
                at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
                at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)
                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
                at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)
                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.startup.Catalina.start(Catalina.java:735)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.base/java.lang.reflect.Method.invoke(Method.java:568)
                at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
        

Caused by: java.lang.ExceptionInInitializerError: Exception java.lang.IllegalArgumentException: key can't be empty [in thread "main"]
                at java.base/java.lang.System.checkKey(System.java:1049)
                at java.base/java.lang.System.getProperty(System.java:912)
                at org.apache.logging.log4j.util.SystemPropertiesPropertySource.getProperty(SystemPropertiesPropertySource.java:96)
                at org.apache.logging.log4j.util.SystemPropertiesPropertySource.containsProperty(SystemPropertiesPropertySource.java:104)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.lambda$null$2(PropertiesUtil.java:498)
                at java.base/java.lang.Iterable.forEach(Iterable.java:75)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.lambda$reload$3(PropertiesUtil.java:497)
                at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
                at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
                at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1707)
                at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
                at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
                at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
                at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
                at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
                at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.reload(PropertiesUtil.java:494)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.<init>(PropertiesUtil.java:469)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.<init>(PropertiesUtil.java:444)
                at org.apache.logging.log4j.util.PropertiesUtil.<init>(PropertiesUtil.java:88)
                at org.apache.logging.log4j.util.PropertiesUtil.<init>(PropertiesUtil.java:80)
                at org.apache.logging.log4j.util.PropertiesUtil.<clinit>(PropertiesUtil.java:56)
                at org.apache.logging.log4j.util.Constants.<clinit>(Constants.java:30)
                at org.apache.logging.log4j.spi.AbstractLogger.createClassForProperty(AbstractLogger.java:203)
                at org.apache.logging.log4j.spi.AbstractLogger.<clinit>(AbstractLogger.java:92)
                ... 51 more

Reproduction

For my case just uplifting the log4j-api from 2.17.2 to 2.20.0 is causing the exception to occur

@vy
Copy link
Member

vy commented Mar 28, 2024

@jolly28, could you try with the latest version of log4j-api (i.e., 2.23.1), please?

@ppkarwasz
Copy link
Contributor

For context, this isssue is related to this SO question.

@vy
Copy link
Member

vy commented Mar 28, 2024

@jolly28, in the SO question @ppkarwasz referenced, you(?) state that issue persists with 2.23.1 too. If so, could you share the stack trace you get while using 2.23.1, please?

@jolly28
Copy link
Author

jolly28 commented Mar 29, 2024

sure, @vy I am attaching the error stack trace I am getting while using the version 2.23.1.

SEVERE [main] org.apache.catalina.core.StandardContext.filterStart Exception starting filter [Struts2Filter]
        java.lang.ExceptionInInitializerError
                at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.<clinit>(StrutsPrepareAndExecuteFilter.java:49)
                at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
                at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:77)
                at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
                at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
                at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:480)
                at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:143)
                at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:242)
                at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:97)
                at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4311)
                at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4940)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)
                at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)
                at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:661)
                at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1014)
                at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1866)
                at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
                at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
                at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:816)
                at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:468)
                at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1584)
                at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:312)
                at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)
                at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
                at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)
                at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:794)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
                at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
                at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
                at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
                at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
                at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)
                at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:248)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:925)
                at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
                at org.apache.catalina.startup.Catalina.start(Catalina.java:735)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
                at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
                at java.base/java.lang.reflect.Method.invoke(Method.java:568)
                at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
                at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:473)
        



Caused by: java.lang.IllegalArgumentException: key can't be empty
                at java.base/java.lang.System.checkKey(System.java:1049)
                at java.base/java.lang.System.getProperty(System.java:912)
                at org.apache.logging.log4j.util.SystemPropertiesPropertySource.getProperty(SystemPropertiesPropertySource.java:99)
                at org.apache.logging.log4j.util.SystemPropertiesPropertySource.containsProperty(SystemPropertiesPropertySource.java:107)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.lambda$reload$1(PropertiesUtil.java:514)
                at java.base/java.lang.Iterable.forEach(Iterable.java:75)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.lambda$reload$2(PropertiesUtil.java:513)
                at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.accept(ForEachOps.java:183)
                at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
                at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1707)
                at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
                at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
                at java.base/java.util.stream.ForEachOps$ForEachOp.evaluateSequential(ForEachOps.java:150)
                at java.base/java.util.stream.ForEachOps$ForEachOp$OfRef.evaluateSequential(ForEachOps.java:173)
                at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
                at java.base/java.util.stream.ReferencePipeline.forEach(ReferencePipeline.java:596)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.reload(PropertiesUtil.java:510)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.<init>(PropertiesUtil.java:492)
                at org.apache.logging.log4j.util.PropertiesUtil$Environment.<init>(PropertiesUtil.java:465)
                at org.apache.logging.log4j.util.PropertiesUtil.<init>(PropertiesUtil.java:98)
                at org.apache.logging.log4j.util.PropertiesUtil.<init>(PropertiesUtil.java:90)
                at org.apache.logging.log4j.util.PropertiesUtil.lambda$static$0(PropertiesUtil.java:66)
                at org.apache.logging.log4j.util.LazyUtil$SafeLazy.value(LazyUtil.java:113)
                at org.apache.logging.log4j.util.Lazy.get(Lazy.java:39)
                at org.apache.logging.log4j.util.PropertiesUtil.getProperties(PropertiesUtil.java:132)
                at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:73)
                ... 50 more
```

@vy
Copy link
Member

vy commented Apr 23, 2024

@jolly28, pushed a small fix in f0bd878. Could you see if the most recent 2.24.0-SNAPSHOT solves the problem, please? (Note that you need to add the snapshot repository to your pom.xml.)

@jolly28
Copy link
Author

jolly28 commented Apr 23, 2024

@vy I have used the latest log4j-api and log4j-core jars (2.24.0-SNAPSHOT). seems the issue is solved.

@vy vy self-assigned this Apr 24, 2024
@vy vy added this to the 2.24.0 milestone Apr 24, 2024
@vy vy added bug Incorrect, unexpected, or unintended behavior of existing code api Affects the public API labels Apr 24, 2024
@vy vy changed the title log4j-api 2.20.0 causing : java.lang.NoClassDefFoundError: Could not initialize class org.apache.logging.log4j.util.PropertiesUtil PropertiesUtil fails due to blank key lookup Apr 24, 2024
@vy vy closed this as completed Apr 24, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api Affects the public API bug Incorrect, unexpected, or unintended behavior of existing code
Projects
None yet
Development

No branches or pull requests

3 participants