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 {
 | 
			
		||||
        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());
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
@ -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
 | 
			
		||||
 | 
			
		||||
@ -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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user