From: AsamK Date: Wed, 22 Dec 2021 18:18:42 +0000 (+0100) Subject: Add workaround for jsonrpc clients that send null params X-Git-Tag: v0.10.1~47 X-Git-Url: https://git.nmode.ca/signal-cli/commitdiff_plain/f9ecaa8ad683e760b4c60be119886d671eb29c39?ds=inline Add workaround for jsonrpc clients that send null params --- diff --git a/src/main/java/org/asamk/signal/jsonrpc/JsonRpcReader.java b/src/main/java/org/asamk/signal/jsonrpc/JsonRpcReader.java index 6e58b23c..5b641266 100644 --- a/src/main/java/org/asamk/signal/jsonrpc/JsonRpcReader.java +++ b/src/main/java/org/asamk/signal/jsonrpc/JsonRpcReader.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ContainerNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ValueNode; import org.asamk.signal.util.Util; @@ -39,7 +40,7 @@ public class JsonRpcReader { if (message == null) break; if (message instanceof final JsonRpcRequest jsonRpcRequest) { - logger.debug("Received json rpc request, method: " + jsonRpcRequest.method); + logger.debug("Received json rpc request, method: " + jsonRpcRequest.getMethod()); final var response = handleRequest(requestHandler, jsonRpcRequest); if (response != null) { jsonRpcSender.sendResponse(response); @@ -153,6 +154,10 @@ public class JsonRpcReader { } private JsonRpcRequest parseJsonRpcRequest(final JsonNode input) throws JsonRpcException { + if (input instanceof ObjectNode i && input.has("params") && input.get("params").isNull()) { + // Workaround for clients that send a null params field instead of omitting it + i.remove("params"); + } JsonRpcRequest request; try { request = objectMapper.treeToValue(input, JsonRpcRequest.class); diff --git a/src/main/java/org/asamk/signal/jsonrpc/JsonRpcRequest.java b/src/main/java/org/asamk/signal/jsonrpc/JsonRpcRequest.java index ac54c7b7..8e7535ec 100644 --- a/src/main/java/org/asamk/signal/jsonrpc/JsonRpcRequest.java +++ b/src/main/java/org/asamk/signal/jsonrpc/JsonRpcRequest.java @@ -13,21 +13,21 @@ public final class JsonRpcRequest extends JsonRpcMessage { /** * A String specifying the version of the JSON-RPC protocol. MUST be exactly "2.0". */ - String jsonrpc; + private String jsonrpc; /** * A String containing the name of the method to be invoked. * Method names that begin with the word rpc followed by a period character (U+002E or ASCII 46) * are reserved for rpc-internal methods and extensions and MUST NOT be used for anything else. */ - String method; + private String method; /** * A Structured value that holds the parameter values to be used during the invocation of the method. * This member MAY be omitted. */ @JsonInclude(JsonInclude.Include.NON_NULL) - ContainerNode params; + private ContainerNode params; /** * An identifier established by the Client that MUST contain a String, Number, or NULL value if included. @@ -35,7 +35,7 @@ public final class JsonRpcRequest extends JsonRpcMessage { * The value SHOULD normally not be Null and Numbers SHOULD NOT contain fractional parts */ @JsonInclude(JsonInclude.Include.NON_NULL) - ValueNode id; + private ValueNode id; public static JsonRpcRequest forNotification( final String method, final ContainerNode params, final ValueNode id