Fixed RPC string params in protobuf payload type. Reverted changes from the previous fix (#4356)

* Revert "added a fix for string value RPC params: removed redundant escaped characters"

This reverts commit 1891af54

* removed redundant escape characters for string RPC params in Proto payload

* cleanup code
This commit is contained in:
ShvaykaD 2021-04-02 12:25:05 +03:00 committed by GitHub
parent 593f95a7af
commit 2344d6d62f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 18 deletions

View File

@ -97,13 +97,9 @@ public class RpcController extends BaseController {
private DeferredResult<ResponseEntity> handleDeviceRPCRequest(boolean oneWay, DeviceId deviceId, String requestBody) throws ThingsboardException { private DeferredResult<ResponseEntity> handleDeviceRPCRequest(boolean oneWay, DeviceId deviceId, String requestBody) throws ThingsboardException {
try { try {
JsonNode rpcRequestBody = jsonMapper.readTree(requestBody); JsonNode rpcRequestBody = jsonMapper.readTree(requestBody);
String requestData; RpcRequest cmd = new RpcRequest(rpcRequestBody.get("method").asText(),
if (rpcRequestBody.get("params").isTextual()) { jsonMapper.writeValueAsString(rpcRequestBody.get("params")));
requestData = rpcRequestBody.get("params").asText();
} else {
requestData = jsonMapper.writeValueAsString(rpcRequestBody.get("params"));
}
RpcRequest cmd = new RpcRequest(rpcRequestBody.get("method").asText(), requestData);
if (rpcRequestBody.has("timeout")) { if (rpcRequestBody.has("timeout")) {
cmd.setTimeout(rpcRequestBody.get("timeout").asLong()); cmd.setTimeout(rpcRequestBody.get("timeout").asLong());
} }

View File

@ -146,7 +146,7 @@ public class ProtoMqttAdaptor implements MqttTransportAdaptor {
@Override @Override
public Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, TransportProtos.ToDeviceRpcRequestMsg rpcRequest) { public Optional<MqttMessage> convertToPublish(MqttDeviceAwareSessionContext ctx, TransportProtos.ToDeviceRpcRequestMsg rpcRequest) {
return Optional.of(createMqttPublishMsg(ctx, MqttTopics.DEVICE_RPC_REQUESTS_TOPIC + rpcRequest.getRequestId(), rpcRequest.toByteArray())); return Optional.of(createMqttPublishMsg(ctx, MqttTopics.DEVICE_RPC_REQUESTS_TOPIC + rpcRequest.getRequestId(), ProtoConverter.convertToRpcRequest(rpcRequest)));
} }
@Override @Override

View File

@ -22,7 +22,6 @@ import com.google.gson.JsonObject;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive; import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSyntaxException; import com.google.gson.JsonSyntaxException;
import com.google.gson.stream.MalformedJsonException;
import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.math.NumberUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.thingsboard.server.common.data.DataConstants; import org.thingsboard.server.common.data.DataConstants;
@ -158,15 +157,7 @@ public class JsonConverter {
result.addProperty("id", msg.getRequestId()); result.addProperty("id", msg.getRequestId());
} }
result.addProperty("method", msg.getMethodName()); result.addProperty("method", msg.getMethodName());
try { result.add("params", JSON_PARSER.parse(msg.getParams()));
result.add("params", JSON_PARSER.parse(msg.getParams()));
} catch (JsonSyntaxException ex) {
if (ex.getCause() instanceof MalformedJsonException) {
result.addProperty("params", msg.getParams());
} else {
throw ex;
}
}
return result; return result;
} }

View File

@ -15,7 +15,9 @@
*/ */
package org.thingsboard.server.common.transport.adaptor; package org.thingsboard.server.common.transport.adaptor;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser; import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.protobuf.InvalidProtocolBufferException; import com.google.protobuf.InvalidProtocolBufferException;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@ -167,4 +169,27 @@ public class ProtoConverter {
}); });
return kvList; return kvList;
} }
public static byte[] convertToRpcRequest(TransportProtos.ToDeviceRpcRequestMsg toDeviceRpcRequestMsg) {
TransportProtos.ToDeviceRpcRequestMsg.Builder toDeviceRpcRequestMsgBuilder = toDeviceRpcRequestMsg.newBuilderForType();
toDeviceRpcRequestMsgBuilder.mergeFrom(toDeviceRpcRequestMsg);
toDeviceRpcRequestMsgBuilder.setParams(parseParams(toDeviceRpcRequestMsg));
TransportProtos.ToDeviceRpcRequestMsg result = toDeviceRpcRequestMsgBuilder.build();
return result.toByteArray();
}
private static String parseParams(TransportProtos.ToDeviceRpcRequestMsg toDeviceRpcRequestMsg) {
String params = toDeviceRpcRequestMsg.getParams();
JsonElement jsonElementParams = JSON_PARSER.parse(params);
if (!jsonElementParams.isJsonPrimitive()) {
return params;
} else {
JsonPrimitive primitiveParams = jsonElementParams.getAsJsonPrimitive();
if (jsonElementParams.getAsJsonPrimitive().isString()) {
return primitiveParams.getAsString();
} else {
return params;
}
}
}
} }