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">