- public void onComplete(final Throwable failure, final Object reply) throws Throwable {
- if(failure != null) {
-
- // When we return a failure to the caller they can choose to log it if they like
- // so here we just do basic warn logging by default and log the stack trace only when debug
- // is enabled
-
- LOG.warn("InvokeRpc failed rpc = {}, identifier = {}", rpcMsg.getRpc(), rpcMsg.getIdentifier());
-
- if(LOG.isDebugEnabled()){
- LOG.debug("Detailed Error", failure);
- }
-
- final String message = String.format("Execution of RPC %s failed because of %s",
- rpcMsg.getRpc(), failure.getMessage());
- Collection<RpcError> errors = Arrays.asList(RpcResultBuilder.newError(ErrorType.RPC, null, message));
- if(failure instanceof RpcErrorsException) {
- 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;
-
- if(rpcReply.getResultNormalizedNode() == null){
- result = null;
- LOG.debug("Received response for invoke rpc : {} result is null", rpcMsg.getRpc());