From d6317e5c28b5c7c2de97dc0ec738651d6c8c9d39 Mon Sep 17 00:00:00 2001 From: Fu Cheng Date: Mon, 23 Sep 2024 13:17:58 +1200 Subject: [PATCH] Fix JsonReader parallel issue Parallel stream used in JsonReader causes values from different keys mingled --- .../org/springframework/ai/reader/JsonReader.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-ai-core/src/main/java/org/springframework/ai/reader/JsonReader.java b/spring-ai-core/src/main/java/org/springframework/ai/reader/JsonReader.java index 895feab7ba1..b00eace87f7 100644 --- a/spring-ai-core/src/main/java/org/springframework/ai/reader/JsonReader.java +++ b/spring-ai-core/src/main/java/org/springframework/ai/reader/JsonReader.java @@ -42,19 +42,19 @@ */ public class JsonReader implements DocumentReader { - private Resource resource; + private final Resource resource; - private JsonMetadataGenerator jsonMetadataGenerator; + private final JsonMetadataGenerator jsonMetadataGenerator; private final ObjectMapper objectMapper = new ObjectMapper(); /** * The key from the JSON that we will use as the text to parse into the Document text */ - private List jsonKeysToUse; + private final List jsonKeysToUse; public JsonReader(Resource resource) { - this(resource, new ArrayList<>().toArray(new String[0])); + this(resource, new String[0]); } public JsonReader(Resource resource, String... jsonKeysToUse) { @@ -92,9 +92,9 @@ public List get() { private Document parseJsonNode(JsonNode jsonNode, ObjectMapper objectMapper) { Map item = objectMapper.convertValue(jsonNode, new TypeReference>() { }); - StringBuffer sb = new StringBuffer(); + var sb = new StringBuilder(); - jsonKeysToUse.parallelStream().filter(item::containsKey).forEach(key -> { + jsonKeysToUse.stream().filter(item::containsKey).forEach(key -> { sb.append(key).append(": ").append(item.get(key)).append(System.lineSeparator()); });