/** * Create the JSON handler for messages between the local and remote services. */ protected MessageJsonHandler createJsonHandler() { Map<String, JsonRpcMethod> supportedMethods = getSupportedMethods(); if (configureGson != null) return new MessageJsonHandler(supportedMethods, configureGson); else return new MessageJsonHandler(supportedMethods); }
public Message parseMessage(CharSequence input) throws JsonParseException { StringReader reader = new StringReader(input.toString()); return parseMessage(reader); }
public String serialize(Message message) { StringWriter writer = new StringWriter(); serialize(message, writer); return writer.toString(); }
@Test public void testParseNullList() { Map<String, JsonRpcMethod> supportedMethods = new LinkedHashMap<>(); supportedMethods.put("foo", JsonRpcMethod.request("foo", new TypeToken<List<? extends Entry>>() {}.getType(), new TypeToken<List<? extends Entry>>() {}.getType())); MessageJsonHandler handler = new MessageJsonHandler(supportedMethods); handler.setMethodProvider((id)->"foo"); Message message = handler.parseMessage("{\"jsonrpc\":\"2.0\"," + "\"id\":\"2\",\n" + " \"result\": null}"); Assert.assertNull(((ResponseMessage)message).getResult()); }
/** * Create the remote endpoint that communicates with the local services. */ protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) { MessageConsumer outgoingMessageStream = new StreamMessageConsumer(output, jsonHandler); outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream); RemoteEndpoint remoteEndpoint = new RemoteEndpoint(outgoingMessageStream, ServiceEndpoints.toEndpoint(localServices)); jsonHandler.setMethodProvider(remoteEndpoint); return remoteEndpoint; } }
@Test public void testSerializeImmutableList() { MessageJsonHandler handler = new MessageJsonHandler(Collections.emptyMap()); NotificationMessage message = new NotificationMessage(); message.setMethod("foo"); List<Object> list = new ArrayList<>(); list.add("a"); list.add("b"); message.setParams(Collections.unmodifiableList(list)); String json = handler.serialize(message); Assert.assertEquals("{\"jsonrpc\":\"2.0\",\"method\":\"foo\",\"params\":[\"a\",\"b\"]}", json); }
MethodProvider methodProvider = handler.getMethodProvider(); if (methodProvider != null) { String resolvedMethod = methodProvider.resolveMethod(id); if (resolvedMethod != null) { JsonRpcMethod jsonRpcMethod = handler.getJsonRpcMethod(resolvedMethod); if (jsonRpcMethod != null) { type = jsonRpcMethod.getReturnType();
@Test public void testResponseErrorData() { MessageJsonHandler handler = new MessageJsonHandler(Collections.emptyMap()); ResponseMessage message = (ResponseMessage) handler.parseMessage("{\"jsonrpc\":\"2.0\"," + "\"id\":\"2\",\n" + "\"error\": { \"code\": -32001, \"message\": \"foo\",\n" + " \"data\": { \"uri\": \"file:/foo\", \"version\": 5, \"list\": [\"a\", \"b\", \"c\"] }\n" + " }\n" + "}"); ResponseError error = message.getError(); Assert.assertTrue("Expected a JsonObject in error.data", error.getData() instanceof JsonObject); JsonObject data = (JsonObject) error.getData(); Assert.assertEquals("file:/foo", data.get("uri").getAsString()); Assert.assertEquals(5, data.get("version").getAsInt()); JsonArray list = data.get("list").getAsJsonArray(); Assert.assertEquals("a", list.get(0).getAsString()); Assert.assertEquals("b", list.get(1).getAsString()); Assert.assertEquals("c", list.get(2).getAsString()); }
this.jsonHandler.setMethodProvider(_function); final Message message = this.jsonHandler.parseMessage(json); Assert.assertTrue("Expected a ResponseMessage", (message instanceof ResponseMessage)); final ResponseMessage response = ((ResponseMessage) message);
@Override public String toString() { return MessageJsonHandler.toString(this); } }
/** * @param supportedMethods - a map used to resolve RPC methods in {@link #getJsonRpcMethod(String)} */ public MessageJsonHandler(Map<String, JsonRpcMethod> supportedMethods) { this.supportedMethods = supportedMethods; this.gson = getDefaultGsonBuilder().create(); }
protected Type[] getParameterTypes(String method) { if (method != null) { JsonRpcMethod jsonRpcMethod = handler.getJsonRpcMethod(method); if (jsonRpcMethod != null) return jsonRpcMethod.getParameterTypes(); } return EMPTY_TYPE_ARRAY; }
@SuppressWarnings({ "unchecked" }) @Test public void testParseEmptyList() { Map<String, JsonRpcMethod> supportedMethods = new LinkedHashMap<>(); supportedMethods.put("foo", JsonRpcMethod.request("foo", new TypeToken<List<? extends Entry>>() {}.getType(), new TypeToken<List<? extends Entry>>() {}.getType())); MessageJsonHandler handler = new MessageJsonHandler(supportedMethods); handler.setMethodProvider((id)->"foo"); Message message = handler.parseMessage("{\"jsonrpc\":\"2.0\"," + "\"id\":\"2\",\n" + " \"result\": []}"); List<Entry> result = (List<Entry>) ((ResponseMessage)message).getResult(); Assert.assertEquals(0, result.size()); }
@Override protected RemoteEndpoint createRemoteEndpoint(MessageJsonHandler jsonHandler) { MessageConsumer outgoingMessageStream = new StreamMessageConsumer(output, jsonHandler); outgoingMessageStream = wrapMessageConsumer(outgoingMessageStream); RemoteEndpoint remoteEndpoint = new DebugRemoteEndpoint(outgoingMessageStream, ServiceEndpoints.toEndpoint(localServices)); jsonHandler.setMethodProvider(remoteEndpoint); return remoteEndpoint; }
@Test public void testSerializeEmptyList() { MessageJsonHandler handler = new MessageJsonHandler(Collections.emptyMap()); NotificationMessage message = new NotificationMessage(); message.setMethod("foo"); message.setParams(Collections.EMPTY_LIST); String json = handler.serialize(message); Assert.assertEquals("{\"jsonrpc\":\"2.0\",\"method\":\"foo\",\"params\":[]}", json); }
MethodProvider methodProvider = handler.getMethodProvider(); if (methodProvider != null) { String resolvedMethod = methodProvider.resolveMethod(id); if (resolvedMethod != null) { JsonRpcMethod jsonRpcMethod = handler.getJsonRpcMethod(resolvedMethod); if (jsonRpcMethod != null) { type = jsonRpcMethod.getReturnType();
@Override public String toString() { return MessageJsonHandler.toString(this); }
/** * @param supportedMethods - a map used to resolve RPC methods in {@link #getJsonRpcMethod(String)} */ public MessageJsonHandler(Map<String, JsonRpcMethod> supportedMethods) { this.supportedMethods = supportedMethods; this.gson = getDefaultGsonBuilder().create(); }
protected Type[] getParameterTypes(String method) { if (method != null) { JsonRpcMethod jsonRpcMethod = handler.getJsonRpcMethod(method); if (jsonRpcMethod != null) return jsonRpcMethod.getParameterTypes(); } return EMPTY_TYPE_ARRAY; }
@Test public void testParamsParsing_03() { Map<String, JsonRpcMethod> supportedMethods = new LinkedHashMap<>(); supportedMethods.put("foo", JsonRpcMethod.request("foo", new TypeToken<Void>() {}.getType(), new TypeToken<Location>() {}.getType())); MessageJsonHandler handler = new MessageJsonHandler(supportedMethods); handler.setMethodProvider((id) -> "foo"); RequestMessage message = (RequestMessage) handler.parseMessage("{\"jsonrpc\":\"2.0\"," + "\"id\":\"2\",\n" + "\"method\":\"bar\",\n" + "\"params\": {\"uri\": \"dummy://mymodel.mydsl\"}\n" + "}"); Assert.assertEquals(JsonObject.class, message.getParams().getClass()); }