Преобразовать функцию в завершаемую с пользовательскими исключениями - PullRequest
0 голосов
/ 07 марта 2020

У меня есть служба vertx для всех операций, связанных с брокером сообщений. Например, функция создания обмена выглядит так:

@Override
    public BrokerService createExchange(String exchange, 
    Handler<AsyncResult<JsonArray>> resultHandler) {
        try {
            getAdminChannel(exchange).exchangeDeclare(exchange, "topic", true);
            resultHandler.handle(Future.succeededFuture());
        } catch(Exception e) {
            e.printStackTrace();
            resultHandler.handle(Future.failedFuture(e.getCause()));
        }
        return this;
    }

Я нахожусь в процессе преобразования всей моей кодовой базы в rx java, и я хотел бы преобразовать подобные функции в завершаемые. Что-то вроде:

try {
    getAdminChannel(exchange).exchangeDeclare(exchange, "topic", true);
    Completable.complete();
} catch(Exception e) {
    Completable.error(new BrokerErrorThrowable("Exchange creation failed"));
}

Кроме того, я также хотел бы иметь возможность выдавать пользовательские ошибки, такие как Completable.error(new BrokerErrorThrowable("Exchange creation failed")), когда что-то не так. Это сделано для того, чтобы я мог отлавливать эти ошибки и отвечать соответствующими HTTP-ответами.

Я видел, что Completable.fromCallable() - это один из способов сделать это, но я не нашел способа выбросить эти пользовательские исключения. Как я go об этом? Заранее спасибо!

1 Ответ

0 голосов
/ 12 марта 2020

Я смог понять это. Все, что мне нужно было сделать, это:

@Override
  public BrokerService createExchange(String exchange, Handler<AsyncResult<Void>> resultHandler) {
    Completable.fromCallable(
            () -> {
              try {
                getAdminChannel(exchange).exchangeDeclare(exchange, "topic", true);
                return Completable.complete();
              } catch (Exception e) {
                return Completable.error(new InternalErrorThrowable("Create exchange failed"));
              }
            })
        .subscribe(CompletableHelper.toObserver(resultHandler));

    return this;
  }
...