This is an automated email from the ASF dual-hosted git repository.
exceptionfactory 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 2aa0ee6998 NIFI-15435 Added check for empty array in MapRecord.toMap()
(#10738)
2aa0ee6998 is described below
commit 2aa0ee6998e7995fd3deaa669d0121b9edb0f58e
Author: Matt Burgess <[email protected]>
AuthorDate: Wed Jan 7 21:39:54 2026 -0500
NIFI-15435 Added check for empty array in MapRecord.toMap() (#10738)
Signed-off-by: David Handermann <[email protected]>
---
.../nifi/serialization/record/MapRecord.java | 1 +
.../nifi/serialization/record/TestMapRecord.java | 42 ++++++++++++++++++++++
2 files changed, 43 insertions(+)
diff --git
a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/MapRecord.java
b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/MapRecord.java
index 794854f7cf..93d8980f3f 100644
---
a/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/MapRecord.java
+++
b/nifi-commons/nifi-record/src/main/java/org/apache/nifi/serialization/record/MapRecord.java
@@ -432,6 +432,7 @@ public class MapRecord implements Record {
valueToAdd = ((MapRecord) value).toMap(true);
} else if (value != null
&& value.getClass().isArray()
+ && ((Object[]) value).length > 0
&& ((Object[]) value)[0] instanceof MapRecord) {
Object[] records = (Object[]) value;
Map<String, Object>[] maps = new Map[records.length];
diff --git
a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/TestMapRecord.java
b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/TestMapRecord.java
index 93e8d08f89..e2c1014d05 100644
---
a/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/TestMapRecord.java
+++
b/nifi-commons/nifi-record/src/test/java/org/apache/nifi/serialization/record/TestMapRecord.java
@@ -333,6 +333,48 @@ class TestMapRecord {
}
}
+ @Test
+ void testNestedSchemaWithEmptyArray() throws Exception {
+ final String testValue = "test!";
+ final String nestedRecordValue = "Hello, world!";
+
+ final List<RecordField> fields = new ArrayList<>();
+ fields.add(new RecordField("foo",
RecordFieldType.STRING.getDataType(), null, set("bar", "baz")));
+ List<RecordField> nestedFields = new ArrayList<>();
+ nestedFields.add(new RecordField("test",
RecordFieldType.STRING.getDataType()));
+ RecordSchema nestedSchema = new SimpleRecordSchema(nestedFields);
+ RecordDataType nestedType = new RecordDataType(nestedSchema);
+ fields.add(new RecordField("nested", nestedType));
+ fields.add(new RecordField("array", new ArrayDataType(nestedType)));
+ RecordSchema fullSchema = new SimpleRecordSchema(fields);
+
+ Map<String, Object> nestedValues = new HashMap<>();
+ nestedValues.put("test", nestedRecordValue);
+ Record nestedRecord = new MapRecord(nestedSchema, nestedValues);
+ Map<String, Object> values = new HashMap<>();
+ values.put("foo", testValue);
+ values.put("nested", nestedRecord);
+
+ values.put("array", new Object[0]);
+
+ Record record = new MapRecord(fullSchema, values);
+
+ Map<String, Object> fullConversion = null;
+ fullConversion = ((MapRecord) record).toMap(true);
+
+ assertEquals(testValue, fullConversion.get("foo"));
+ assertInstanceOf(Map.class, fullConversion.get("nested"));
+
+ Map<String, Object> nested = (Map<String, Object>)
fullConversion.get("nested");
+ assertEquals(1, nested.size());
+ assertEquals(nestedRecordValue, nested.get("test"));
+
+ Object arrayFieldName = fullConversion.get("array");
+ assertInstanceOf(Object[].class, arrayFieldName);
+ Object[] recordArray = (Object[]) arrayFieldName;
+ assertEquals(0, recordArray.length);
+ }
+
@ParameterizedTest
@MethodSource("provideLocalDates")
void testGettingLocalDate(final String input, final String format,
LocalDate expectedDate) {