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

Reply via email to