code: protected Throwable unwrap(Throwable throwable) {
          if (throwable instanceof ExecutionException && throwable.getCause() != null) {
              return throwable.getCause();
          }
          return throwable;
      }
docs: this method should not be needed; but there is a difference between client and server how it handles async throwables