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;
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);
}
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);
/**
* 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.
* 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