You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by ld...@apache.org on 2021/07/02 12:10:24 UTC

[plc4x] 01/01: PLC4X-304 Improve status code mappings for OPC UA.

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

ldywicki pushed a commit to branch issue/PLC4X-304
in repository https://gitbox.apache.org/repos/asf/plc4x.git

commit 26befd0c80215e176f7ad6b9576b16b55cb57f89
Author: Ɓukasz Dywicki <lu...@code-house.org>
AuthorDate: Fri Jul 2 14:09:28 2021 +0200

    PLC4X-304 Improve status code mappings for OPC UA.
---
 .../plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
index 458d5f1..f3c4732 100644
--- a/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
+++ b/plc4j/drivers/opcua/src/main/java/org/apache/plc4x/java/opcua/connection/OpcuaTcpPlcConnection.java
@@ -513,12 +513,11 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
             for (int counter = 0; counter < readValueIds.size(); counter++) {
                 PlcResponseCode resultCode = PlcResponseCode.OK;
                 PlcValue stringItem = null;
-                if (readValues == null || readValues.size() <= counter ||
-                    !readValues.get(counter).getStatusCode().equals(StatusCode.GOOD)) {
+                if (readValues == null || readValues.size() <= counter || readValues.get(counter) == null) {
                     resultCode = PlcResponseCode.NOT_FOUND;
                 } else {
+                    resultCode = mapStatusCode(readValues.get(counter).getStatusCode());
                     stringItem = encodePlcValue(readValues.get(counter));
-
                 }
                 ResponseItem<PlcValue> newPair = new ResponseItem<>(resultCode, stringItem);
                 fields.put((String) readRequest.getFieldNames().toArray()[counter], newPair);
@@ -531,6 +530,15 @@ public class OpcuaTcpPlcConnection extends BaseOpcuaPlcConnection {
         return future;
     }
 
+    private PlcResponseCode mapStatusCode(StatusCode statusCode) {
+        if (statusCode == null || statusCode.getValue() == StatusCodes.Bad_BoundNotFound || statusCode.getValue() == StatusCodes.Bad_NotFound) {
+            return PlcResponseCode.NOT_FOUND;
+        }
+        if (statusCode.isSecurityError()) {
+            return PlcResponseCode.ACCESS_DENIED;
+        }
+        return statusCode.isUncertain() ? PlcResponseCode.NOT_FOUND : PlcResponseCode.REMOTE_ERROR;
+    }
 
     @Override
     public CompletableFuture<PlcWriteResponse> write(PlcWriteRequest writeRequest) {