You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2018/10/15 18:33:45 UTC

nifi git commit: NIFI-5678: Fixed MAP type support of MapRecord objects in StandardSchemaValidator

Repository: nifi
Updated Branches:
  refs/heads/master f55204cb6 -> 218063a0b


NIFI-5678: Fixed MAP type support of MapRecord objects in StandardSchemaValidator

This closes #3060.

Signed-off-by: Mark Payne <ma...@hotmail.com>


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

Branch: refs/heads/master
Commit: 218063a0b57c609cbc30276907c0c254d88c699c
Parents: f55204c
Author: Matthew Burgess <ma...@apache.org>
Authored: Wed Oct 10 15:01:40 2018 -0400
Committer: Mark Payne <ma...@hotmail.com>
Committed: Mon Oct 15 14:33:21 2018 -0400

----------------------------------------------------------------------
 .../validation/StandardSchemaValidator.java     | 37 +++++++++++++-------
 .../validation/TestStandardSchemaValidator.java |  8 +++++
 2 files changed, 32 insertions(+), 13 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/218063a0/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java
index d467962..eb9722c 100644
--- a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java
+++ b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/main/java/org/apache/nifi/schema/validation/StandardSchemaValidator.java
@@ -196,21 +196,32 @@ public class StandardSchemaValidator implements RecordSchemaValidator {
 
                 return true;
             case MAP:
-                if (!(value instanceof Map)) {
-                    return false;
-                }
-
-                final MapDataType mapDataType = (MapDataType) dataType;
-                final DataType valueDataType = mapDataType.getValueType();
-                final Map<?, ?> map = (Map<?, ?>) value;
-
-                for (final Object mapValue : map.values()) {
-                    if (!isTypeCorrect(mapValue, valueDataType)) {
-                        return false;
+                if (value instanceof Map) {
+                    final MapDataType mapDataType = (MapDataType) dataType;
+                    final DataType valueDataType = mapDataType.getValueType();
+                    final Map<?, ?> map = (Map<?, ?>) value;
+
+                    for (final Object mapValue : map.values()) {
+                        if (!isTypeCorrect(mapValue, valueDataType)) {
+                            return false;
+                        }
                     }
+                    return true;
+                } else if (value instanceof Record) {
+                    Record record = (Record) value;
+                    final MapDataType mapDataType = (MapDataType) dataType;
+                    final DataType valueDataType = mapDataType.getValueType();
+
+                    for (final String fieldName : record.getRawFieldNames()) {
+                        final Object fieldValue = record.getValue(fieldName);
+                        if (!isTypeCorrect(fieldValue, valueDataType)) {
+                            return false;
+                        }
+                    }
+                    return true;
+                } else {
+                    return false;
                 }
-
-                return true;
             case RECORD:
                 return value instanceof Record;
             case CHOICE:

http://git-wip-us.apache.org/repos/asf/nifi/blob/218063a0/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java
index f323a03..00de9f5 100644
--- a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java
+++ b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-standard-record-utils/src/test/java/org/apache/nifi/schema/validation/TestStandardSchemaValidator.java
@@ -75,6 +75,13 @@ public class TestStandardSchemaValidator {
         intMap.put("height", 48);
         intMap.put("width", 96);
 
+        List<RecordField> mapRecordFields = new ArrayList<>();
+        RecordField mapRecordField = new RecordField("mapRecord", RecordFieldType.MAP.getMapDataType(RecordFieldType.INT.getDataType()));
+        mapRecordFields.add(mapRecordField);
+        fields.add(mapRecordField);
+        RecordSchema mapRecordSchema = new SimpleRecordSchema(mapRecordFields);
+        MapRecord mapRecord = new MapRecord(mapRecordSchema, intMap);
+
         final RecordSchema schema = new SimpleRecordSchema(fields);
         final Map<String, Object> valueMap = new LinkedHashMap<>();
         valueMap.put("string", "string");
@@ -94,6 +101,7 @@ public class TestStandardSchemaValidator {
         valueMap.put("array", null);
         valueMap.put("choice", 48L);
         valueMap.put("map", intMap);
+        valueMap.put("mapRecord", mapRecord);
 
         final Record record = new MapRecord(schema, valueMap);