Browse Source

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
pull/4372/head
ShvaykaD 6 years ago
committed by GitHub
parent
commit
2344d6d62f
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      application/src/main/java/org/thingsboard/server/controller/RpcController.java
  2. 2
      common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/adaptors/ProtoMqttAdaptor.java
  3. 11
      common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/adaptor/JsonConverter.java
  4. 25
      common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/adaptor/ProtoConverter.java

10
application/src/main/java/org/thingsboard/server/controller/RpcController.java

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

2
common/transport/mqtt/src/main/java/org/thingsboard/server/transport/mqtt/adaptors/ProtoMqttAdaptor.java

@ -146,7 +146,7 @@ public class ProtoMqttAdaptor implements MqttTransportAdaptor {
@Override
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

11
common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/adaptor/JsonConverter.java

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

25
common/transport/transport-api/src/main/java/org/thingsboard/server/common/transport/adaptor/ProtoConverter.java

@ -15,7 +15,9 @@
*/
package org.thingsboard.server.common.transport.adaptor;
import com.google.gson.JsonElement;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;
import com.google.protobuf.InvalidProtocolBufferException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils;
@ -167,4 +169,27 @@ public class ProtoConverter {
});
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;
}
}
}
}

Loading…
Cancel
Save