You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2018/06/06 07:37:15 UTC
nifi git commit: NIFI-5268: Fix JostTransformJSON spec validation
with EL
Repository: nifi
Updated Branches:
refs/heads/master 504152eaa -> 71cf3fd46
NIFI-5268: Fix JostTransformJSON spec validation with EL
Signed-off-by: Pierre Villard <pi...@gmail.com>
This closes #2762.
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/71cf3fd4
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/71cf3fd4
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/71cf3fd4
Branch: refs/heads/master
Commit: 71cf3fd46dfabe867ceb4d59451e855a0c968711
Parents: 504152e
Author: Koji Kawamura <ij...@apache.org>
Authored: Tue Jun 5 10:21:17 2018 +0900
Committer: Pierre Villard <pi...@gmail.com>
Committed: Wed Jun 6 09:37:02 2018 +0200
----------------------------------------------------------------------
.../processors/standard/JoltTransformJSON.java | 14 ++++++----
.../standard/TestJoltTransformJSON.java | 29 ++++++++++++++++++++
2 files changed, 37 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/71cf3fd4/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/JoltTransformJSON.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/JoltTransformJSON.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/JoltTransformJSON.java
index 69ebad2..872535d 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/JoltTransformJSON.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/JoltTransformJSON.java
@@ -209,13 +209,15 @@ public class JoltTransformJSON extends AbstractProcessor {
}
final String specValue = validationContext.getProperty(JOLT_SPEC).getValue();
- final String invalidExpressionMsg = validationContext.newExpressionLanguageCompiler().validateExpression(specValue,true);
- if (validationContext.isExpressionLanguagePresent(specValue) && invalidExpressionMsg != null) {
- final String customMessage = "The expression language used withing this specification is invalid";
- results.add(new ValidationResult.Builder().valid(false)
- .explanation(customMessage)
- .build());
+ if (validationContext.isExpressionLanguagePresent(specValue)) {
+ final String invalidExpressionMsg = validationContext.newExpressionLanguageCompiler().validateExpression(specValue,true);
+ if (!StringUtils.isEmpty(invalidExpressionMsg)) {
+ results.add(new ValidationResult.Builder().valid(false)
+ .subject(JOLT_SPEC.getDisplayName())
+ .explanation("Invalid Expression Language: " + invalidExpressionMsg)
+ .build());
+ }
} else {
//for validation we want to be able to ensure the spec is syntactically correct and not try to resolve variables since they may not exist yet
Object specJson = SORTR.getValue().equals(transform) ? null : JsonUtils.jsonToObject(specValue.replaceAll("\\$\\{","\\\\\\\\\\$\\{"), DEFAULT_CHARSET);
http://git-wip-us.apache.org/repos/asf/nifi/blob/71cf3fd4/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestJoltTransformJSON.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestJoltTransformJSON.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestJoltTransformJSON.java
index 14a2531..c548662 100644
--- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestJoltTransformJSON.java
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestJoltTransformJSON.java
@@ -23,6 +23,8 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.Collections;
+import java.util.Map;
import java.util.Set;
import org.apache.nifi.flowfile.attributes.CoreAttributes;
@@ -417,5 +419,32 @@ public class TestJoltTransformJSON {
assertTrue(DIFFY.diff(compareJson, transformedJson).isEmpty());
}
+ @Test
+ public void testJoltSpecEL() throws IOException {
+ final TestRunner runner = TestRunners.newTestRunner(new JoltTransformJSON());
+ final String spec = "${joltSpec}";
+ runner.setProperty(JoltTransformJSON.JOLT_SPEC, spec);
+ runner.setProperty(JoltTransformJSON.JOLT_TRANSFORM,JoltTransformJSON.DEFAULTR);
+ final Map<String, String> attributes = Collections.singletonMap("joltSpec",
+ "{\"RatingRange\":5,\"rating\":{\"*\":{\"MaxLabel\":\"High\",\"MinLabel\":\"Low\",\"DisplayType\":\"NORMAL\"}}}");
+ runner.enqueue(JSON_INPUT, attributes);
+ runner.run();
+ runner.assertAllFlowFilesTransferred(JoltTransformJSON.REL_SUCCESS);
+ final MockFlowFile transformed = runner.getFlowFilesForRelationship(JoltTransformJSON.REL_SUCCESS).get(0);
+ transformed.assertAttributeExists(CoreAttributes.MIME_TYPE.key());
+ transformed.assertAttributeEquals(CoreAttributes.MIME_TYPE.key(),"application/json");
+ Object transformedJson = JsonUtils.jsonToObject(new ByteArrayInputStream(transformed.toByteArray()));
+ Object compareJson = JsonUtils.jsonToObject(Files.newInputStream(Paths.get("src/test/resources/TestJoltTransformJson/defaultrOutput.json")));
+ assertTrue(DIFFY.diff(compareJson, transformedJson).isEmpty());
+ }
+
+ @Test
+ public void testJoltSpecInvalidEL() throws IOException {
+ final TestRunner runner = TestRunners.newTestRunner(new JoltTransformJSON());
+ final String spec = "${joltSpec:nonExistingFunction()}";
+ runner.setProperty(JoltTransformJSON.JOLT_SPEC, spec);
+ runner.enqueue(JSON_INPUT);
+ runner.assertNotValid();
+ }
}