Skip to content

Commit 53cd256

Browse files
committed
feat: restore okhttp3-extension 2.0.x.20260630 dep + sync WS enhancements from 1.0.x
- Restore okhttp3-extension dependency (release 2.0.x.20260630) - OpenClawDebugConfig: restore HttpLogLevel from okhttp3-extension - Sync all WS protocol enhancements, debug config, integration tests
1 parent fc727e5 commit 53cd256

3 files changed

Lines changed: 64 additions & 21 deletions

File tree

‎pom.xml‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -473,6 +473,7 @@
473473
<junit-jupiter.version>5.11.4</junit-jupiter.version>
474474
<lombok.version>1.18.46</lombok.version>
475475
<okhttp3.version>4.12.0</okhttp3.version>
476+
<okhttp3-extension.version>2.0.x.20260630</okhttp3-extension.version>
476477
<slf4j.version>2.0.18</slf4j.version>
477478
<!-- Maven Plugin versions -->
478479
<maven-central-publishing-plugin.version>0.11.0</maven-central-publishing-plugin.version>
@@ -513,6 +514,12 @@
513514
<artifactId>mockwebserver</artifactId>
514515
<version>${okhttp3.version}</version>
515516
</dependency>
517+
<!-- For OkHttp Extension -->
518+
<dependency>
519+
<groupId>io.github.easy4j</groupId>
520+
<artifactId>okhttp3-extension</artifactId>
521+
<version>${okhttp3-extension.version}</version>
522+
</dependency>
516523
<!-- For Websocket -->
517524
<dependency>
518525
<groupId>org.java-websocket</groupId>
@@ -613,5 +620,10 @@
613620
<artifactId>mockwebserver</artifactId>
614621
<scope>test</scope>
615622
</dependency>
623+
<!-- For OkHttp Extension -->
624+
<dependency>
625+
<groupId>io.github.easy4j</groupId>
626+
<artifactId>okhttp3-extension</artifactId>
627+
</dependency>
616628
</dependencies>
617629
</project>
Lines changed: 43 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,21 @@
11
package io.github.easy4j.openclaw;
22

33
import lombok.Data;
4+
import okhttp3.extension.logging.HttpLogLevel;
45

56
/**
67
* OpenClaw SDK 统一调试配置,用于控制生命周期、请求头和正文日志。
78
*
89
* <p>调试默认关闭。正文日志始终受长度限制,认证头和敏感令牌仍由客户端脱敏。</p>
910
*
10-
* <p>{@link #level} 字段使用字符串表示日志级别。可选值:
11+
* <p>{@link #level} 使用 {@link HttpLogLevel} 表示日志级别。可选值:
1112
* <ul>
1213
* <li>{@code "NONE"} — 不输出</li>
1314
* <li>{@code "BASIC"} — 仅方法/路径/状态/耗时</li>
1415
* <li>{@code "HEADERS"} — BASIC + 请求/响应头</li>
1516
* <li>{@code "BODY"} — HEADERS + 请求/响应正文(受 {@link #maxContentLength} 限制)</li>
1617
* </ul>
17-
* 当 classpath 上有 {@code io.github.easy4j:okhttp3-extension} 时,{@link #level} 会按相同语义传递给底层日志拦截器;否则仅用于 SDK 自身 DEBUG 输出。</p>
18+
* 该类型继续作为 SDK 的公共 API,避免升级 SDK 后破坏既有调用方的源码和二进制兼容性。</p>
1819
*
1920
* @author <a href="https://github.com/loong10k">Loong Wan</a>
2021
* @since 1.0.0
@@ -25,26 +26,47 @@ public class OpenClawDebugConfig {
2526
/** 是否允许 SDK 输出调试诊断信息。 */
2627
private boolean enabled;
2728

28-
/**
29-
* 启用调试后的详细程度;字符串常量,对齐 {@code okhttp3.extension.logging.HttpLogLevel}。
30-
*/
31-
private String level = "BASIC";
29+
/** 启用调试后的详细程度。 */
30+
private HttpLogLevel level = HttpLogLevel.BASIC;
3231

3332
/** BODY 级别单项正文允许记录的最大字符数。 */
3433
private int maxContentLength = 2_000;
3534

3635
/**
3736
* 判断指定级别的日志是否允许输出。
38-
* <p>简单的字符串排序:{@code NONE &lt; BASIC &lt; HEADERS &lt; BODY}。</p>
37+
* @param required 待输出信息要求的最低级别
38+
* @return 调试已启用且当前级别满足要求时返回 {@code true}
39+
*/
40+
public boolean allows(HttpLogLevel required) {
41+
return enabled && level != null && required != null && level.allows(required);
42+
}
43+
44+
/**
45+
* 兼容短期使用字符串级别的调用方。
3946
*
40-
* @param required 待输出信息要求的最低级别(字符串)
47+
* @param required 待输出信息要求的最低级别名称
4148
* @return 调试已启用且当前级别满足要求时返回 {@code true}
4249
*/
4350
public boolean allows(String required) {
44-
if (!enabled || level == null || required == null) {
45-
return false;
46-
}
47-
return rank(level) >= rank(required);
51+
return required != null && allows(resolveLevel(required));
52+
}
53+
54+
/**
55+
* 设置日志级别,保持旧版 SDK 公共 API 的源码与二进制兼容性。
56+
*
57+
* @param level 日志级别
58+
*/
59+
public void setLevel(HttpLogLevel level) {
60+
this.level = level;
61+
}
62+
63+
/**
64+
* 兼容 Spring 配置及短期使用字符串级别的调用方。
65+
*
66+
* @param level 日志级别名称
67+
*/
68+
public void setLevel(String level) {
69+
this.level = resolveLevel(level);
4870
}
4971

5072
/**
@@ -56,13 +78,14 @@ public int resolveMaxContentLength() {
5678
return Math.max(1, maxContentLength);
5779
}
5880

59-
private static int rank(String level) {
60-
switch (level.toUpperCase()) {
61-
case "BODY": return 3;
62-
case "HEADERS": return 2;
63-
case "BASIC": return 1;
64-
case "NONE": return 0;
65-
default: return 1;
81+
private static HttpLogLevel resolveLevel(String level) {
82+
if (level == null) {
83+
return HttpLogLevel.BASIC;
84+
}
85+
try {
86+
return HttpLogLevel.valueOf(level.trim().toUpperCase());
87+
} catch (IllegalArgumentException ex) {
88+
return HttpLogLevel.BASIC;
6689
}
6790
}
68-
}
91+
}

‎src/test/java/io/github/easy4j/openclaw/OpenClawHttpClientConfigTest.java‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.easy4j.openclaw;
22

3+
import okhttp3.extension.logging.HttpLogLevel;
34
import org.junit.jupiter.api.Test;
45

56
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -11,7 +12,14 @@ void debugLoggingIsOptIn() {
1112
OpenClawHttpClientConfig config = new OpenClawHttpClientConfig();
1213
org.junit.jupiter.api.Assertions.assertFalse(config.getDebug().isEnabled());
1314
org.junit.jupiter.api.Assertions.assertEquals(2_000, config.getDebug().getMaxContentLength());
14-
org.junit.jupiter.api.Assertions.assertEquals("BASIC",
15+
org.junit.jupiter.api.Assertions.assertEquals(HttpLogLevel.BASIC,
16+
config.getDebug().getLevel());
17+
18+
config.getDebug().setLevel(HttpLogLevel.BODY);
19+
org.junit.jupiter.api.Assertions.assertEquals(HttpLogLevel.BODY,
20+
config.getDebug().getLevel());
21+
config.getDebug().setLevel("HEADERS");
22+
org.junit.jupiter.api.Assertions.assertEquals(HttpLogLevel.HEADERS,
1523
config.getDebug().getLevel());
1624
}
1725

0 commit comments

Comments
 (0)