Skip to content

Bug: OAuthClient.execute 方法中的冗余异常抛出 #154

@enginesunyan

Description

@enginesunyan

问题描述

OAuthClient.javaexecute 方法中,第 259 行的 throw new CozeAuthException(error, e, e.code(), logID) 存在冗余的异常抛出逻辑。

// 第 228-265 行
protected static <T> T execute(Single<Response<T>> apiCall) {
  try {
    Response<T> response = apiCall.blockingGet();
    if (!response.isSuccessful()) {
      try (ResponseBody errorBody = response.errorBody()) {
        if (errorBody == null) {
          throw new HttpException(response);
        }
        String logID = Utils.getLogID(response);
        String errStr = errorBody.string();
        CozeError error = mapper.readValue(errStr, CozeError.class);
        throw new CozeAuthException(error, new HttpException(response), response.code(), logID); // 第239行:第一次处理已抛出
      } catch (IOException ex) {
        throw new HttpException(response);
      }
    }
    // ...
  } catch (HttpException e) { // 第249行
    try (ResponseBody errorBody = e.response().errorBody()) {
      if (errorBody == null) {
        throw e;
      }
      String logID = Utils.getLogID(e.response());
      String errStr = e.response().errorBody().string();
      CozeError error = mapper.readValue(errStr, CozeError.class);
      throw new CozeAuthException(error, e, e.code(), logID); // 第259行:冗余的第二次处理
    } catch (IOException ex) {
      throw e;
    }
  }
}

问题分析

  1. 第 239 行已经对非成功响应进行了错误解析并抛出 CozeAuthException,而第 249-263 行的 catch (HttpException e) 块又再次进行了相同的错误解析并抛出 CozeAuthException

  2. 第 259 行的 throw new CozeAuthException 会导致应用无法正常捕获该异常。

  3. 当第一次解析成功时,第239行的 CozeAuthException 会直接传播出去,不会进入第249行的捕获块;

建议修改

去掉第 249-263 行的 catch (HttpException e) 块,去掉第259行的 throw new CozeAuthException(error, e, e.code(), logID),因为这段代码是冗余的。第一次处理已经足够,不需要重复解析。

影响版本

影响所有版本

文件位置

api/src/main/java/com/coze/openapi/service/auth/OAuthClient.java 第 249-263 行

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions