From f4efea9a0bc62fecf7301d08deda40867ef67f75 Mon Sep 17 00:00:00 2001 From: Igor Kulikov Date: Wed, 12 Aug 2020 13:23:22 +0300 Subject: [PATCH] Improve connect event transformation --- .../state/DefaultDeviceStateService.java | 17 ++++++++--------- .../server/dao/util/mapping/JacksonUtil.java | 11 ++++++++++- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java b/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java index 1563d5abf4..9878bbf1a2 100644 --- a/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java +++ b/application/src/main/java/org/thingsboard/server/service/state/DefaultDeviceStateService.java @@ -15,7 +15,6 @@ */ package org.thingsboard.server.service.state; -import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import com.google.common.base.Function; import com.google.common.util.concurrent.FutureCallback; @@ -46,16 +45,17 @@ import org.thingsboard.server.common.data.page.TextPageLink; import org.thingsboard.server.common.msg.TbMsg; import org.thingsboard.server.common.msg.TbMsgDataType; import org.thingsboard.server.common.msg.TbMsgMetaData; +import org.thingsboard.server.common.msg.queue.ServiceType; +import org.thingsboard.server.common.msg.queue.TbCallback; +import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; import org.thingsboard.server.dao.attributes.AttributesService; import org.thingsboard.server.dao.device.DeviceService; import org.thingsboard.server.dao.tenant.TenantService; import org.thingsboard.server.dao.timeseries.TimeseriesService; +import org.thingsboard.server.dao.util.mapping.JacksonUtil; +import org.thingsboard.server.gen.transport.TransportProtos; import org.thingsboard.server.queue.discovery.PartitionChangeEvent; import org.thingsboard.server.queue.discovery.PartitionService; -import org.thingsboard.server.common.msg.queue.ServiceType; -import org.thingsboard.server.common.msg.queue.TopicPartitionInfo; -import org.thingsboard.server.gen.transport.TransportProtos; -import org.thingsboard.server.common.msg.queue.TbCallback; import org.thingsboard.server.queue.util.TbCoreComponent; import org.thingsboard.server.service.queue.TbClusterService; import org.thingsboard.server.service.telemetry.TelemetrySubscriptionService; @@ -91,7 +91,6 @@ import static org.thingsboard.server.common.data.DataConstants.SERVER_SCOPE; @Slf4j public class DefaultDeviceStateService implements DeviceStateService { - private static final ObjectMapper json = new ObjectMapper(); public static final String ACTIVITY_STATE = "active"; public static final String LAST_CONNECT_TIME = "lastConnectTime"; public static final String LAST_DISCONNECT_TIME = "lastDisconnectTime"; @@ -506,11 +505,11 @@ public class DefaultDeviceStateService implements DeviceStateService { try { String data; if (msgType.equals(CONNECT_EVENT)) { - ObjectNode stateNode = json.convertValue(state, ObjectNode.class); + ObjectNode stateNode = JacksonUtil.convertValue(state, ObjectNode.class); stateNode.remove(ACTIVITY_STATE); - data = stateNode.toString(); + data = JacksonUtil.toString(stateNode); } else { - data = json.writeValueAsString(state); + data = JacksonUtil.toString(state); } TbMsg tbMsg = TbMsg.newMsg(msgType, stateData.getDeviceId(), stateData.getMetaData().copy(), TbMsgDataType.JSON, data); clusterService.pushMsgToRuleEngine(stateData.getTenantId(), stateData.getDeviceId(), tbMsg, null); diff --git a/dao/src/main/java/org/thingsboard/server/dao/util/mapping/JacksonUtil.java b/dao/src/main/java/org/thingsboard/server/dao/util/mapping/JacksonUtil.java index 7e4dfcdcf1..d654e85d5c 100644 --- a/dao/src/main/java/org/thingsboard/server/dao/util/mapping/JacksonUtil.java +++ b/dao/src/main/java/org/thingsboard/server/dao/util/mapping/JacksonUtil.java @@ -28,6 +28,15 @@ public class JacksonUtil { public static final ObjectMapper OBJECT_MAPPER = new ObjectMapper(); + public static T convertValue(Object fromValue, Class toValueType) { + try { + return OBJECT_MAPPER.convertValue(fromValue, toValueType); + } catch (IllegalArgumentException e) { + throw new IllegalArgumentException("The given object value: " + + fromValue + " cannot be converted to " + toValueType); + } + } + public static T fromString(String string, Class clazz) { try { return OBJECT_MAPPER.readValue(string, clazz); @@ -60,4 +69,4 @@ public class JacksonUtil { public static T clone(T value) { return fromString(toString(value), (Class) value.getClass()); } -} \ No newline at end of file +}