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);