This is an automated email from the ASF dual-hosted git repository.
exceptionfactory pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/main by this push:
new a1c2855c0a NIFI-15584 Fixed NPE in DBCPConnectionPool for Dynamic
Properties with Null Value (#10888)
a1c2855c0a is described below
commit a1c2855c0a4a7548cafac5c6d8b76107ddbf424d
Author: apanczyk <[email protected]>
AuthorDate: Fri Feb 13 21:36:09 2026 +0100
NIFI-15584 Fixed NPE in DBCPConnectionPool for Dynamic Properties with Null
Value (#10888)
Signed-off-by: David Handermann <[email protected]>
---
.../org/apache/nifi/dbcp/DBCPConnectionPool.java | 1 +
.../java/org/apache/nifi/dbcp/DBCPServiceTest.java | 31 ++++++++++++++++++++++
2 files changed, 32 insertions(+)
diff --git
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java
index 990f6c1c19..f6c8176e18 100644
---
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java
+++
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java
@@ -223,6 +223,7 @@ public class DBCPConnectionPool extends
AbstractDBCPConnectionPool implements DB
return new
AbstractMap.SimpleEntry<>(descriptor.getName(),
propertyValue.evaluateAttributeExpressions().getValue());
}
})
+ .filter(entry -> entry.getValue() != null)
.collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey,
AbstractMap.SimpleEntry::getValue));
}
diff --git
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
index a1a108cfea..565ff50dc4 100644
---
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
+++
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
@@ -17,10 +17,14 @@
package org.apache.nifi.dbcp;
import org.apache.nifi.components.ConfigVerificationResult;
+import org.apache.nifi.components.PropertyDescriptor;
import org.apache.nifi.components.ValidationResult;
import org.apache.nifi.dbcp.utils.DBCPProperties;
+import org.apache.nifi.expression.ExpressionLanguageScope;
import org.apache.nifi.processor.exception.ProcessException;
+import org.apache.nifi.processor.util.StandardValidators;
import org.apache.nifi.reporting.InitializationException;
+import org.apache.nifi.util.MockConfigurationContext;
import org.apache.nifi.util.MockPropertyConfiguration;
import org.apache.nifi.util.NoOpProcessor;
import org.apache.nifi.util.PropertyMigrationResult;
@@ -42,6 +46,7 @@ import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
@@ -122,6 +127,32 @@ public class DBCPServiceTest {
assertTrue(e.getMessage().contains("Duplicate"));
}
+ @Test
+ public void testGetConnectionPropertiesWithNullDynamicPropertyValue() {
+ final PropertyDescriptor dynamicProperty = new
PropertyDescriptor.Builder()
+ .name("nullProperty")
+ .dynamic(true)
+ .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+ .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
+ .build();
+ final PropertyDescriptor sensitiveDynamicProperty = new
PropertyDescriptor.Builder()
+ .name("SENSITIVE.nullProperty")
+ .dynamic(true)
+ .sensitive(true)
+ .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+ .expressionLanguageSupported(ExpressionLanguageScope.NONE)
+ .build();
+
+ final Map<PropertyDescriptor, String> properties = new
LinkedHashMap<>();
+ properties.put(dynamicProperty, null);
+ properties.put(sensitiveDynamicProperty, null);
+
+ final MockConfigurationContext configurationContext = new
MockConfigurationContext(service, properties, null, Map.of());
+ final Map<String, String> connectionProperties =
service.getConnectionProperties(configurationContext);
+
+ assertTrue(connectionProperties.isEmpty());
+ }
+
@Test
public void testGetConnectionExecuteStatements() throws SQLException {
runner.enableControllerService(service);