Skip to content

Commit 88737f4

Browse files
committed
Arrays are working
1 parent 2cbaba5 commit 88737f4

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

modules/hivemq-edge-module-opcua/src/main/java/com/hivemq/edge/adapters/opcua/mqtt2opcua/JsonSchemaGenerator.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ public void createJsonSchema(
7979
final BuiltinDataType builtinType = tree.getBuiltinType(dataType.getNodeId());
8080
if (builtinType != BuiltinDataType.ExtensionObject) {
8181
if(dimensions != null && dimensions.length > 0) {
82-
System.out.println("HMM " + builtinJsonSchema.getJsonSchema(builtinType, dimensions));
8382
output.finish(builtinJsonSchema.getJsonSchema(builtinType, dimensions));
8483
} else {
8584
output.finish(builtinJsonSchema.getJsonSchema(builtinType));

modules/hivemq-edge-module-opcua/src/main/java/com/hivemq/edge/adapters/opcua/mqtt2opcua/JsonToOpcUAConverter.java

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
package com.hivemq.edge.adapters.opcua.mqtt2opcua;
1717

1818
import com.fasterxml.jackson.databind.JsonNode;
19+
import com.fasterxml.jackson.databind.node.ArrayNode;
1920
import com.google.common.io.BaseEncoding;
2021
import org.apache.commons.lang3.NotImplementedException;
2122
import org.eclipse.milo.opcua.binaryschema.AbstractCodec;
@@ -46,9 +47,13 @@
4647
import org.slf4j.Logger;
4748
import org.slf4j.LoggerFactory;
4849

50+
import java.lang.reflect.Array;
4951
import java.lang.reflect.Field;
5052
import java.time.Instant;
53+
import java.util.ArrayList;
54+
import java.util.Arrays;
5155
import java.util.Date;
56+
import java.util.List;
5257
import java.util.Map;
5358
import java.util.Optional;
5459
import java.util.UUID;
@@ -110,7 +115,11 @@ public JsonToOpcUAConverter(final @NotNull OpcUaClient client) throws UaExceptio
110115
rootNode);
111116

112117
if (builtinType != BuiltinDataType.ExtensionObject) {
113-
return parsetoOpcUAObject(builtinType, rootNode);
118+
if(rootNode.isArray()) {
119+
return generateArrayFromArrayNode((ArrayNode) rootNode, builtinType);
120+
} else {
121+
return parsetoOpcUAObject(builtinType, rootNode);
122+
}
114123
}
115124

116125
final NodeId binaryEncodingId = dataType.getBinaryEncodingId();
@@ -575,4 +584,18 @@ static boolean extractBoolean(final JsonNode jsonNode) {
575584
intendedClass +
576585
"due to underflow.");
577586
}
587+
588+
private Object[] generateArrayFromArrayNode(final @NotNull ArrayNode arrayNode, final @NotNull BuiltinDataType type) {
589+
Object[] ret = (Object[])Array.newInstance(type.getBackingClass(), arrayNode.size());
590+
591+
for (int i = 0; i < arrayNode.size(); i++) {
592+
JsonNode arrayEntry = arrayNode.get(i);
593+
if (arrayEntry.isArray()) {
594+
ret[i] = generateArrayFromArrayNode((ArrayNode) arrayEntry, type);
595+
} else {
596+
ret[i] = parsetoOpcUAObject(type, arrayEntry);
597+
}
598+
}
599+
return ret;
600+
}
578601
}

0 commit comments

Comments
 (0)