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();

Reply via email to