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/commons-dbcp.git
commit 2555c38ec47b7bc499c3a0274339d7fcf9b86309 Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Mon Aug 23 13:09:51 2021 -0400 Fix possible NullPointerException in BasicDataSourceFactory.validatePropertyNames(Reference, Name, List, List) - Fix possible NullPointerException in BasicDataSourceFactory.getObjectInstance(). - Use lambdas. --- src/changes/changes.xml | 6 ++++++ .../commons/dbcp2/BasicDataSourceFactory.java | 25 +++++++++------------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/changes/changes.xml b/src/changes/changes.xml index a236b87..16e6f26 100644 --- a/src/changes/changes.xml +++ b/src/changes/changes.xml @@ -74,6 +74,12 @@ The <action> type attribute can be add,update,fix,remove. <action dev="ggregory" type="fix" due-to="Gary Gregory"> Migrate away from deprecated APIs in Apache Commons Pool. </action> + <action dev="ggregory" type="fix" due-to="Gary Gregory"> + Fix possible NullPointerException in BasicDataSourceFactory.validatePropertyNames(). + </action> + <action dev="ggregory" type="fix" due-to="Gary Gregory"> + Fix possible NullPointerException in BasicDataSourceFactory.getObjectInstance(). + </action> <!-- ADDS --> <action dev="ggregory" type="add" due-to="Gary Gregory"> Add and use AbandonedTrace#setLastUsed(Instant). diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java b/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java index 4ab0cc4..b932ee1 100644 --- a/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java @@ -381,22 +381,17 @@ public class BasicDataSourceFactory implements ObjectFactory { } // Check property names and log warnings about obsolete and / or unknown properties - final List<String> warnings = new ArrayList<>(); + final List<String> warnMessages = new ArrayList<>(); final List<String> infoMessages = new ArrayList<>(); - validatePropertyNames(ref, name, warnings, infoMessages); - for (final String warning : warnings) { - log.warn(warning); - } - for (final String infoMessage : infoMessages) { - log.info(infoMessage); - } + validatePropertyNames(ref, name, warnMessages, infoMessages); + warnMessages.forEach(log::warn); + infoMessages.forEach(log::info); final Properties properties = new Properties(); for (final String propertyName : ALL_PROPERTIES) { final RefAddr ra = ref.get(propertyName); if (ra != null) { - final String propertyValue = ra.getContent().toString(); - properties.setProperty(propertyName, propertyValue); + properties.setProperty(propertyName, Objects.toString(ra.getContent(), null)); } } @@ -411,12 +406,12 @@ public class BasicDataSourceFactory implements ObjectFactory { * Reference to check properties of * @param name * Name provided to getObject - * @param warnings + * @param warnMessages * container for warning messages * @param infoMessages * container for info messages */ - private void validatePropertyNames(final Reference ref, final Name name, final List<String> warnings, + private void validatePropertyNames(final Reference ref, final Name name, final List<String> warnMessages, final List<String> infoMessages) { final List<String> allPropsAsList = Arrays.asList(ALL_PROPERTIES); final String nameString = name != null ? "Name = " + name.toString() + " " : ""; @@ -425,11 +420,11 @@ public class BasicDataSourceFactory implements ObjectFactory { final RefAddr ra = ref.get(propertyName); if (ra != null && !allPropsAsList.contains(ra.getType())) { final StringBuilder stringBuilder = new StringBuilder(nameString); - final String propertyValue = ra.getContent().toString(); + final String propertyValue = Objects.toString(ra.getContent(), null); stringBuilder.append(NUPROP_WARNTEXT.get(propertyName)).append(" You have set value of \"") .append(propertyValue).append("\" for \"").append(propertyName) .append("\" property, which is being ignored."); - warnings.add(stringBuilder.toString()); + warnMessages.add(stringBuilder.toString()); } } } @@ -442,7 +437,7 @@ public class BasicDataSourceFactory implements ObjectFactory { // and it is not in the "silent" list, tell user we are ignoring it. if (!(allPropsAsList.contains(propertyName) || NUPROP_WARNTEXT.containsKey(propertyName) || SILENT_PROPERTIES.contains(propertyName))) { - final String propertyValue = ra.getContent().toString(); + final String propertyValue = Objects.toString(ra.getContent(), null); final StringBuilder stringBuilder = new StringBuilder(nameString); stringBuilder.append("Ignoring unknown property: ").append("value of \"").append(propertyValue) .append("\" for \"").append(propertyName).append("\" property");