EventDispatcher: 未注册的事件类型抛出 HandlerNotFoundException 导致 WebSocket 断连
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 48/100
- issue の種類
- バグ
- 明瞭さ
- おおむね明確
- 活発さ
- 静か
- 技術スタック
- java
- 領域
- api, backend, networking
調査の方向性
まず EventDispatcher.Builder と ws.Client.handleDataFrame を追跡し、次に HandlerNotFoundException がどのように捕捉されて 500 レスポンスに変換されるかを確認します。選択された動作が、登録されていないイベントに対するフォールバックハンドラーなのか、あるいは暗黙の成功なのかを明確にしてください。未登録の WebSocket イベントが接続を閉じることなく処理されれば完了です。
索引モデルが issue の本文から書いたものです。
説明
问题描述
当 WebSocket 长连接收到未在 EventDispatcher 中注册 handler 的事件类型时,SDK 抛出 HandlerNotFoundException。该异常在 ws.Client.handleDataFrame 中被内部 catch,SDK 发送 500 响应给飞书服务端,可能导致服务端主动断开 WebSocket 连接。
关键问题:异常在 SDK 内部被吞掉,应用层无法感知,且 SDK 没有提供 fallback handler 机制来让外部代码处理未注册的事件。
复现路径
- 使用 WebSocket 长连接模式
EventDispatcher只注册部分 IM 事件的 handler(如P2MessageReceiveV1)- 飞书服务端推送未注册的事件(如
im.message.read_v1、im.chat.member.bot.deleted_v1等) - SDK 抛出
HandlerNotFoundException→ catch → 发送 500 → 连接可能断开
期望行为
EventDispatcher.Builder提供 fallback handler 机制(如.onUnhandledEvent(handler)),让外部代码可以统一处理未注册的事件类型- 或者未注册的事件类型被静默忽略(返回 200),而非抛异常导致 500 响应
当前版本
oapi-sdk: 2.6.1
当前 workaround
在 EventDispatcher.Builder 上为所有可能的事件类型注册空 handler,但这需要手动维护,且无法覆盖 SDK 未来新增的事件类型。
// 需要手动注册所有已知事件的空 handler
EventDispatcher.newBuilder("", "")
.onP2MessageReceiveV1(handler)
.onP2MessageReactionCreatedV1(event -> {})
.onP2MessageReactionDeletedV1(event -> {})
.onP2MessageReadV1(event -> {})
.onP2MessageRecalledV1(event -> {})
.onP2ChatMemberBotAddedV1(event -> {})
.onP2ChatMemberBotDeletedV1(event -> {})
// ... 还有更多
.build();
- 主要言語
- Java
- スター
- 311
- フォーク
- 115
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
larksuite/oapi-sdk-java のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
larksuite/oapi-sdk-java#197 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
larksuite/oapi-sdk-java#196 ·
-
sdk提供的新增、更新人才接口代码和飞书招聘的接口不一致,导致接口调用失败,返回报错是类型转换失败対応中かも @CharLilis が 78 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
larksuite/oapi-sdk-java#191 ·
-
難易度 1/5 1時間未満 初心者へのやさしさ 82/100
larksuite/oapi-sdk-java#149 ·
-
接口响应类型错误オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
larksuite/oapi-sdk-java#79 ·
larksuite/oapi-sdk-java の issue をすべて見る
似ている issue
-
[BUG] Re-subscribing the Mono returned by listTools/listResources/listResourceTemplates/listPrompts/listRoots duplicates the results対応中かも このイシューにリンクされたプルリクエストがオープン中、またはマージ済みです。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
modelcontextprotocol/java-sdk#1174 · リアクション 1 件 ·
メンテナーはふだん 2 日以内に返信
-
module: core
難易度 2/5 1〜3時間 初心者へのやさしさ 77/100
bigbluebutton/bigbluebutton#26028 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
MetricsHub/metricshub-community#1390 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
apache/rocketmq-dashboard#6331 ·
メンテナーはふだん 5 日以内に返信
-
status: team-only type: dependency-upgrade
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
spring-projects/spring-boot#52143 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信