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:
parent
593f95a7af
commit
2344d6d62f
@ -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());
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user