GitHub user henrik242 opened a pull request:

    https://github.com/apache/logging-log4j2/pull/183

    Avoid NullPointerException in PropertiesUtil.reload()

    SystemPropertiesPropertySource.forEach(..) uses Property.getProperty(..)
    to resolve values.  If that value is a non-String, the value will be
    null.  Since `literal` is a ConcurrentHashMap, a put(..) with null value
    will yield a NullPointerException.
    
    This is especially hard to debug in the case of e.g. StatusLogger,
    which initializes PropertiesUtil as a static variable.  The class is
    unable to load, throws a NoClassDefFoundError, and hides the
    NullPointerException.
    
    Here's what I got when I had a Property value that was a File:
    
    Caused by: java.lang.NoClassDefFoundError: Could not initialize class 
org.apache.logging.log4j.util.PropertiesUtil
        at 
org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:78)
        at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:60)

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/henrik242/logging-log4j2 
skip-null-propery-value

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/logging-log4j2/pull/183.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #183
    
----
commit fef993fbb5cbeddfa1ac29a6a33d3dfe2e833053
Author: Henrik Brautaset Aronsen <henrik@...>
Date:   2018-06-22T12:45:26Z

    Avoid NullPointerException in PropertiesUtil.reload()
    
    SystemPropertiesPropertySource.forEach(..) uses Property.getProperty(..)
    to resolve values.  If that value is a non-String, the value will be
    null.  Since `literal` is a ConcurrentHashMap, a put(..) with null value
    will yield a NullPointerException.
    
    This is especially hard to debug in the case of e.g. StatusLogger,
    which initializes PropertiesUtil as a static variable.  The class is
    unable to load, throws a NoClassDefFoundError, and hides the
    NullPointerException.
    
    Here's what I got when I had a Property value that was a File:
    
    Caused by: java.lang.NoClassDefFoundError: Could not initialize class 
org.apache.logging.log4j.util.PropertiesUtil
        at 
org.apache.logging.log4j.status.StatusLogger.<clinit>(StatusLogger.java:78)
        at org.apache.logging.log4j.LogManager.<clinit>(LogManager.java:60)

----


---

Reply via email to