From fb4834d00da6b6229787b9d19f67e5d5a135b616 Mon Sep 17 00:00:00 2001 From: Aaron Date: Fri, 5 Mar 2021 07:00:23 -0800 Subject: [PATCH] 0.24.2 - Fix deserialization of infinity. --- build.gradle | 2 +- .../iot/dslink/serializer/Deserializer.java | 37 +++++++++++++++---- 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 07e2473e..0c28869e 100755 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ subprojects { apply plugin: 'java-library' apply plugin: 'maven' - version = '0.24.1' + version = '0.24.2' sourceCompatibility = 1.7 targetCompatibility = 1.7 diff --git a/sdk/dslink/src/main/java/org/dsa/iot/dslink/serializer/Deserializer.java b/sdk/dslink/src/main/java/org/dsa/iot/dslink/serializer/Deserializer.java index 47ce36a7..20a2acaa 100755 --- a/sdk/dslink/src/main/java/org/dsa/iot/dslink/serializer/Deserializer.java +++ b/sdk/dslink/src/main/java/org/dsa/iot/dslink/serializer/Deserializer.java @@ -1,9 +1,14 @@ package org.dsa.iot.dslink.serializer; -import java.util.*; -import org.dsa.iot.dslink.node.*; -import org.dsa.iot.dslink.node.value.*; -import org.dsa.iot.dslink.util.json.*; +import org.dsa.iot.dslink.node.Node; +import org.dsa.iot.dslink.node.NodeManager; +import org.dsa.iot.dslink.node.Writable; +import org.dsa.iot.dslink.node.value.Value; +import org.dsa.iot.dslink.node.value.ValueType; +import org.dsa.iot.dslink.node.value.ValueUtils; +import org.dsa.iot.dslink.util.json.JsonObject; + +import java.util.Map; /** * Deserializes a JSON file into a node manager @@ -20,7 +25,7 @@ public Deserializer(NodeManager nodeManager) { } public Deserializer(SerializationManager serializationManager, - NodeManager nodeManager) { + NodeManager nodeManager) { this.serializationManager = serializationManager; this.nodeManager = nodeManager; } @@ -72,9 +77,25 @@ private void deserializeNode(Node node, JsonObject map) { Value val = ValueUtils.toValue(value); if (t != null && val != null && val.getType().compare(ValueType.STRING) - && t.compare(ValueType.NUMBER) - && "NaN".equals(val.getString())) { - node.setValue(new Value(Float.NaN)); + && t.compare(ValueType.NUMBER)) { + String str = val.getString(); + if ((str == null) || str.isEmpty()) { + node.setValue(null); + } else { + switch (str) { + case "NaN": + node.setValue(new Value(Float.NaN)); + break; + case "Infinity": + node.setValue(new Value(Float.POSITIVE_INFINITY)); + break; + case "-Infinity": + node.setValue(new Value(Float.NEGATIVE_INFINITY)); + break; + default: + node.setValue(null); + } + } } else { node.setValue(val); }