From 1b9f5d8d40d211e8ee2ecfeca64e9e6eccc24ba8 Mon Sep 17 00:00:00 2001 From: Bryan Bende Date: Wed, 7 Jun 2017 13:00:13 -0400 Subject: [PATCH] NIFI-4030 Populating default values on GenericRecord from Avro schema if not present in RecordSchema --- .../src/main/java/org/apache/nifi/avro/AvroTypeUtil.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/avro/AvroTypeUtil.java b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/avro/AvroTypeUtil.java index 1417e67f154a..76438c5212c3 100644 --- a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/avro/AvroTypeUtil.java +++ b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/main/java/org/apache/nifi/avro/AvroTypeUtil.java @@ -273,6 +273,15 @@ public static GenericRecord createAvroRecord(final Record record, final Schema a rec.put(fieldName, converted); } + // see if the Avro schema has any fields that aren't in the RecordSchema, and if those fields have a default + // value then we want to populate it in the GenericRecord being produced + for (final Field field : avroSchema.getFields()) { + final Optional recordField = recordSchema.getField(field.name()); + if (!recordField.isPresent() && rec.get(field.name()) == null && field.defaultVal() != null) { + rec.put(field.name(), field.defaultVal()); + } + } + return rec; }