From 6c8c490bd3cf2072f0adfab774ff91f608523f8b Mon Sep 17 00:00:00 2001 From: matevip Date: Mon, 25 May 2026 21:36:33 +0800 Subject: [PATCH] chore(feishu): bump oapi-sdk to 2.7.1 and replace WS-close reflection with public API --- .../channel/feishu/FeishuChannelAdapter.java | 20 +++++-------------- pom.xml | 2 +- 2 files changed, 6 insertions(+), 16 deletions(-) diff --git a/mateclaw-server/src/main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java b/mateclaw-server/src/main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java index cf452cf5..417a25be 100644 --- a/mateclaw-server/src/main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java +++ b/mateclaw-server/src/main/java/vip/mate/channel/feishu/FeishuChannelAdapter.java @@ -554,14 +554,9 @@ public class FeishuChannelAdapter extends AbstractChannelAdapter implements Stre * 释放 ExecutorService)。仅置空引用会导致旧连接的 pingLoop 和线程池 * 持续运行,造成文件描述符和线程泄漏,最终使新连接无法建立。 *

- * 走 SDK 内部 {@code disconnect()} 这条单一入口完成 cleanup —— 它本身就是 - * SDK 在 {@code onClosed} 回调里调用的方法,包含 - * {@code conn.close(1000) → executor.shutdown() → 字段清零} 的全套动作。 - * 该方法在 SDK 2.6.1 中是 {@code protected},外部需通过反射 + setAccessible - * 调用;SDK 2.7.1 起新增了 public {@code close()},届时整段反射可以删除。 - *

- * 反射失败(例如未来 SDK 重命名 {@code disconnect})以 WARN 级别记录而非 - * 静默吞掉,避免泄漏在升级后悄无声息地复发。 + * SDK 2.7.0 起暴露了 public {@code close()} 入口,内部调用 protected + * {@code disconnect()} 完成 {@code conn.close(1000) → executor.shutdown() → + * 字段清零} 的全套清理。直接调用即可,无需反射。 */ private void stopWebSocket() { cancelSilentDisconnectWatchdog(); @@ -572,14 +567,9 @@ public class FeishuChannelAdapter extends AbstractChannelAdapter implements Stre } if (wsClient != null) { try { - var disconnect = wsClient.getClass().getDeclaredMethod("disconnect"); - disconnect.setAccessible(true); - disconnect.invoke(wsClient); - } catch (NoSuchMethodException e) { - log.warn("[feishu] SDK Client.disconnect() not found — WebSocket cleanup skipped, " - + "leak may recur until SDK API is re-verified: {}", e.getMessage()); + wsClient.close(); } catch (Exception e) { - log.warn("[feishu] WebSocket disconnect failed: {}", e.getMessage()); + log.warn("[feishu] WebSocket close failed: {}", e.getMessage()); } } wsClient = null; diff --git a/pom.xml b/pom.xml index a3243fdb..0aa01b39 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ 1.3.12 - 2.6.1 + 2.7.1 6.4.1 1.48.1