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 <[email protected]> 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 <[email protected]> Authored: Wed Oct 10 15:01:40 2018 -0400 Committer: Mark Payne <[email protected]> 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);
