This is an automated email from the ASF dual-hosted git repository.

pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 1d35343  NIFI-9594: When converting Record to Avro GenericRecord, 
ensure that any default values that are defined in the GenericRecord's schema 
get applied, regardless of whether or not the field exists in the associated 
RecordSchema.
1d35343 is described below

commit 1d353435a54d0fde8a12eed456e5114e54274e83
Author: Mark Payne <[email protected]>
AuthorDate: Wed Jan 19 10:21:15 2022 -0500

    NIFI-9594: When converting Record to Avro GenericRecord, ensure that any 
default values that are defined in the GenericRecord's schema get applied, 
regardless of whether or not the field exists in the associated RecordSchema.
    
    Signed-off-by: Pierre Villard <[email protected]>
    
    This closes #5677.
---
 .../java/org/apache/nifi/avro/AvroTypeUtil.java    |  3 +--
 .../org/apache/nifi/avro/TestAvroTypeUtil.java     | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)

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 01f4fa7..d8d6e10 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
@@ -626,8 +626,7 @@ public class AvroTypeUtil {
                 continue;
             }
 
-            final Optional<RecordField> recordField = 
recordSchema.getField(field.name());
-            if (!recordField.isPresent() && rec.get(field.name()) == null) {
+            if (rec.get(field.name()) == null) {
                 rec.put(field.name(), field.defaultVal());
             }
         }
diff --git 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/test/java/org/apache/nifi/avro/TestAvroTypeUtil.java
 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/test/java/org/apache/nifi/avro/TestAvroTypeUtil.java
index 05d31a0..dac8024 100644
--- 
a/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/test/java/org/apache/nifi/avro/TestAvroTypeUtil.java
+++ 
b/nifi-nar-bundles/nifi-extension-utils/nifi-record-utils/nifi-avro-record-utils/src/test/java/org/apache/nifi/avro/TestAvroTypeUtil.java
@@ -123,6 +123,27 @@ public class TestAvroTypeUtil {
     }
 
     @Test
+    public void testAvroDefaultValueWithFieldInSchemaButNotRecord() throws 
IOException {
+        final List<RecordField> fields = new ArrayList<>();
+        fields.add(new RecordField("name", 
RecordFieldType.STRING.getDataType()));
+        fields.add(new RecordField("color", 
RecordFieldType.STRING.getDataType()));
+        final RecordSchema personSchema = new SimpleRecordSchema(fields);
+
+        final org.apache.nifi.serialization.record.Record record = new 
MapRecord(personSchema, Collections.singletonMap("name", "John Doe"));
+        final Schema avroSchema = 
SchemaBuilder.record("person").namespace("nifi")
+            .fields()
+            .requiredString("name")
+            .name("color").type().stringType().stringDefault("blue")
+            .endRecord();
+
+        final GenericRecord avroRecord = AvroTypeUtil.createAvroRecord(record, 
avroSchema);
+        assertEquals("John Doe", avroRecord.get("name"));
+        assertEquals("blue", avroRecord.get("color"));
+
+    }
+
+
+    @Test
     public void testCreateAvroSchemaPrimitiveTypes() {
         final List<RecordField> fields = new ArrayList<>();
         fields.add(new RecordField("int", RecordFieldType.INT.getDataType()));
@@ -625,6 +646,7 @@ public class TestAvroTypeUtil {
         assertTrue(field4.aliases().contains("  __ Another ONE!!"));
     }
 
+    @Test
     public void testListToArrayConversion() {
         final Charset charset = Charset.forName("UTF-8");
         Object o = 
AvroTypeUtil.convertToAvroObject(Collections.singletonList("Hello"), 
Schema.createArray(Schema.create(Type.STRING)), charset);

Reply via email to