-
- final OnComplete<Object> onComplete = new OnComplete<Object>() {
- @Override
- public void onComplete(final Throwable failure, final Object reply) throws Throwable {
- if(failure != null) {
- LOG.error("InvokeRpc failed", failure);
-
- final String message = String.format("Execution of RPC %s failed", rpcMsg.getRpc());
- Collection<RpcError> errors = ((RpcErrorsException)failure).getRpcErrors();
- if(errors == null || errors.size() == 0) {
- errors = Arrays.asList(RpcResultBuilder.newError(ErrorType.RPC, null, message));
- }
- final DOMRpcResult rpcResult = new DefaultDOMRpcResult(errors);
-
- settableFuture.set(rpcResult);
- return;
- }
-
- final RpcResponse rpcReply = (RpcResponse)reply;
- final NormalizedNode<?, ?> result =
- NormalizedNodeSerializer.deSerialize(rpcReply.getResultNormalizedNode());
- settableFuture.set(new DefaultDOMRpcResult(result));
- }
- };
-
-
- future.onComplete(onComplete, ExecutionContext.Implicits$.MODULE$.global());
- // FIXME find non blocking way for implementation
- try {
- return Futures.immediateCheckedFuture(listenableFuture.get());
- }
- catch (InterruptedException | ExecutionException e) {
- LOG.debug("Unexpected remote RPC exception.", e);
- return Futures.immediateFailedCheckedFuture((DOMRpcException) new DOMRpcImplementationNotAvailableException(e, "Unexpected remote RPC exception"));
- }