ResponseMessage responseMessage = (ResponseMessage) message; out.name("id"); writeId(out, responseMessage.getRawId()); if (responseMessage.getError() != null) { out.name("error"); gson.toJson(responseMessage.getError(), ResponseError.class, out); } else { out.name("result"); Object result = responseMessage.getResult(); if (result == null) writeNullValue(out);
protected Message createMessage(String jsonrpc, Either<String, Number> id, String method, Object params, Object responseResult, ResponseError responseError) throws JsonParseException { if (id != null && method != null) { RequestMessage message = new RequestMessage(); message.setJsonrpc(jsonrpc); message.setRawId(id); message.setMethod(method); message.setParams(params); return message; } else if (id != null) { ResponseMessage message = new ResponseMessage(); message.setJsonrpc(jsonrpc); message.setRawId(id); if (responseError != null) message.setError(responseError); else message.setResult(responseResult); return message; } else if (method != null) { NotificationMessage message = new NotificationMessage(); message.setJsonrpc(jsonrpc); message.setMethod(method); message.setParams(params); return message; } else { throw new JsonParseException("Unable to identify the input message."); } }
protected void handleResponse(ResponseMessage responseMessage) { PendingRequestInfo requestInfo; synchronized (sentRequestMap) { requestInfo = sentRequestMap.remove(responseMessage.getId()); } if (requestInfo == null) { // We have no pending request information that matches the id given in the response LOG.log(Level.WARNING, "Unmatched response message: " + responseMessage); } else if (responseMessage.getError() != null) { // The remote service has replied with an error requestInfo.future.completeExceptionally(new ResponseErrorException(responseMessage.getError())); } else { // The remote service has replied with a result object requestInfo.future.complete(responseMessage.getResult()); } }
protected ResponseMessage createResponseMessage(RequestMessage requestMessage) { ResponseMessage responseMessage = new ResponseMessage(); responseMessage.setRawId(requestMessage.getRawId()); responseMessage.setJsonrpc(MessageConstants.JSONRPC_VERSION); return responseMessage; }
@Test public void testInitResponse() { ResponseMessage _responseMessage = new ResponseMessage(); final Procedure1<ResponseMessage> _function = (ResponseMessage it) -> { it.setJsonrpc("2.0"); it.setId(12); InitializeResult _initializeResult = new InitializeResult(); final Procedure1<InitializeResult> _function_1 = (InitializeResult it_1) -> { }; InitializeResult _doubleArrow = ObjectExtensions.<InitializeResult>operator_doubleArrow(_initializeResult, _function_1); it.setResult(_doubleArrow); }; final ResponseMessage message = ObjectExtensions.<ResponseMessage>operator_doubleArrow(_responseMessage, _function);
@Test public void testErrorResponse_AllOrders() { Map<String, JsonRpcMethod> supportedMethods = new LinkedHashMap<>(); supportedMethods.put("foo", JsonRpcMethod.request("foo", new TypeToken<Location>() {}.getType(), new TypeToken<Void>() { }.getType())); MessageJsonHandler handler = new MessageJsonHandler(supportedMethods); handler.setMethodProvider((id) -> "foo"); String[] properties = new String[] { "\"jsonrpc\":\"2.0\"", "\"id\":2", "\"message\": \"failed\"", "\"error\": {\"code\": 123456, \"message\": \"failed\", \"data\": {\"uri\": \"failed\"}}" }; testAllPermutations(properties, json -> { ResponseMessage message = (ResponseMessage) handler.parseMessage(json); Assert.assertEquals("failed", message.getError().getMessage()); Object data = message.getError().getData(); JsonObject expected = new JsonObject(); expected.addProperty("uri", "failed"); Assert.assertEquals(expected, data); Assert.assertNull(message.getResult()); }); }
@Test public void testRequest() { TestEndpoint endp = new TestEndpoint(); TestMessageConsumer consumer = new TestMessageConsumer(); RemoteEndpoint endpoint = new DebugRemoteEndpoint(consumer, endp); endpoint.consume(new RequestMessage() {{ setId("1"); setMethod("foo"); setParams("myparam"); }}); Entry<RequestMessage, CompletableFuture<Object>> entry = endp.requests.entrySet().iterator().next(); entry.getValue().complete("success"); assertEquals("foo", entry.getKey().getMethod()); assertEquals("myparam", entry.getKey().getParams()); assertEquals("success", ((ResponseMessage)consumer.messages.get(0)).getResult()); }
@Test public void testResponseError() { ResponseMessage _responseMessage = new ResponseMessage(); final Procedure1<ResponseMessage> _function = (ResponseMessage it) -> { it.setJsonrpc("2.0"); it.setId("12"); ResponseError _responseError = new ResponseError(); final Procedure1<ResponseError> _function_1 = (ResponseError it_1) -> { }; ResponseError _doubleArrow = ObjectExtensions.<ResponseError>operator_doubleArrow(_responseError, _function_1); it.setError(_doubleArrow); }; final ResponseMessage message = ObjectExtensions.<ResponseMessage>operator_doubleArrow(_responseMessage, _function);
@Test public void testExceptionInCompletableFuture() throws Exception { TestEndpoint endp = new TestEndpoint(); TestMessageConsumer consumer = new TestMessageConsumer(); RemoteEndpoint endpoint = new RemoteEndpoint(consumer, endp); CompletableFuture<Object> future = endpoint.request("foo", "myparam"); CompletableFuture<Void> chained = future.thenAccept(result -> { throw new RuntimeException("BAAZ"); }); endpoint.consume(init(new ResponseMessage(), it -> { it.setId("1"); it.setResult("Bar"); })); try { chained.get(TIMEOUT, TimeUnit.MILLISECONDS); Assert.fail("Expected an ExecutionException."); } catch (ExecutionException exception) { assertEquals("java.lang.RuntimeException: BAAZ", exception.getMessage()); } }
@Test public void testNullResponse() { ResponseMessage _responseMessage = new ResponseMessage(); final Procedure1<ResponseMessage> _function = (ResponseMessage it) -> { it.setJsonrpc("2.0"); it.setId("12"); }; final ResponseMessage message = ObjectExtensions.<ResponseMessage>operator_doubleArrow(_responseMessage, _function); StringConcatenation _builder = new StringConcatenation(); _builder.append("{"); _builder.newLine(); _builder.append(" "); _builder.append("\"jsonrpc\": \"2.0\","); _builder.newLine(); _builder.append(" "); _builder.append("\"id\": \"12\","); _builder.newLine(); _builder.append(" "); _builder.append("\"result\": null"); _builder.newLine(); _builder.append("}"); _builder.newLine(); this.assertSerialize(message, _builder); } }
@Test public void testRequest1() { TestEndpoint endp = new TestEndpoint(); TestMessageConsumer consumer = new TestMessageConsumer(); RemoteEndpoint endpoint = new RemoteEndpoint(consumer, endp); endpoint.consume(init(new RequestMessage(), it -> { it.setId("1"); it.setMethod("foo"); it.setParams("myparam"); })); Entry<RequestMessage, CompletableFuture<Object>> entry = endp.requests.entrySet().iterator().next(); entry.getValue().complete("success"); assertEquals("foo", entry.getKey().getMethod()); assertEquals("myparam", entry.getKey().getParams()); ResponseMessage responseMessage = (ResponseMessage) consumer.messages.get(0); assertEquals("success", responseMessage.getResult()); assertEquals(Either.forLeft("1"), responseMessage.getRawId()); }
@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()); }
protected ResponseMessage createResultResponseMessage(RequestMessage requestMessage, Object result) { ResponseMessage responseMessage = createResponseMessage(requestMessage); responseMessage.setResult(result); return responseMessage; }
protected ResponseMessage createErrorResponseMessage(RequestMessage requestMessage, ResponseError errorObject) { ResponseMessage responseMessage = createResponseMessage(requestMessage); responseMessage.setError(errorObject); return responseMessage; }
protected void handleResponseIssues(ResponseMessage responseMessage, List<MessageIssue> issues) { PendingRequestInfo requestInfo; synchronized (sentRequestMap) { requestInfo = sentRequestMap.remove(responseMessage.getId()); } if (requestInfo == null) { // We have no pending request information that matches the id given in the response LOG.log(Level.WARNING, "Unmatched response message: " + responseMessage); logIssues(responseMessage, issues); } else { requestInfo.future.completeExceptionally(new MessageIssueException(responseMessage, issues)); } }
_builder.append("}"); _builder.newLine(); ResponseMessage _responseMessage = new ResponseMessage(); final Procedure1<ResponseMessage> _function_1 = (ResponseMessage it) -> { it.setJsonrpc("2.0"); it.setId("12"); Hover _hover = new Hover(); final Procedure1<Hover> _function_2 = (Hover it_1) -> { }; Hover _doubleArrow = ObjectExtensions.<Hover>operator_doubleArrow(_hover, _function_2); it.setResult(_doubleArrow); }; ResponseMessage _doubleArrow = ObjectExtensions.<ResponseMessage>operator_doubleArrow(_responseMessage, _function_1);
@Test public void testMissingSuccessResponse_AllOrders() { Map<String, JsonRpcMethod> supportedMethods = new LinkedHashMap<>(); supportedMethods.put("foo", JsonRpcMethod.request("foo", new TypeToken<Location>() {}.getType(), new TypeToken<Void>() { }.getType())); DebugMessageJsonHandler handler = new DebugMessageJsonHandler(supportedMethods); handler.setMethodProvider((id) -> "foo"); String[] properties = new String[] { "\"seq\":2", "\"type\":\"response\"", "\"request_seq\":5", "\"message\": \"failed\"", "\"body\": {\"uri\": \"failed\"}" }; testAllPermutations(properties, json -> { ResponseMessage message = (ResponseMessage) handler.parseMessage(json); Assert.assertEquals("failed", message.getError().getMessage()); Object data = message.getError().getData(); Map<String, String> expected = new HashMap<>(); expected.put("uri", "failed"); Assert.assertEquals(expected, data); Assert.assertNull(message.getResult()); }); }
@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()); }
_builder.append("}"); _builder.newLine(); ResponseMessage _responseMessage = new ResponseMessage(); final Procedure1<ResponseMessage> _function_1 = (ResponseMessage it) -> { it.setJsonrpc("2.0"); it.setId("12"); ResponseError _responseError = new ResponseError(); final Procedure1<ResponseError> _function_2 = (ResponseError it_1) -> { }; ResponseError _doubleArrow = ObjectExtensions.<ResponseError>operator_doubleArrow(_responseError, _function_2); it.setError(_doubleArrow); }; ResponseMessage _doubleArrow = ObjectExtensions.<ResponseMessage>operator_doubleArrow(_responseMessage, _function_1);
@Test public void testInvalidCodeLens() { ResponseMessage message = new ResponseMessage(); message.setId("1"); CodeLens codeLens = new CodeLens(new Range(new Position(3, 32), new Position(3, 35)), null, null); // forbidden self reference! codeLens.setData(codeLens); message.setResult(codeLens); assertIssues(message, "An element of the message has a direct or indirect reference to itself."); }