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

otto pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x-extras.git


The following commit(s) were added to refs/heads/develop by this push:
     new b77093d  NiFi Integration - Fix array reading (#423)
b77093d is described below

commit b77093de980d20bb63c02befbeea0f566f883d5d
Author: Unai LerĂ­a Fortea <[email protected]>
AuthorDate: Wed Jul 30 14:42:21 2025 +0200

    NiFi Integration - Fix array reading (#423)
    
    * Fix read list on NiFi integration
    
    * Add read list on NiFi integration unit tests
---
 .../java/org/apache/plc4x/nifi/util/Plc4xCommon.java  |  9 +++++++++
 .../org/apache/plc4x/nifi/util/Plc4xCommonTest.java   | 19 ++++++++++++++-----
 .../java/org/apache/plc4x/nifi/util/Plc4xCommon.java  |  9 +++++++++
 .../org/apache/plc4x/nifi/util/Plc4xCommonTest.java   | 15 ++++++++++-----
 4 files changed, 42 insertions(+), 10 deletions(-)

diff --git 
a/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
 
b/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
index 363f5d3..f936b1b 100644
--- 
a/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
+++ 
b/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
@@ -80,6 +80,15 @@ public class Plc4xCommon {
        private static DataType getDataType(final Object valueOriginal) {
 
                PlcValue value = (PlcValue) valueOriginal;
+
+               // Lists. Inner data type default to STRING if empty list
+               if (value instanceof PlcList && value.isList()){
+                       if (!value.getList().isEmpty()) {
+                               return 
RecordFieldType.ARRAY.getArrayDataType(getDataType(value.getList().get(0))); 
+                       }
+                       return 
RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.STRING.getDataType());
+               }
+
                // 8 bits
                if (value instanceof PlcBOOL && value.isBoolean())
                        return RecordFieldType.BOOLEAN.getDataType();
diff --git 
a/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/src/test/java/org/apache/plc4x/nifi/util/Plc4xCommonTest.java
 
b/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/src/test/java/org/apache/plc4x/nifi/util/Plc4xCommonTest.java
index 431fe79..e08e910 100644
--- 
a/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/src/test/java/org/apache/plc4x/nifi/util/Plc4xCommonTest.java
+++ 
b/plc4j/integrations/apache-nifi/nifi-1/nifi-plc4x-processors/src/test/java/org/apache/plc4x/nifi/util/Plc4xCommonTest.java
@@ -61,7 +61,7 @@ public class Plc4xCommonTest {
         // recordFields.add(new RecordField("WORD", "4")    String
         recordFields.add(new RecordField("SINT", 
RecordFieldType.SHORT.getDataType(), -5));
         recordFields.add(new RecordField("USINT", 
RecordFieldType.SHORT.getDataType(), "6"));
-        recordFields.add(new RecordField("INT", 
RecordFieldType.INT.getDataType(), 2000));
+        recordFields.add(new RecordField("INT", 
RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.INT.getDataType())));
         recordFields.add(new RecordField("UINT", 
RecordFieldType.INT.getDataType(), "3000"));
         recordFields.add(new RecordField("DINT", 
RecordFieldType.INT.getDataType(), "4000"));
         recordFields.add(new RecordField("UDINT", 
RecordFieldType.LONG.getDataType(), "5000"));
@@ -84,7 +84,7 @@ public class Plc4xCommonTest {
         originalMap.put("WORD", "4");
         originalMap.put("SINT", -5);
         originalMap.put("USINT", "6");
-        originalMap.put("INT", 2000);
+        originalMap.put("INT", new int[]{2000, 3000, 4000, 5000});
         originalMap.put("UINT", "3000");
         originalMap.put("DINT", "4000");
         originalMap.put("UDINT", "5000");
@@ -103,7 +103,7 @@ public class Plc4xCommonTest {
         addressMap.put("WORD", "RANDOM/v3:WORD");
         addressMap.put("SINT", "RANDOM/v4:SINT");
         addressMap.put("USINT", "RANDOM/v5:USINT");
-        addressMap.put("INT", "RANDOM/v6:INT");
+        addressMap.put("INT", "RANDOM/v6:INT[4]");
         addressMap.put("UINT", "RANDOM/v7:UINT");
         addressMap.put("DINT", "RANDOM/v8:DINT");
         addressMap.put("UDINT", "RANDOM/v9:UDINT");
@@ -175,8 +175,17 @@ public class Plc4xCommonTest {
     
                                 // Check type
                                 if (checkType) {
-                                    logger.info("{} Checking type: {} ({}) =? 
{}", tag, value.getClass(), value, Plc4xCommonTest.typeMap.get(tag));
-                                    assert 
value.getClass().equals(Plc4xCommonTest.typeMap.get(tag));
+                                    if (!(value instanceof Object[])) {
+                                        logger.info("{} Checking type: {} ({}) 
=? {}", tag, value.getClass(), value,
+                                                
Plc4xCommonTest.typeMap.get(tag));
+                                        assert 
value.getClass().equals(Plc4xCommonTest.typeMap.get(tag));
+                                    } else {
+                                        logger.info("{} Checking List type: {} 
({}) =? {}", tag,
+                                                ((Object[]) 
value)[0].getClass(), value,
+                                                
Plc4xCommonTest.typeMap.get(tag));
+                                        assert ((Object[]) value)[0].getClass()
+                                                
.equals(Plc4xCommonTest.typeMap.get(tag));
+                                    }
                                 }
                             }
                         }
diff --git 
a/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
 
b/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
index 363f5d3..f936b1b 100644
--- 
a/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
+++ 
b/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/src/main/java/org/apache/plc4x/nifi/util/Plc4xCommon.java
@@ -80,6 +80,15 @@ public class Plc4xCommon {
        private static DataType getDataType(final Object valueOriginal) {
 
                PlcValue value = (PlcValue) valueOriginal;
+
+               // Lists. Inner data type default to STRING if empty list
+               if (value instanceof PlcList && value.isList()){
+                       if (!value.getList().isEmpty()) {
+                               return 
RecordFieldType.ARRAY.getArrayDataType(getDataType(value.getList().get(0))); 
+                       }
+                       return 
RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.STRING.getDataType());
+               }
+
                // 8 bits
                if (value instanceof PlcBOOL && value.isBoolean())
                        return RecordFieldType.BOOLEAN.getDataType();
diff --git 
a/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/src/test/java/org/apache/plc4x/nifi/util/Plc4xCommonTest.java
 
b/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/src/test/java/org/apache/plc4x/nifi/util/Plc4xCommonTest.java
index e7eec21..7044e4c 100644
--- 
a/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/src/test/java/org/apache/plc4x/nifi/util/Plc4xCommonTest.java
+++ 
b/plc4j/integrations/apache-nifi/nifi-2/nifi-2-plc4x-processors/src/test/java/org/apache/plc4x/nifi/util/Plc4xCommonTest.java
@@ -62,7 +62,7 @@ public class Plc4xCommonTest {
         // recordFields.add(new RecordField("WORD", "4")    String
         recordFields.add(new RecordField("SINT", 
RecordFieldType.SHORT.getDataType(), -5));
         recordFields.add(new RecordField("USINT", 
RecordFieldType.SHORT.getDataType(), "6"));
-        recordFields.add(new RecordField("INT", 
RecordFieldType.INT.getDataType(), 2000));
+        recordFields.add(new RecordField("INT", 
RecordFieldType.ARRAY.getArrayDataType(RecordFieldType.INT.getDataType())));
         recordFields.add(new RecordField("UINT", 
RecordFieldType.INT.getDataType(), "3000"));
         recordFields.add(new RecordField("DINT", 
RecordFieldType.INT.getDataType(), "4000"));
         recordFields.add(new RecordField("UDINT", 
RecordFieldType.LONG.getDataType(), "5000"));
@@ -85,7 +85,7 @@ public class Plc4xCommonTest {
         originalMap.put("WORD", "4");
         originalMap.put("SINT", -5);
         originalMap.put("USINT", "6");
-        originalMap.put("INT", 2000);
+        originalMap.put("INT", new int[]{2000, 3000, 4000, 5000});
         originalMap.put("UINT", "3000");
         originalMap.put("DINT", "4000");
         originalMap.put("UDINT", "5000");
@@ -104,7 +104,7 @@ public class Plc4xCommonTest {
         addressMap.put("WORD", "RANDOM/v3:WORD");
         addressMap.put("SINT", "RANDOM/v4:SINT");
         addressMap.put("USINT", "RANDOM/v5:USINT");
-        addressMap.put("INT", "RANDOM/v6:INT");
+        addressMap.put("INT", "RANDOM/v6:INT[4]");
         addressMap.put("UINT", "RANDOM/v7:UINT");
         addressMap.put("DINT", "RANDOM/v8:DINT");
         addressMap.put("UDINT", "RANDOM/v9:UDINT");
@@ -176,8 +176,13 @@ public class Plc4xCommonTest {
     
                                 // Check type
                                 if (checkType) {
-                                    logger.info("{} Checking type: {} ({}) =? 
{}", tag, value.getClass(), value, Plc4xCommonTest.typeMap.get(tag));
-                                    assert 
value.getClass().equals(Plc4xCommonTest.typeMap.get(tag));
+                                    if (!(value instanceof Object[])) {
+                                        logger.info("{} Checking type: {} ({}) 
=? {}", tag, value.getClass(), value, Plc4xCommonTest.typeMap.get(tag));
+                                        assert 
value.getClass().equals(Plc4xCommonTest.typeMap.get(tag));
+                                    } else {
+                                        logger.info("{} Checking List type: {} 
({}) =? {}", tag, ((Object[]) value)[0].getClass(), value, 
Plc4xCommonTest.typeMap.get(tag));
+                                        assert ((Object[]) 
value)[0].getClass().equals(Plc4xCommonTest.typeMap.get(tag));
+                                    }
                                 }
                             }
                         }

Reply via email to