This is an automated email from the ASF dual-hosted git repository.
pvillard 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 b885b5d82cc NIFI-15755: Improve JDBC URL Validation messaging (#11051)
b885b5d82cc is described below
commit b885b5d82cc067c5c3440d932c186d8d4a423a67
Author: Bob Paulin <[email protected]>
AuthorDate: Thu Mar 26 16:39:31 2026 -0500
NIFI-15755: Improve JDBC URL Validation messaging (#11051)
---
.../apache/nifi/dbcp/ConnectionUrlValidator.java | 8 +++++
.../nifi/dbcp/ConnectionUrlValidatorTest.java | 38 ++++++++++++++++++++++
.../java/org/apache/nifi/dbcp/DBCPServiceTest.java | 10 ++++++
.../nifi/dbcp/HikariCPConnectionPoolTest.java | 14 ++++++++
4 files changed, 70 insertions(+)
diff --git
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-api/src/main/java/org/apache/nifi/dbcp/ConnectionUrlValidator.java
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-api/src/main/java/org/apache/nifi/dbcp/ConnectionUrlValidator.java
index a5863840ec7..bcca6b39a2b 100644
---
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-api/src/main/java/org/apache/nifi/dbcp/ConnectionUrlValidator.java
+++
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-api/src/main/java/org/apache/nifi/dbcp/ConnectionUrlValidator.java
@@ -27,6 +27,7 @@ import java.util.Set;
* Database Connection URL Validator supports system attribute expressions and
evaluates URL formatting
*/
public class ConnectionUrlValidator implements Validator {
+ private static final String JDBC_URL_PREFIX = "jdbc:";
private static final Set<String> UNSUPPORTED_SCHEMES =
Collections.singleton("jdbc:h2");
@Override
@@ -42,6 +43,9 @@ public class ConnectionUrlValidator implements Validator {
if (isUrlUnsupported(url)) {
builder.valid(false);
builder.explanation(String.format("Connection URL contains an
unsupported scheme %s", UNSUPPORTED_SCHEMES));
+ } else if (!isJdbcUrl(url)) {
+ builder.valid(false);
+ builder.explanation("Connection URL must start with
'%s'".formatted(JDBC_URL_PREFIX));
} else {
builder.valid(true);
builder.explanation("Connection URL is valid");
@@ -51,6 +55,10 @@ public class ConnectionUrlValidator implements Validator {
return builder.build();
}
+ private boolean isJdbcUrl(final String url) {
+ return url.regionMatches(true, 0, JDBC_URL_PREFIX, 0,
JDBC_URL_PREFIX.length());
+ }
+
private boolean isUrlUnsupported(final String url) {
boolean unsupported = false;
diff --git
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-api/src/test/java/org/apache/nifi/dbcp/ConnectionUrlValidatorTest.java
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-api/src/test/java/org/apache/nifi/dbcp/ConnectionUrlValidatorTest.java
index 5086b785124..80b1ec360fe 100644
---
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-api/src/test/java/org/apache/nifi/dbcp/ConnectionUrlValidatorTest.java
+++
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-api/src/test/java/org/apache/nifi/dbcp/ConnectionUrlValidatorTest.java
@@ -43,6 +43,12 @@ class ConnectionUrlValidatorTest {
private static final String VENDOR_URL = "jdbc:vendor";
+ private static final String NON_JDBC_URL =
"http://localhost:3306/database";
+
+ private static final String NON_JDBC_PLAIN_STRING = "not-a-jdbc-url";
+
+ private static final String UPPERCASE_JDBC_URL =
"JDBC:VENDOR://localhost:5432/db";
+
private ValidationContext validationContext;
private ConnectionUrlValidator validator;
@@ -63,6 +69,14 @@ class ConnectionUrlValidatorTest {
assertFalse(result.isValid());
}
+ @Test
+ void testValidateNull() {
+ final ValidationResult result = validator.validate(SUBJECT, null,
validationContext);
+
+ assertNotNull(result);
+ assertFalse(result.isValid());
+ }
+
@Test
void testValidateUnsupportedUrl() {
final ValidationResult result = validator.validate(SUBJECT,
UNSUPPORTED_URL, validationContext);
@@ -94,4 +108,28 @@ class ConnectionUrlValidatorTest {
assertNotNull(result);
assertTrue(result.isValid());
}
+
+ @Test
+ void testValidateNonJdbcUrl() {
+ final ValidationResult result = validator.validate(SUBJECT,
NON_JDBC_URL, validationContext);
+
+ assertNotNull(result);
+ assertFalse(result.isValid());
+ }
+
+ @Test
+ void testValidateNonJdbcPlainString() {
+ final ValidationResult result = validator.validate(SUBJECT,
NON_JDBC_PLAIN_STRING, validationContext);
+
+ assertNotNull(result);
+ assertFalse(result.isValid());
+ }
+
+ @Test
+ void testValidateUppercaseJdbcUrl() {
+ final ValidationResult result = validator.validate(SUBJECT,
UPPERCASE_JDBC_URL, validationContext);
+
+ assertNotNull(result);
+ assertTrue(result.isValid());
+ }
}
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 565ff50dc4d..85bcd42b7a6 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
@@ -69,6 +69,8 @@ public class DBCPServiceTest {
private static final String INVALID_CONNECTION_URL = "jdbc:h2";
+ private static final String NON_JDBC_URL =
"http://localhost:3306/database";
+
private static final String DRIVER_CLASS = "org.hsqldb.jdbc.JDBCDriver";
private static final String CONNECTION_URL_FORMAT = "jdbc:hsqldb:file:%s";
@@ -97,6 +99,14 @@ public class DBCPServiceTest {
runner.assertNotValid(service);
}
+ @Test
+ public void testConnectionUrlNonJdbc() {
+ runner.assertValid(service);
+
+ runner.setProperty(service, DBCPProperties.DATABASE_URL, NON_JDBC_URL);
+ runner.assertNotValid(service);
+ }
+
@Test
public void testNotValidWithNegativeMinIdleProperty() {
runner.setProperty(service, DBCPProperties.MIN_IDLE, "-1");
diff --git
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/test/java/org/apache/nifi/dbcp/HikariCPConnectionPoolTest.java
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/test/java/org/apache/nifi/dbcp/HikariCPConnectionPoolTest.java
index 83bd75776b8..9d6f8dfd051 100644
---
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/test/java/org/apache/nifi/dbcp/HikariCPConnectionPoolTest.java
+++
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-hikari-dbcp-service/src/test/java/org/apache/nifi/dbcp/HikariCPConnectionPoolTest.java
@@ -49,6 +49,8 @@ public class HikariCPConnectionPoolTest {
private static final String INVALID_CONNECTION_URL = "jdbc:h2";
+ private static final String NON_JDBC_URL =
"http://localhost:3306/database";
+
private static final String DB_DRIVERNAME_VALUE = "jdbc:mock";
private static final String MAX_WAIT_TIME_VALUE = "5 s";
@@ -72,6 +74,18 @@ public class HikariCPConnectionPoolTest {
runner.assertNotValid(service);
}
+ @Test
+ public void testConnectionUrlNonJdbc() throws InitializationException {
+ final HikariCPConnectionPool service = new HikariCPConnectionPool();
+
+ runner.addControllerService(SERVICE_ID, service);
+ setDatabaseProperties(service);
+ runner.assertValid(service);
+
+ runner.setProperty(service, HikariCPConnectionPool.DATABASE_URL,
NON_JDBC_URL);
+ runner.assertNotValid(service);
+ }
+
@Test
public void testMissingPropertyValues() throws InitializationException {
final HikariCPConnectionPool service = new HikariCPConnectionPool();