From 2d80f21e3f40b44319ecd6eafd3e7a6e042cb3ab Mon Sep 17 00:00:00 2001 From: CodeCaster Date: Mon, 29 Dec 2025 16:42:14 +0800 Subject: [PATCH 1/2] chore: upgrade fastjson to fastjson2 (v2.0.60) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Migrate from fastjson 1.2.83 to fastjson2 2.0.60 for improved performance and security. - Add fastjson2 dependency version management in framework/dependency/pom.xml - Update fit-value-fastjson plugin to use fastjson2 artifact - Update JSONPath import from com.alibaba.fastjson to com.alibaba.fastjson2 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- framework/dependency/pom.xml | 6 ++++++ .../fit-builtin/plugins/fit-value-fastjson/pom.xml | 10 ++-------- .../fit/value/fastjson/FastJsonValueHandler.java | 2 +- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/framework/dependency/pom.xml b/framework/dependency/pom.xml index f4451160..a76f5a50 100644 --- a/framework/dependency/pom.xml +++ b/framework/dependency/pom.xml @@ -55,6 +55,7 @@ 1.18.2 1.2.25 1.2.83 + 2.0.60 32.0.1-jre portable-1.8.4 1.18.36 @@ -465,6 +466,11 @@ fastjson ${fastjson.version} + + com.alibaba.fastjson2 + fastjson2 + ${fastjson2.version} + com.fasterxml.jackson.core jackson-annotations diff --git a/framework/fit/java/fit-builtin/plugins/fit-value-fastjson/pom.xml b/framework/fit/java/fit-builtin/plugins/fit-value-fastjson/pom.xml index 8b21e0b6..7890d3ac 100644 --- a/framework/fit/java/fit-builtin/plugins/fit-value-fastjson/pom.xml +++ b/framework/fit/java/fit-builtin/plugins/fit-value-fastjson/pom.xml @@ -17,11 +17,6 @@ https://github.com/ModelEngine-Group/fit-framework - - - 1.2.83 - - @@ -35,9 +30,8 @@ - com.alibaba - fastjson - ${fastjson.version} + com.alibaba.fastjson2 + fastjson2 diff --git a/framework/fit/java/fit-builtin/plugins/fit-value-fastjson/src/main/java/modelengine/fit/value/fastjson/FastJsonValueHandler.java b/framework/fit/java/fit-builtin/plugins/fit-value-fastjson/src/main/java/modelengine/fit/value/fastjson/FastJsonValueHandler.java index c54bb2cb..3073a83f 100644 --- a/framework/fit/java/fit-builtin/plugins/fit-value-fastjson/src/main/java/modelengine/fit/value/fastjson/FastJsonValueHandler.java +++ b/framework/fit/java/fit-builtin/plugins/fit-value-fastjson/src/main/java/modelengine/fit/value/fastjson/FastJsonValueHandler.java @@ -6,7 +6,7 @@ package modelengine.fit.value.fastjson; -import com.alibaba.fastjson.JSONPath; +import com.alibaba.fastjson2.JSONPath; import modelengine.fitframework.annotation.Component; import modelengine.fitframework.util.StringUtils; From e08cb48da81835aaad1b63c25d07fbbab9a00bd3 Mon Sep 17 00:00:00 2001 From: CodeCaster Date: Mon, 29 Dec 2025 19:47:01 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20HttpToolTest=20?= =?UTF-8?q?=E4=B8=AD=20JSON=20=E5=AD=97=E7=AC=A6=E4=B8=B2=E5=A4=84?= =?UTF-8?q?=E7=90=86=E6=96=B9=E5=BC=8F=E5=B9=B6=E5=AE=8C=E5=96=84=20API=20?= =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改 HttpToolTest 测试类,将 Tool.execute() 的字符串参数改为使用 ObjectSerializer 反序列化后的 Map 对象,避免依赖 fastjson 的自动 JSON 解析行为。 同时在 ValueFetcher 和 ValueSetter 的 JavaDoc 中明确说明:当参数为 String 时, 默认按普通字符串处理,不会自动解析 JSON 文本。如需从 JSON 字符串中取值或设置属性, 调用方应先使用 ObjectSerializer 将其反序列化为对象。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Sonnet 4.5 --- .../fel/tool/support/HttpToolTest.java | 22 ++++++++++++++----- .../fitframework/value/ValueFetcher.java | 3 +++ .../fitframework/value/ValueSetter.java | 3 +++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/HttpToolTest.java b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/HttpToolTest.java index 09bd7702..d0607be2 100644 --- a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/HttpToolTest.java +++ b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/HttpToolTest.java @@ -25,6 +25,7 @@ import modelengine.fitframework.util.IoUtils; import modelengine.fitframework.util.MapBuilder; import modelengine.fitframework.util.StringUtils; +import modelengine.fitframework.util.TypeUtils; import modelengine.fitframework.value.ValueFetcher; import org.junit.jupiter.api.AfterAll; @@ -34,6 +35,7 @@ import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.Type; import java.net.ServerSocket; import java.net.URL; import java.util.HashMap; @@ -124,6 +126,12 @@ private static Tool createTool(Tool.Info info) { return factory.create(info, toolMetadata); } + private static Map deserializeJsonObject(String json) { + ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null, true); + Type objectType = TypeUtils.parameterized(Map.class, new Type[] {String.class, Object.class}); + return jsonSerializer.deserialize(json, objectType); + } + @Test @DisplayName("测试返回值为 Map 成功") void shouldReturnMap() { @@ -186,7 +194,8 @@ void BasicShouldReturnOk() { Tool.Info info = readToolInfo("basic-auth.json"); Tool tool = createTool(info); - boolean result = cast(tool.execute("{\"name\":\"testuser\", \"pwd\":\"testpass\"}")); + Map args = deserializeJsonObject("{\"name\":\"testuser\", \"pwd\":\"testpass\"}"); + boolean result = cast(tool.execute(args)); assertThat(result).isEqualTo(true); } @@ -196,7 +205,8 @@ void ApiKeyShouldReturnOk() { Tool.Info info = readToolInfo("api-key-auth.json"); Tool tool = createTool(info); - boolean result = cast(tool.execute("{\"name\":\"ApiKey\", \"pwd\":\"ApiKeyValue\"}")); + Map args = deserializeJsonObject("{\"name\":\"ApiKey\", \"pwd\":\"ApiKeyValue\"}"); + boolean result = cast(tool.execute(args)); assertThat(result).isEqualTo(true); } @@ -206,7 +216,8 @@ void ApiKeyQueryShouldReturnOk() { Tool.Info info = readToolInfo("api-key-query-auth.json"); Tool tool = createTool(info); - boolean result = cast(tool.execute("{\"name\":\"ApiKey\", \"pwd\":\"ApiKeyValue\"}")); + Map args = deserializeJsonObject("{\"name\":\"ApiKey\", \"pwd\":\"ApiKeyValue\"}"); + boolean result = cast(tool.execute(args)); assertThat(result).isEqualTo(true); } @@ -216,7 +227,8 @@ void BearerShouldReturnOk() { Tool.Info info = readToolInfo("bearer-auth.json"); Tool tool = createTool(info); - boolean result = cast(tool.execute("{\"name\":\"test666666666\", \"pwd\":\"invalid\"}")); + Map args = deserializeJsonObject("{\"name\":\"test666666666\", \"pwd\":\"invalid\"}"); + boolean result = cast(tool.execute(args)); assertThat(result).isEqualTo(true); } -} \ No newline at end of file +} diff --git a/framework/fit/java/fit-api/src/main/java/modelengine/fitframework/value/ValueFetcher.java b/framework/fit/java/fit-api/src/main/java/modelengine/fitframework/value/ValueFetcher.java index 4e9f21d3..f087b00f 100644 --- a/framework/fit/java/fit-api/src/main/java/modelengine/fitframework/value/ValueFetcher.java +++ b/framework/fit/java/fit-api/src/main/java/modelengine/fitframework/value/ValueFetcher.java @@ -40,6 +40,9 @@ public interface ValueFetcher { * +---------------------+--------------+---------------------+ * * 任意输入对象都可以转换为键值对的形式。 + *

注意:当 {@code object} 为 {@link String} 时,默认按普通字符串处理,不会自动解析 JSON 文本。 + * 如果需要从 JSON 字符串中取值,请调用方先使用 {@link modelengine.fitframework.serialization.ObjectSerializer} + * 将其反序列化为对象,再调用本方法。

* * @param object 表示指定对象的 {@link Object}。 * @param propertyPath 表示待获取属性的路径的 {@link String}。 diff --git a/framework/fit/java/fit-api/src/main/java/modelengine/fitframework/value/ValueSetter.java b/framework/fit/java/fit-api/src/main/java/modelengine/fitframework/value/ValueSetter.java index ba55b6e8..ebd31dc8 100644 --- a/framework/fit/java/fit-api/src/main/java/modelengine/fitframework/value/ValueSetter.java +++ b/framework/fit/java/fit-api/src/main/java/modelengine/fitframework/value/ValueSetter.java @@ -41,6 +41,9 @@ public interface ValueSetter { * +---------------------+--------------+-------+----------------------+ * * 任意输入对象都可以转换为键值对的形式。 + *

注意:当 {@code object} 为 {@link String} 时,默认按普通字符串处理,不会自动解析 JSON 文本。 + * 如果需要在 JSON 字符串上设置属性,请调用方先使用 {@link modelengine.fitframework.serialization.ObjectSerializer} + * 将其反序列化为对象,再调用本方法。

* * @param object 表示指定对象的 {@link Object}。 * @param propertyPath 表示待替换属性的路径的 {@link String}。