Fixed NullPointerException in OPC UA connector
The `translateBrowsePathToNodeId()` method of didn't check for a
particular failure mode where the client returns `null` if the given
browse path doesn't exist.
A similar check for `getTargets().length == 0` did exist and
has been merged with the new check.
I don't know in which cases `targets` would be an array of zero length and in which cases it is `null`.
Signed-off-by: Moritz Marseu <moritz.marseu@festo.com>
Change-Id: I11bc9f09cd421453f907dd0620a9412930d5394c
diff --git a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnector.java b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnector.java
index 744a839..9683241 100644
--- a/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnector.java
+++ b/sdks/java/basys.sdk/src/main/java/org/eclipse/basyx/vab/protocol/opcua/connector/OpcUaConnector.java
@@ -191,20 +191,20 @@
CompletableFuture<TranslateBrowsePathsToNodeIdsResponse> result_parent = clientRunner
.translate(bp_parent_list);
if (result_node.get().getResults().length == 0) {
- logger.warn("TranslateBrowsePathsToNodeIdsResponse result size = 0, checkthe browse path!");
+ logger.warn("TranslateBrowsePathsToNodeIdsResponse result size = 0, check the browse path!");
return null;
}
if (result_node.get().getResults().length > 1) {
logger.warn("TranslateBrowsePathsToNodeIdsResponse result size > 1, the method returns only the first one!");
}
+ if (result_node.get().getResults()[0].getTargets() == null || result_node.get().getResults()[0].getTargets().length == 0) {
+ logger.warn("TranslateBrowsePathsToNodeIdsResponse targets size = 0, check the browse path!");
+ logger.trace(result_node.get().getResults()[0].getStatusCode().toString());
+ return null;
+ }
if (result_node.get().getResults()[0].getTargets().length > 1) {
logger.warn("TranslateBrowsePathsToNodeIdsResponse targets size > 1, the method returns only the first one!");
}
- if (result_node.get().getResults()[0].getTargets().length == 0) {
- logger.warn("TranslateBrowsePathsToNodeIdsResponse targets size = 0, check the browse path!");
- logger.trace(result_node.get().getResults()[0].getStatusCode().toString());
- return null;
- }
Object nodeIdentifier = result_node.get().getResults()[0].getTargets()[0].getTargetId().getIdentifier();
Object parentIdentifier = result_parent.get().getResults()[0].getTargets()[0].getTargetId().getIdentifier();
UShort nodeNsIdx = result_node.get().getResults()[0].getTargets()[0].getTargetId().getNamespaceIndex();