diff --git a/framework/fel/java/fel-community/model-openai/src/test/java/modelengine/fel/community/model/openai/entity/chat/OpenAiChatEntityTest.java b/framework/fel/java/fel-community/model-openai/src/test/java/modelengine/fel/community/model/openai/entity/chat/OpenAiChatEntityTest.java index c1774263..69fc16f8 100644 --- a/framework/fel/java/fel-community/model-openai/src/test/java/modelengine/fel/community/model/openai/entity/chat/OpenAiChatEntityTest.java +++ b/framework/fel/java/fel-community/model-openai/src/test/java/modelengine/fel/community/model/openai/entity/chat/OpenAiChatEntityTest.java @@ -38,7 +38,7 @@ */ @DisplayName("测试 openai 聊天请求相关数据结构序列化与反序列化") public class OpenAiChatEntityTest { - private static final ObjectSerializer SERIALIZER = new JacksonObjectSerializer(null, null, null); + private static final ObjectSerializer SERIALIZER = new JacksonObjectSerializer(null, null, null, true); @Nested class ChatMessageTest { diff --git a/framework/fel/java/fel-community/model-openai/src/test/java/modelengine/fel/community/model/openai/entity/embed/OpenAiEmbedEntityTest.java b/framework/fel/java/fel-community/model-openai/src/test/java/modelengine/fel/community/model/openai/entity/embed/OpenAiEmbedEntityTest.java index b38e2620..829c93a9 100644 --- a/framework/fel/java/fel-community/model-openai/src/test/java/modelengine/fel/community/model/openai/entity/embed/OpenAiEmbedEntityTest.java +++ b/framework/fel/java/fel-community/model-openai/src/test/java/modelengine/fel/community/model/openai/entity/embed/OpenAiEmbedEntityTest.java @@ -25,7 +25,7 @@ */ @DisplayName("测试 openai 嵌入请求相关数据结构序列化与反序列化") public class OpenAiEmbedEntityTest { - private static final ObjectSerializer SERIALIZER = new JacksonObjectSerializer(null, null, null); + private static final ObjectSerializer SERIALIZER = new JacksonObjectSerializer(null, null, null, true); @Test @DisplayName("测试序列化嵌入请求成功") diff --git a/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/format/json/JsonOutputParserTest.java b/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/format/json/JsonOutputParserTest.java index 22af887d..0fee102d 100644 --- a/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/format/json/JsonOutputParserTest.java +++ b/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/format/json/JsonOutputParserTest.java @@ -37,7 +37,7 @@ */ @DisplayName(("测试 JsonOutputParser")) public class JsonOutputParserTest { - private static final ObjectSerializer TEST_SERIALIZER = new JacksonObjectSerializer(null, null, null); + private static final ObjectSerializer TEST_SERIALIZER = new JacksonObjectSerializer(null, null, null, true); static class Joke { @Property(description = "question to set up a joke") diff --git a/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/source/support/JsonFileSourceTest.java b/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/source/support/JsonFileSourceTest.java index 0ded3699..b86108b7 100644 --- a/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/source/support/JsonFileSourceTest.java +++ b/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/source/support/JsonFileSourceTest.java @@ -33,7 +33,7 @@ public class JsonFileSourceTest { @Test @DisplayName("测试读取 json 文件成功,结果符合预期") void giveExistFileThenReturnOk() { - ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null, true); Source fileSource = new JsonFileSource(serializer, StringTemplate.create("{{instruction}}\n{{output}}")); URL url = this.getClass().getClassLoader().getResource("test.json"); File file = FileUtils.file(url); diff --git a/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/vectorstore/support/MemoryVectorStoreTest.java b/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/vectorstore/support/MemoryVectorStoreTest.java index 582ff14d..57fc3a8f 100644 --- a/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/vectorstore/support/MemoryVectorStoreTest.java +++ b/framework/fel/java/fel-core/src/test/java/modelengine/fel/core/vectorstore/support/MemoryVectorStoreTest.java @@ -47,7 +47,7 @@ void shouldOkWhenAddDocumentsThenSearch() { @Test @DisplayName("插入文档后,持久化后重新加载成功") void shouldOkWhenPersistThenLoad() throws IOException { - ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null, true); MemoryVectorStore vectorStore = new MemoryVectorStore(new DefaultDocumentEmbedModel(new EmbedModelStub(), EmbedOption.custom().build())); diff --git a/framework/fel/java/maven-plugins/tool-maven-plugin/src/main/java/modelengine/fel/maven/complie/plugin/UrlClassLoaderInitializer.java b/framework/fel/java/maven-plugins/tool-maven-plugin/src/main/java/modelengine/fel/maven/complie/plugin/UrlClassLoaderInitializer.java index 60be6dbf..a4635c7f 100644 --- a/framework/fel/java/maven-plugins/tool-maven-plugin/src/main/java/modelengine/fel/maven/complie/plugin/UrlClassLoaderInitializer.java +++ b/framework/fel/java/maven-plugins/tool-maven-plugin/src/main/java/modelengine/fel/maven/complie/plugin/UrlClassLoaderInitializer.java @@ -74,12 +74,9 @@ public void outputToolManifest(String outputDirectory, ToolJsonEntity toolJsonEn return; } File jsonFile = Paths.get(outputDirectory, ToolSchema.TOOL_MANIFEST).toFile(); - JacksonObjectSerializer serializer = new JacksonObjectSerializer( - DEFAULT_DATE_TIME_FORMAT, - DEFAULT_DATE_FORMAT, - "Asia/Shanghai" - ); - ObjectMapper objectMapper = serializer.getMapper().copy(); + JacksonObjectSerializer serializer = + new JacksonObjectSerializer(DEFAULT_DATE_TIME_FORMAT, DEFAULT_DATE_FORMAT, "Asia/Shanghai", false); + ObjectMapper objectMapper = serializer.mapper().copy(); objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); objectMapper.writerWithDefaultPrettyPrinter().writeValue(jsonFile, toolJsonEntity); log.info("Write tool json successfully. [file={}]", jsonFile.getName()); diff --git a/framework/fel/java/plugins/tool-discoverer/src/test/java/modelengine/fel/tool/support/DefaultToolDiscovererTest.java b/framework/fel/java/plugins/tool-discoverer/src/test/java/modelengine/fel/tool/support/DefaultToolDiscovererTest.java index 51591600..408d0b50 100644 --- a/framework/fel/java/plugins/tool-discoverer/src/test/java/modelengine/fel/tool/support/DefaultToolDiscovererTest.java +++ b/framework/fel/java/plugins/tool-discoverer/src/test/java/modelengine/fel/tool/support/DefaultToolDiscovererTest.java @@ -66,7 +66,7 @@ void tearDown() { @DisplayName("测试自动装载工具") void shouldOkWhenInstallTools() { doNothing().when(this.toolRepository).addTool(any()); - ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null, true); DefaultToolDiscoverer toolDiscoverer = new DefaultToolDiscoverer(this.toolRepository, serializer, 64); toolDiscoverer.onPluginStarted(this.plugin); verify(this.toolRepository, times(1)).addTool(argThat(tool -> tool.name().equals("get_delivery_date"))); @@ -76,7 +76,7 @@ void shouldOkWhenInstallTools() { @DisplayName("测试自动卸载工具") void shouldOkWhenUninstallTools() { doNothing().when(this.toolRepository).deleteTool(any(), any()); - ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null, true); DefaultToolDiscoverer toolDiscoverer = new DefaultToolDiscoverer(this.toolRepository, serializer, 64); toolDiscoverer.onPluginStopping(this.plugin); verify(this.toolRepository, times(1)).deleteTool(argThat(group -> true), diff --git a/framework/fel/java/plugins/tool-executor/src/test/java/modelengine/fel/tool/support/DefaultToolExecutorTest.java b/framework/fel/java/plugins/tool-executor/src/test/java/modelengine/fel/tool/support/DefaultToolExecutorTest.java index 3492cd13..a6c585ea 100644 --- a/framework/fel/java/plugins/tool-executor/src/test/java/modelengine/fel/tool/support/DefaultToolExecutorTest.java +++ b/framework/fel/java/plugins/tool-executor/src/test/java/modelengine/fel/tool/support/DefaultToolExecutorTest.java @@ -53,7 +53,7 @@ public class DefaultToolExecutorTest { private ToolRepository toolRepository; private ToolFactoryRepository toolFactoryRepository; private ToolFactory toolFactory; - private final ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null); + private final ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null, true); @BeforeEach void setUp() { diff --git a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/FitToolTest.java b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/FitToolTest.java index 1fcb2068..b83e7410 100644 --- a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/FitToolTest.java +++ b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/FitToolTest.java @@ -56,7 +56,7 @@ void setUp() throws IOException { } throw new IllegalStateException("Error"); }); - ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null, true); List toolEntities = serializer.>>deserialize(IoUtils.content(this.getClass().getClassLoader(), ToolSchema.TOOL_MANIFEST), TypeUtils.parameterized(Map.class, new Type[] { 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 01d5c238..6f607476 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 @@ -113,7 +113,7 @@ private static Tool.Info readToolInfo(String fileName) { } private static Tool createTool(Tool.Info info) { - ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null, true); Map serializers = MapBuilder.get().put("json", jsonSerializer).build(); ValueFetcher valueFetcher = new FastJsonValueHandler(); diff --git a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/MethodToolMetadataTest.java b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/MethodToolMetadataTest.java index 3779210d..e6556901 100644 --- a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/MethodToolMetadataTest.java +++ b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/MethodToolMetadataTest.java @@ -58,7 +58,7 @@ public class MethodToolMetadataTest { MethodToolMetadataTest() throws NoSuchMethodException { this.testMethod = TestInterface.class.getDeclaredMethod("testMethod", String.class); - this.serializer = new JacksonObjectSerializer(null, null, null); + this.serializer = new JacksonObjectSerializer(null, null, null, true); } @BeforeEach diff --git a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/SchemaToolMetadataTest.java b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/SchemaToolMetadataTest.java index 71b9721d..743bf65b 100644 --- a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/SchemaToolMetadataTest.java +++ b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/SchemaToolMetadataTest.java @@ -59,7 +59,7 @@ public class SchemaToolMetadataTest { private Tool tool; private Tool.Metadata toolMetadata; - private final ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null); + private final ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null, true); @BeforeEach void setup() { @@ -82,7 +82,7 @@ void setup() { this.toolSchema = this.buildSchema(); this.definitionSchema = this.buildDefinitionSchema(); this.toolMetadata = Tool.Metadata.fromSchema(DEFINITION_GROUP_NAME, this.definitionSchema); - ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer serializer = new JacksonObjectSerializer(null, null, null, true); FitToolFactory fitToolFactory = new FitToolFactory(client, serializer); this.tool = fitToolFactory.create(this.buildInfo(), this.toolMetadata); } diff --git a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/http/HttpClientTest.java b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/http/HttpClientTest.java index 3c34b230..89f0474f 100644 --- a/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/http/HttpClientTest.java +++ b/framework/fel/java/services/tool-service/src/test/java/modelengine/fel/tool/support/http/HttpClientTest.java @@ -189,7 +189,7 @@ private List createAppliers() { } private HttpClassicClient createHttpClient() { - ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null, true); Map serializers = MapBuilder.get().put("json", jsonSerializer).build(); ValueFetcher valueFetcher = new FastJsonValueHandler(); diff --git a/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/main/java/modelengine/fit/serialization/json/jackson/JacksonMessageSerializer.java b/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/main/java/modelengine/fit/serialization/json/jackson/JacksonMessageSerializer.java index 9ee84ef7..2fc09dee 100644 --- a/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/main/java/modelengine/fit/serialization/json/jackson/JacksonMessageSerializer.java +++ b/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/main/java/modelengine/fit/serialization/json/jackson/JacksonMessageSerializer.java @@ -50,7 +50,7 @@ public class JacksonMessageSerializer implements MessageSerializer { public JacksonMessageSerializer(@Fit(alias = "jackson") ObjectSerializer serializer, Config config) { this.serializer = notNull(serializer, "The Jackson serializer cannot be null."); JacksonObjectSerializer jacksonObjectSerializer = cast(this.serializer); - this.mapper = jacksonObjectSerializer.getMapper(); + this.mapper = jacksonObjectSerializer.mapper(); this.config = notNull(config, "The message serializer config cannot be null."); } diff --git a/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/main/java/modelengine/fit/serialization/json/jackson/JacksonObjectSerializer.java b/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/main/java/modelengine/fit/serialization/json/jackson/JacksonObjectSerializer.java index aac622dc..7310354c 100644 --- a/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/main/java/modelengine/fit/serialization/json/jackson/JacksonObjectSerializer.java +++ b/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/main/java/modelengine/fit/serialization/json/jackson/JacksonObjectSerializer.java @@ -66,6 +66,7 @@ public class JacksonObjectSerializer implements ObjectSerializer { public static final String DEFAULT_DATE_FORMAT = "yyyy-MM-dd"; private final ObjectMapper mapper; + private final boolean isDebug; /** * 序列化对象为 Json 格式的字符串。 @@ -75,7 +76,8 @@ public class JacksonObjectSerializer implements ObjectSerializer { * @param zoneId 表示时区唯一标识的 {@link String}。 */ public JacksonObjectSerializer(@Value("${date-time-format}") String dateTimeFormat, - @Value("${date-format}") String dateFormat, @Value("${time-zone}") String zoneId) { + @Value("${date-format}") String dateFormat, @Value("${time-zone}") String zoneId, + @Value("${fit.debug:false}") boolean isDebug) { VisibilityChecker visibilityChecker = VisibilityChecker.Std.defaultInstance() .withFieldVisibility(JsonAutoDetect.Visibility.ANY) .withGetterVisibility(JsonAutoDetect.Visibility.NONE) @@ -96,6 +98,7 @@ public JacksonObjectSerializer(@Value("${date-time-format}") String dateTimeForm module.addSerializer(LocalDate.class, new LocalDateSerializer(dateFormat)); module.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateFormat)); this.mapper.registerModule(module); + this.isDebug = isDebug; } @Override @@ -124,8 +127,8 @@ public T deserialize(InputStream in, Charset charset, Type objectType, Map actualContext = ObjectUtils.getIfNull(context, Collections::emptyMap); + String read = null; try { - String read; if (actualContext.containsKey("length")) { read = IoUtils.content(in, ObjectUtils.cast(actualContext.get("length"))); } else { @@ -133,7 +136,11 @@ public T deserialize(InputStream in, Charset charset, Type objectType, Map T deserialize(InputStream in, Charset charset, Type objectType, Map JacksonObjectSerializerTest.this.jsonSerializer.deserialize(in, + JacksonObjectSerializerTest.this.charset, + String.class)); + assertThat(cause).hasMessage("Failed to deserialize by Jackson. [content={\"Hello\"}]"); + } + private InputStream constructInputStream(Object obj) { byte[] serialized = JacksonObjectSerializerTest.this.jsonSerializer.serialize(obj, JacksonObjectSerializerTest.this.charset); diff --git a/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/test/java/modelengine/fit/serialization/json/jackson/MessageSerializerGenericableTest.java b/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/test/java/modelengine/fit/serialization/json/jackson/MessageSerializerGenericableTest.java index 19ef0563..a6be65bd 100644 --- a/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/test/java/modelengine/fit/serialization/json/jackson/MessageSerializerGenericableTest.java +++ b/framework/fit/java/fit-builtin/plugins/fit-message-serializer-json-jackson/src/test/java/modelengine/fit/serialization/json/jackson/MessageSerializerGenericableTest.java @@ -34,14 +34,14 @@ */ @DisplayName("测试 MessageSerializer 的基本测试用例") public class MessageSerializerGenericableTest { - private Properties properties = new Properties(); - private Config config = new PropertiesConfig("test", properties); + private final Properties properties = new Properties(); + private final Config config = new PropertiesConfig("test", properties); private final MessageSerializerTest test = new MessageSerializerTest(() -> new JacksonMessageSerializer(new JacksonObjectSerializer(null, null, - null), - this.config)); + null, + true), this.config)); @BeforeEach void setup() { diff --git a/framework/fit/java/fit-test/fit-test-framework/src/main/java/modelengine/fitframework/test/domain/mvc/HttpClientFactory.java b/framework/fit/java/fit-test/fit-test-framework/src/main/java/modelengine/fitframework/test/domain/mvc/HttpClientFactory.java index f1676ee1..bb17b28b 100644 --- a/framework/fit/java/fit-test/fit-test-framework/src/main/java/modelengine/fitframework/test/domain/mvc/HttpClientFactory.java +++ b/framework/fit/java/fit-test/fit-test-framework/src/main/java/modelengine/fitframework/test/domain/mvc/HttpClientFactory.java @@ -33,7 +33,7 @@ public class HttpClientFactory { * @return 表示用于模拟测试的 {@link HttpClassicClient}。 */ public static HttpClassicClient create() { - ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null); + ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null, true); Map serializers = MapBuilder.get().put("json", jsonSerializer).build(); ValueFetcher valueFetcher = new FastJsonValueHandler(); diff --git a/framework/ohscript/src/test/java/modelengine/fit/ohscript/external/HttpTest.java b/framework/ohscript/src/test/java/modelengine/fit/ohscript/external/HttpTest.java index 650b3333..ac153b16 100644 --- a/framework/ohscript/src/test/java/modelengine/fit/ohscript/external/HttpTest.java +++ b/framework/ohscript/src/test/java/modelengine/fit/ohscript/external/HttpTest.java @@ -18,12 +18,7 @@ import modelengine.fit.ohscript.script.parser.GrammarBuilder; import modelengine.fit.ohscript.script.parser.ParserBuilder; import modelengine.fit.ohscript.util.OhScriptReader; -import modelengine.fit.serialization.json.jackson.JacksonObjectSerializer; -import modelengine.fit.value.fastjson.FastJsonValueHandler; -import modelengine.fitframework.serialization.ObjectSerializer; -import modelengine.fitframework.util.MapBuilder; import modelengine.fitframework.util.ObjectUtils; -import modelengine.fitframework.value.ValueFetcher; import org.assertj.core.api.InstanceOfAssertFactories; import org.junit.jupiter.api.AfterEach; @@ -59,11 +54,6 @@ void setup() { GrammarBuilder grammarBuilder = new GrammarBuilder(); Lexer lexer = new Lexer(); this.parserBuilder = new ParserBuilder(grammarBuilder, lexer); - - ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null); - Map serializers = - MapBuilder.get().put("json", jsonSerializer).build(); - ValueFetcher valueFetcher = new FastJsonValueHandler(); } @AfterEach