This is an automated email from the ASF dual-hosted git repository.

mattyb149 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 b784d6e8ee NIFI-10621 Allow ExecuteGroovyScript classpath properties 
to accept commas or semicolons
b784d6e8ee is described below

commit b784d6e8ee0e606979c041571aaf38961cd15af6
Author: Denes Arvay <[email protected]>
AuthorDate: Thu Oct 13 13:23:47 2022 +0200

    NIFI-10621 Allow ExecuteGroovyScript classpath properties to accept commas 
or semicolons
    
    ExecuteGroovyScript's "Additional classpath" property treats commas and 
semicolons
    as delimiters
    
    Signed-off-by: Matthew Burgess <[email protected]>
    
    This closes #6523
---
 .../processors/groovyx/ExecuteGroovyScript.java    |  2 +-
 .../apache/nifi/processors/groovyx/util/Files.java |  4 ++--
 .../groovyx/ExecuteGroovyScriptTest.java           | 23 ++++++++++++++++++++++
 3 files changed, 26 insertions(+), 3 deletions(-)

diff --git 
a/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScript.java
 
b/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScript.java
index 826fa59f8d..08addbdb8b 100644
--- 
a/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScript.java
+++ 
b/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScript.java
@@ -131,7 +131,7 @@ public class ExecuteGroovyScript extends AbstractProcessor {
             .name("groovyx-additional-classpath")
             .displayName("Additional classpath")
             .required(false)
-            .description("Classpath list separated by semicolon. You can use 
masks like `*`, `*.jar` in file name.")
+            .description("Classpath list separated by semicolon or comma. You 
can use masks like `*`, `*.jar` in file name.")
             .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
             
.expressionLanguageSupported(ExpressionLanguageScope.VARIABLE_REGISTRY)
             .build();
diff --git 
a/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/util/Files.java
 
b/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/util/Files.java
index ffee3b0890..7f6d0a1794 100644
--- 
a/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/util/Files.java
+++ 
b/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/main/java/org/apache/nifi/processors/groovyx/util/Files.java
@@ -30,7 +30,7 @@ import java.util.regex.Pattern;
 public class Files {
 
     /**
-     * Classpath list separated by semicolon. You can use masks like `*`, 
`*.jar` in file name.
+     * Classpath list separated by semicolon or comma. You can use masks like 
`*`, `*.jar` in file name.
      *
      * @return file list defined by classpath parameter
      */
@@ -39,7 +39,7 @@ public class Files {
             return Collections.emptySet();
         }
         Set<File> files = new HashSet<>();
-        for (String cp : classpath.split("\\s*;\\s*")) {
+        for (String cp : classpath.split("\\s*[;,]\\s*")) {
             files.addAll(listPathFiles(cp));
         }
         return files;
diff --git 
a/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/test/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScriptTest.java
 
b/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/test/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScriptTest.java
index ae6e58b92f..a33979a066 100644
--- 
a/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/test/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScriptTest.java
+++ 
b/nifi-nar-bundles/nifi-groovyx-bundle/nifi-groovyx-processors/src/test/java/org/apache/nifi/processors/groovyx/ExecuteGroovyScriptTest.java
@@ -46,13 +46,17 @@ import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.PrintStream;
+import java.net.URL;
 import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
 import java.sql.Connection;
 import java.sql.DriverManager;
 import java.sql.Statement;
 import java.util.Arrays;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -162,6 +166,25 @@ public class ExecuteGroovyScriptTest {
         result.get(0).assertAttributeEquals("testAttr", "test content");
     }
 
+    @Test
+    public void testAdditionalClasspath() throws Exception {
+        Set<URL> expectedClasspathURLs = new HashSet<>();
+        StringBuilder additionalClasspath = new StringBuilder();
+        for (int i = 0; i < 3; i++) {
+            Path p = java.nio.file.Files.createTempFile(getClass().getName(), 
".tmp");
+            expectedClasspathURLs.add(p.toUri().toURL());
+            additionalClasspath.append(p);
+            additionalClasspath.append(i == 0 ? ',' : ';'); // create 
additional classpath string separated by ; and ,
+        }
+
+        runner.setProperty(ExecuteGroovyScript.ADD_CLASSPATH, 
additionalClasspath.toString());
+        runner.setProperty(ExecuteGroovyScript.SCRIPT_BODY, ";");
+        runner.assertValid();
+
+        URL[] classpathURLs = proc.shell.getClassLoader().getURLs();
+        assertEquals(expectedClasspathURLs, new 
HashSet<>(Arrays.asList(classpathURLs)));
+    }
+
     @Test
     public void test_onTrigger_groovy() {
         runner.setProperty(proc.SCRIPT_FILE, TEST_RESOURCE_LOCATION + 
"test_onTrigger.groovy");

Reply via email to