You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by gg...@apache.org on 2019/02/27 14:56:02 UTC

[logging-log4j2] branch master updated: [LOG4J2-2559] NullPointerException in JdbcAppender.createAppender().

This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/master by this push:
     new dd0f364  [LOG4J2-2559] NullPointerException in JdbcAppender.createAppender().
dd0f364 is described below

commit dd0f364505e1614586436c198b229de8c628507b
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Wed Feb 27 09:56:01 2019 -0500

    [LOG4J2-2559] NullPointerException in JdbcAppender.createAppender().
---
 .../log4j/jdbc/appender/JdbcDatabaseManager.java   | 83 ++++++++++++----------
 src/changes/changes.xml                            |  8 +++
 2 files changed, 55 insertions(+), 36 deletions(-)

diff --git a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
index 9d592d9..7f55eed 100644
--- a/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
+++ b/log4j-jdbc/src/main/java/org/apache/logging/log4j/jdbc/appender/JdbcDatabaseManager.java
@@ -112,33 +112,38 @@ public final class JdbcDatabaseManager extends AbstractDatabaseManager {
             appendColumnNames("INSERT", data, sb);
             sb.append(") values (");
             int i = 1;
-            for (final ColumnMapping mapping : data.columnMappings) {
-                final String mappingName = mapping.getName();
-                if (Strings.isNotEmpty(mapping.getLiteralValue())) {
-                    logger().trace("Adding INSERT VALUES literal for ColumnMapping[{}]: {}={} ", i, mappingName,
-                            mapping.getLiteralValue());
-                    sb.append(mapping.getLiteralValue());
-                } else if (Strings.isNotEmpty(mapping.getParameter())) {
-                    logger().trace("Adding INSERT VALUES parameter for ColumnMapping[{}]: {}={} ", i, mappingName,
-                            mapping.getParameter());
-                    sb.append(mapping.getParameter());
-                } else {
-                    logger().trace("Adding INSERT VALUES parameter marker for ColumnMapping[{}]: {}={} ", i,
-                            mappingName, PARAMETER_MARKER);
-                    sb.append(PARAMETER_MARKER);
+            if (data.columnMappings != null) {
+                for (final ColumnMapping mapping : data.columnMappings) {
+                    final String mappingName = mapping.getName();
+                    if (Strings.isNotEmpty(mapping.getLiteralValue())) {
+                        logger().trace("Adding INSERT VALUES literal for ColumnMapping[{}]: {}={} ", i, mappingName,
+                                mapping.getLiteralValue());
+                        sb.append(mapping.getLiteralValue());
+                    } else if (Strings.isNotEmpty(mapping.getParameter())) {
+                        logger().trace("Adding INSERT VALUES parameter for ColumnMapping[{}]: {}={} ", i, mappingName,
+                                mapping.getParameter());
+                        sb.append(mapping.getParameter());
+                    } else {
+                        logger().trace("Adding INSERT VALUES parameter marker for ColumnMapping[{}]: {}={} ", i,
+                                mappingName, PARAMETER_MARKER);
+                        sb.append(PARAMETER_MARKER);
+                    }
+                    sb.append(',');
+                    i++;
                 }
-                sb.append(',');
-                i++;
             }
-            final List<ColumnConfig> columnConfigs = new ArrayList<>(data.columnConfigs.length);
-            for (final ColumnConfig config : data.columnConfigs) {
-                if (Strings.isNotEmpty(config.getLiteralValue())) {
-                    sb.append(config.getLiteralValue());
-                } else {
-                    sb.append(PARAMETER_MARKER);
-                    columnConfigs.add(config);
+            final int columnConfigsLen = data.columnConfigs == null ? 0 : data.columnConfigs.length;
+            final List<ColumnConfig> columnConfigs = new ArrayList<>(columnConfigsLen);
+            if (data.columnConfigs != null) {
+                for (final ColumnConfig config : data.columnConfigs) {
+                    if (Strings.isNotEmpty(config.getLiteralValue())) {
+                        sb.append(config.getLiteralValue());
+                    } else {
+                        sb.append(PARAMETER_MARKER);
+                        columnConfigs.add(config);
+                    }
+                    sb.append(',');
                 }
-                sb.append(',');
             }
             // at least one of those arrays is guaranteed to be non-empty
             sb.setCharAt(sb.length() - 1, ')');
@@ -334,21 +339,27 @@ public final class JdbcDatabaseManager extends AbstractDatabaseManager {
      * Appends column names to the given buffer in the format {@code "A,B,C"}.
      */
     private static void appendColumnNames(final String sqlVerb, final FactoryData data, final StringBuilder sb) {
-        // so this gets a little more complicated now that there are two ways to configure column mappings, but
+        // so this gets a little more complicated now that there are two ways to
+        // configure column mappings, but
         // both mappings follow the same exact pattern for the prepared statement
         int i = 1;
         final String messagePattern = "Appending {} {}[{}]: {}={} ";
-        for (final ColumnMapping colMapping : data.columnMappings) {
-            final String columnName = colMapping.getName();
-            appendColumnName(i, columnName, sb);
-            logger().trace(messagePattern, sqlVerb, colMapping.getClass().getSimpleName(), i, columnName, colMapping);
-            i++;
-        }
-        for (final ColumnConfig colConfig : data.columnConfigs) {
-            final String columnName = colConfig.getColumnName();
-            appendColumnName(i, columnName, sb);
-            logger().trace(messagePattern, sqlVerb, colConfig.getClass().getSimpleName(), i, columnName, colConfig);
-            i++;
+        if (data.columnMappings != null) {
+            for (final ColumnMapping colMapping : data.columnMappings) {
+                final String columnName = colMapping.getName();
+                appendColumnName(i, columnName, sb);
+                logger().trace(messagePattern, sqlVerb, colMapping.getClass().getSimpleName(), i, columnName,
+                        colMapping);
+                i++;
+            }
+        }
+        if (data.columnConfigs != null) {
+            for (final ColumnConfig colConfig : data.columnConfigs) {
+                final String columnName = colConfig.getColumnName();
+                appendColumnName(i, columnName, sb);
+                logger().trace(messagePattern, sqlVerb, colConfig.getClass().getSimpleName(), i, columnName, colConfig);
+                i++;
+            }
         }
     }
 
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0db2702..a0c1ed4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -358,6 +358,14 @@
       <action issue="LOG4J2-2545" dev="ckozak" type="fix">
         RoutingAppender.BuilderlsetPurgePolicy fluently returns the builder instance.
       </action>
+      <action issue="LOG4J2-2559" dev="ggregory" type="fix" due-to="Li Lei, Gary Gregory">
+        NullPointerException in JdbcAppender.createAppender().
+      </action>
+    </release>
+    <release version="2.12.0" date="2019-MM-DD" description="GA Release 2.12.0">
+      <action issue="LOG4J2-2559" dev="ggregory" type="fix" due-to="Li Lei, Gary Gregory">
+        NullPointerException in JdbcAppender.createAppender().
+      </action>
     </release>
     <release version="2.11.2" date="2018-MM-DD" description="GA Release 2.11.2">
       <action issue="LOG4J2-2500" dev="rgoers" type="fix">