Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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("测试序列化嵌入请求成功")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<File> fileSource = new JsonFileSource(serializer, StringTemplate.create("{{instruction}}\n{{output}}"));
URL url = this.getClass().getClassLoader().getResource("test.json");
File file = FileUtils.file(url);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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()));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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")));
Expand All @@ -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),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<ToolEntity> toolEntities =
serializer.<Map<String, List<ToolEntity>>>deserialize(IoUtils.content(this.getClass().getClassLoader(),
ToolSchema.TOOL_MANIFEST), TypeUtils.parameterized(Map.class, new Type[] {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, ObjectSerializer> serializers =
MapBuilder.<String, ObjectSerializer>get().put("json", jsonSerializer).build();
ValueFetcher valueFetcher = new FastJsonValueHandler();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -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);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ private List<PropertyValueApplier> createAppliers() {
}

private HttpClassicClient createHttpClient() {
ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null);
ObjectSerializer jsonSerializer = new JacksonObjectSerializer(null, null, null, true);
Map<String, ObjectSerializer> serializers =
MapBuilder.<String, ObjectSerializer>get().put("json", jsonSerializer).build();
ValueFetcher valueFetcher = new FastJsonValueHandler();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.");
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 格式的字符串。
Expand All @@ -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.Std> visibilityChecker = VisibilityChecker.Std.defaultInstance()
.withFieldVisibility(JsonAutoDetect.Visibility.ANY)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
Expand All @@ -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
Expand Down Expand Up @@ -124,16 +127,20 @@ public <T> T deserialize(InputStream in, Charset charset, Type objectType, Map<S
notNull(in, "The input stream cannot be null.");
Type actualType = ObjectUtils.nullIf(objectType, Object.class);
Map<String, Object> actualContext = ObjectUtils.getIfNull(context, Collections::emptyMap);
String read = null;
try {
String read;
if (actualContext.containsKey("length")) {
read = IoUtils.content(in, ObjectUtils.<Integer>cast(actualContext.get("length")));
} else {
read = IoUtils.content(in);
}
return this.mapper.readValue(read, this.mapper.constructType(actualType));
} catch (IOException e) {
throw new SerializationException("Failed to deserialize by Jackson.", e);
String message = "Failed to deserialize by Jackson.";
if (this.isDebug) {
message += " [content=" + read + "]";
}
throw new SerializationException(message, e);
}
}

Expand All @@ -143,7 +150,7 @@ public <T> T deserialize(InputStream in, Charset charset, Type objectType, Map<S
*
* @return 表示 Jackson 的核心序列化器的 {@link ObjectMapper}。
*/
public ObjectMapper getMapper() {
public ObjectMapper mapper() {
return this.mapper;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,14 @@
*/
@DisplayName("测试 JacksonMessageSerializer")
public class JacksonMessageSerializerTest {
private final Properties properties = new Properties();
private final Config config = new PropertiesConfig("test", properties);
private JacksonMessageSerializer messageSerializer;
private Properties properties = new Properties();
private Config config = new PropertiesConfig("test", properties);

@BeforeEach
void setup() {
this.messageSerializer = new JacksonMessageSerializer(
new JacksonObjectSerializer(null, null, null),
this.config);
this.messageSerializer =
new JacksonMessageSerializer(new JacksonObjectSerializer(null, null, null, true), this.config);
}

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
package modelengine.fit.serialization.json.jackson;

import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowableOfType;

import modelengine.fit.serialization.test.enums.Gender;
import modelengine.fit.serialization.test.person.Person;
Expand All @@ -16,6 +17,7 @@
import modelengine.fit.serialization.test.person.PersonName;
import modelengine.fit.serialization.test.person.PersonTransient;
import modelengine.fitframework.serialization.ObjectSerializer;
import modelengine.fitframework.serialization.SerializationException;
import modelengine.fitframework.util.MapBuilder;

import org.assertj.core.api.InstanceOfAssertFactories;
Expand Down Expand Up @@ -52,7 +54,7 @@ public class JacksonObjectSerializerTest {

@BeforeEach
void setup() {
this.jsonSerializer = new JacksonObjectSerializer(null, null, "America/New_York");
this.jsonSerializer = new JacksonObjectSerializer(null, null, "America/New_York", true);
}

@AfterEach
Expand Down Expand Up @@ -185,6 +187,17 @@ void givenZonedDateTimeSerializedThenResultIsLocalDateTime() {
assertThat(actual).isEqualTo(expected);
}

@Test
@DisplayName("当输入错误的 Json 数据时,返回合适的错误信息")
void givenWrongJsonThenReturnErrorMessage() {
InputStream in = new ByteArrayInputStream("{\"Hello\"}".getBytes());
SerializationException cause = catchThrowableOfType(SerializationException.class,
() -> 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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<String, ObjectSerializer> serializers =
MapBuilder.<String, ObjectSerializer>get().put("json", jsonSerializer).build();
ValueFetcher valueFetcher = new FastJsonValueHandler();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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<String, ObjectSerializer> serializers =
MapBuilder.<String, ObjectSerializer>get().put("json", jsonSerializer).build();
ValueFetcher valueFetcher = new FastJsonValueHandler();
}

@AfterEach
Expand Down