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