/** * Resolve an RPC method by name. */ public JsonRpcMethod getJsonRpcMethod(String name) { JsonRpcMethod result = supportedMethods.get(name); if (result != null) return result; else if (CANCEL_METHOD.getMethodName().equals(name)) return CANCEL_METHOD; return null; }
/** * Resolve an RPC method by name. */ public JsonRpcMethod getJsonRpcMethod(String name) { JsonRpcMethod result = supportedMethods.get(name); if (result != null) return result; else if (CANCEL_METHOD.getMethodName().equals(name)) return CANCEL_METHOD; return null; }
/** * Cancellation is handled inside this class and not forwarded to the local endpoint. * * @return {@code true} if the given message is a cancellation notification, * {@code false} if it can be handled by the local endpoint */ protected boolean handleCancellation(NotificationMessage notificationMessage) { if (MessageJsonHandler.CANCEL_METHOD.getMethodName().equals(notificationMessage.getMethod())) { Object cancelParams = notificationMessage.getParams(); if (cancelParams != null) { if (cancelParams instanceof CancelParams) { synchronized (receivedRequestMap) { String id = ((CancelParams) cancelParams).getId(); CompletableFuture<?> future = receivedRequestMap.get(id); if (future != null) future.cancel(true); else LOG.warning("Unmatched cancel notification for request id " + id); } return true; } else { LOG.warning("Cancellation support is disabled, since the '" + MessageJsonHandler.CANCEL_METHOD.getMethodName() + "' method has been registered explicitly."); } } else { LOG.warning("Missing 'params' attribute of cancel notification."); } } return false; }
/** * Cancellation is handled inside this class and not forwarded to the local endpoint. * * @return {@code true} if the given message is a cancellation notification, * {@code false} if it can be handled by the local endpoint */ protected boolean handleCancellation(NotificationMessage notificationMessage) { if (MessageJsonHandler.CANCEL_METHOD.getMethodName().equals(notificationMessage.getMethod())) { Object cancelParams = notificationMessage.getParams(); if (cancelParams != null) { if (cancelParams instanceof CancelParams) { synchronized (receivedRequestMap) { String id = ((CancelParams) cancelParams).getId(); CompletableFuture<?> future = receivedRequestMap.get(id); if (future != null) future.cancel(true); else LOG.warning("Unmatched cancel notification for request id " + id); } return true; } else { LOG.warning("Cancellation support is disabled, since the '" + MessageJsonHandler.CANCEL_METHOD.getMethodName() + "' method has been registered explicitly."); } } else { LOG.warning("Missing 'params' attribute of cancel notification."); } } return false; }
Map<String, JsonRpcMethod> supportedDelegateMethods = getSupportedMethods(method.getReturnType(), visitedTypes); for (JsonRpcMethod meth : supportedDelegateMethods.values()) { if (result.put(meth.getMethodName(), meth) != null) { throw new IllegalStateException("Duplicate RPC method "+meth.getMethodName()+"."); };
Map<String, JsonRpcMethod> supportedDelegateMethods = getSupportedMethods(method.getReturnType(), visitedTypes); for (JsonRpcMethod meth : supportedDelegateMethods.values()) { if (result.put(meth.getMethodName(), meth) != null) { throw new IllegalStateException("Duplicate RPC method "+meth.getMethodName()+"."); };
protected void sendCancelNotification(Either<String, Number> id) { CancelParams cancelParams = new CancelParams(); cancelParams.setRawId(id); notify(MessageJsonHandler.CANCEL_METHOD.getMethodName(), cancelParams); }
protected void sendCancelNotification(Either<String, Number> id) { CancelParams cancelParams = new CancelParams(); cancelParams.setRawId(id); notify(MessageJsonHandler.CANCEL_METHOD.getMethodName(), cancelParams); }
@Test public void testRpcMethods_01() { Map<String, JsonRpcMethod> methods = ServiceEndpoints.getSupportedMethods(Foo.class); assertEquals("foo/doStuff", methods.get("foo/doStuff").getMethodName()); assertEquals(String.class, methods.get("foo/doStuff").getParameterTypes()[0]); assertFalse(methods.get("foo/doStuff").isNotification()); assertEquals("foo/myNotification", methods.get("foo/myNotification").getMethodName()); assertEquals(String.class, methods.get("foo/myNotification").getParameterTypes()[0]); assertTrue(methods.get("foo/myNotification").isNotification()); assertEquals("hubba", methods.get("hubba").getMethodName()); assertEquals(String.class, methods.get("hubba").getParameterTypes()[0]); assertTrue(methods.get("hubba").isNotification()); }
@Test public void testIssue107() { Map<String, JsonRpcMethod> methods = ServiceEndpoints.getSupportedMethods(StringConsumer.class); final JsonRpcMethod method = methods.get("consumer/accept"); assertEquals("consumer/accept", method.getMethodName()); assertEquals(1, method.getParameterTypes().length); assertEquals(String.class, method.getParameterTypes()[0]); assertTrue(method.isNotification()); }
@Test public void testRpcMethods_02() { Map<String, JsonRpcMethod> methods = ServiceEndpoints.getSupportedMethods(Bar.class); final JsonRpcMethod requestMethod = methods.get("bar/doStuff2"); assertEquals("bar/doStuff2", requestMethod.getMethodName()); assertEquals(2, requestMethod.getParameterTypes().length); assertEquals(String.class, requestMethod.getParameterTypes()[0]); assertEquals(Integer.class, requestMethod.getParameterTypes()[1]); assertFalse(requestMethod.isNotification()); final JsonRpcMethod notificationMethod = methods.get("bar/myNotification2"); assertEquals("bar/myNotification2", notificationMethod.getMethodName()); assertEquals(2, notificationMethod.getParameterTypes().length); assertEquals(String.class, notificationMethod.getParameterTypes()[0]); assertEquals(Integer.class, notificationMethod.getParameterTypes()[1]); assertTrue(notificationMethod.isNotification()); final JsonRpcMethod delegateMethod = methods.get("hubba"); assertEquals("hubba", delegateMethod.getMethodName()); assertEquals(2, delegateMethod.getParameterTypes().length); assertEquals(String.class, delegateMethod.getParameterTypes()[0]); assertEquals(Integer.class, delegateMethod.getParameterTypes()[1]); assertTrue(delegateMethod.isNotification()); }