You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by jo...@apache.org on 2015/02/18 05:30:22 UTC

[20/29] incubator-nifi git commit: Adding a test case for SplitJson where the specified path cannot be found. Adjusting documentation for additional detail.

Adding a test case for SplitJson where the specified path cannot be found.  Adjusting documentation for additional detail.


Project: http://git-wip-us.apache.org/repos/asf/incubator-nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-nifi/commit/7a74dd94
Tree: http://git-wip-us.apache.org/repos/asf/incubator-nifi/tree/7a74dd94
Diff: http://git-wip-us.apache.org/repos/asf/incubator-nifi/diff/7a74dd94

Branch: refs/heads/NIFI-360
Commit: 7a74dd942008bf2178634746e70266f46657d4ef
Parents: 2e05dcb
Author: Aldrin Piri <al...@gmail.com>
Authored: Tue Feb 17 15:50:42 2015 -0500
Committer: Aldrin Piri <al...@gmail.com>
Committed: Tue Feb 17 15:50:42 2015 -0500

----------------------------------------------------------------------
 .../nifi/processors/standard/SplitJson.java     | 12 +++++++--
 .../processors/standard/util/JsonUtils.java     | 28 +++++++++++++++-----
 .../nifi/processors/standard/TestSplitJson.java | 11 ++++++++
 3 files changed, 43 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/7a74dd94/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SplitJson.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SplitJson.java b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SplitJson.java
index e589b48..3ca0ace 100644
--- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SplitJson.java
+++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SplitJson.java
@@ -18,6 +18,7 @@ package org.apache.nifi.processors.standard;
 
 import com.jayway.jsonpath.DocumentContext;
 import com.jayway.jsonpath.JsonPath;
+import com.jayway.jsonpath.PathNotFoundException;
 import org.apache.nifi.annotation.behavior.EventDriven;
 import org.apache.nifi.annotation.behavior.SideEffectFree;
 import org.apache.nifi.annotation.behavior.SupportsBatching;
@@ -105,10 +106,17 @@ public class SplitJson extends AbstractProcessor {
 
         final List<FlowFile> segments = new ArrayList<>();
 
-        Object jsonPathResult = documentContext.read(jsonPath);
+        Object jsonPathResult;
+        try {
+            jsonPathResult = documentContext.read(jsonPath);
+        } catch (PathNotFoundException e) {
+            logger.warn("JsonPath {} could not be found for FlowFile {}", new Object[]{jsonPath.getPath(), original});
+            processSession.transfer(original, REL_FAILURE);
+            return;
+        }
 
         if (!(jsonPathResult instanceof List)) {
-            logger.error("The evaluated value {} of {} was not an array compatible type and cannot be split.",
+            logger.error("The evaluated value {} of {} was not a JSON Array compatible type and cannot be split.",
                     new Object[]{jsonPathResult, jsonPath.getPath()});
             processSession.transfer(original, REL_FAILURE);
             return;

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/7a74dd94/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JsonUtils.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JsonUtils.java b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JsonUtils.java
index 0bf33dd..5fe2a56 100644
--- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JsonUtils.java
+++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/JsonUtils.java
@@ -89,14 +89,23 @@ public class JsonUtils {
         return contextHolder.get();
     }
 
-
+    /*
+     * JSONValue#isValidJson is permissive to the degree of the Smart JSON definition.
+     * Accordingly, a strict JSON approach is preferred in determining whether or not a document is valid.
+     */
+
+    /**
+     * JSONValue#isValidJson is permissive to the degree of the Smart JSON definition, accordingly a strict JSON approach
+     * is preferred in determining whether or not a document is valid.
+     * Performs a validation of the provided stream according to RFC 4627 as implemented by {@link net.minidev.json.parser.JSONParser#MODE_RFC4627}
+     *
+     * @param inputStream of content to be validated as JSON
+     * @return true, if the content is valid within the bounds of the strictness specified; false otherwise
+     * @throws IOException
+     */
     public static boolean isValidJson(InputStream inputStream) throws IOException {
         boolean isValid = false;
 
-        /*
-         * JSONValue#isValidJson is permissive to the degree of the Smart JSON definition.
-         * Accordingly, a strict JSON approach is preferred in determining whether or not a document is valid.
-         */
         try (InputStreamReader inputStreamReader = new InputStreamReader(inputStream)) {
             isValid = JSONValue.isValidJsonStrict(inputStreamReader);
         }
@@ -104,8 +113,15 @@ public class JsonUtils {
         return isValid;
     }
 
+    /**
+     * Determines the context by which JsonSmartJsonProvider would treat the value.  {@link java.util.Map} and
+     * {@link java.util.List} objects can be rendered as JSON elements, everything else is treated as a scalar.
+     *
+     * @param obj item to be inspected if it is a scalar or a JSON element
+     * @return false, if the object is a supported type; true otherwise
+     */
     public static boolean isJsonScalar(Object obj) {
-        // For the default provider, a Map or List is able to be handled as a JSON entity
+        // For the default provider, JsonSmartJsonProvider, a Map or List is able to be handled as a JSON entity
         return !(obj instanceof Map || obj instanceof List);
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-nifi/blob/7a74dd94/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestSplitJson.java
----------------------------------------------------------------------
diff --git a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestSplitJson.java b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestSplitJson.java
index dd6fc6d..f47467f 100644
--- a/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestSplitJson.java
+++ b/nifi/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestSplitJson.java
@@ -112,4 +112,15 @@ public class TestSplitJson {
         testRunner.getFlowFilesForRelationship(SplitJson.REL_SPLIT).get(0).assertContentEquals("{\"first\":\"Shaffer\",\"last\":\"Pearson\"}");
     }
 
+    @Test
+    public void testSplit_pathNotFound() throws Exception {
+        final TestRunner testRunner = TestRunners.newTestRunner(new SplitJson());
+        testRunner.setProperty(SplitJson.ARRAY_JSON_PATH_EXPRESSION, "$.nonexistent");
+
+        testRunner.enqueue(JSON_SNIPPET);
+        testRunner.run();
+
+        testRunner.assertTransferCount(SplitJson.REL_FAILURE, 1);
+        testRunner.getFlowFilesForRelationship(SplitJson.REL_FAILURE).get(0).assertContentEquals(JSON_SNIPPET);
+    }
 }