coze-dev / coze-dev/coze-java

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

オープン 初心者向け
#154 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Java
スター
214
フォーク
98
PR マージ指標
30日以内にマージされた PR はありません

説明

## 问题描述

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

```java
// 第 228-265 行
protected static T execute(Single> apiCall) {
try {
Response 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 行

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

api/src/main/java/com/coze/openapi/service/auth/OAuthClient.java から始め、228-265 行目と execute エントリーポイントに注目してください。成功しなかったレスポンスと HttpException がどのように処理されているかを確認し、issue に記載された冗長な処理を削除して、認証エラーが引き続き正しく伝播することを確認するためにリポジトリの既存テストを実行してください。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
java
領域
api, authentication
issue の種類
バグ
難易度
2/5
見積もり時間
1〜3時間
活発さ
静か
明瞭さ
明確に書かれている
初心者へのやさしさ
82/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。