From cbf675a12ec869af69fc4405cfc6c9631c425680 Mon Sep 17 00:00:00 2001 From: Owais Kazi Date: Wed, 3 Apr 2024 17:31:55 -0700 Subject: [PATCH] Use jsonB instead of jackson (#586) * Use jsonB instead of jackson Signed-off-by: Owais Kazi * Resolve Jar Hell with newest versions and jakarta dependencies Signed-off-by: Daniel Widdis --------- Signed-off-by: Owais Kazi Signed-off-by: Daniel Widdis Co-authored-by: Daniel Widdis --- build.gradle | 5 ++-- .../flowframework/util/ParseUtils.java | 30 +++++++++---------- .../flowframework/util/ParseUtilsTests.java | 2 +- 3 files changed, 19 insertions(+), 18 deletions(-) diff --git a/build.gradle b/build.gradle index e81d2b5e7..cccb272b4 100644 --- a/build.gradle +++ b/build.gradle @@ -175,8 +175,9 @@ dependencies { implementation 'com.amazonaws:aws-encryption-sdk-java:2.4.1' implementation 'org.bouncycastle:bcprov-jdk18on:1.77' api "org.apache.httpcomponents.core5:httpcore5:5.2.2" - implementation("com.fasterxml.jackson.core:jackson-annotations:${versions.jackson}") - implementation("com.fasterxml.jackson.core:jackson-databind:${versions.jackson_databind}") + implementation "jakarta.json.bind:jakarta.json.bind-api:3.0.0" + implementation "org.glassfish:jakarta.json:2.0.1" + implementation "org.eclipse:yasson:3.0.3" // ZipArchive dependencies used for integration tests zipArchive group: 'org.opensearch.plugin', name:'opensearch-ml-plugin', version: "${opensearch_build}" diff --git a/src/main/java/org/opensearch/flowframework/util/ParseUtils.java b/src/main/java/org/opensearch/flowframework/util/ParseUtils.java index 40b4ed43e..f7a1da0d4 100644 --- a/src/main/java/org/opensearch/flowframework/util/ParseUtils.java +++ b/src/main/java/org/opensearch/flowframework/util/ParseUtils.java @@ -8,9 +8,6 @@ */ package org.opensearch.flowframework.util; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; - import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.opensearch.client.Client; @@ -46,6 +43,9 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; +import jakarta.json.bind.Jsonb; +import jakarta.json.bind.JsonbBuilder; + import static org.opensearch.core.xcontent.XContentParserUtils.ensureExpectedToken; import static org.opensearch.flowframework.common.CommonValue.PARAMETERS_FIELD; import static org.opensearch.flowframework.common.WorkflowResources.MODEL_ID; @@ -57,14 +57,11 @@ public class ParseUtils { private static final Logger logger = LogManager.getLogger(ParseUtils.class); // Matches ${{ foo.bar }} (whitespace optional) with capturing groups 1=foo, 2=bar - // private static final Pattern SUBSTITUTION_PATTERN = Pattern.compile("\\$\\{\\{\\s*(.+)\\.(.+?)\\s*\\}\\}"); private static final Pattern SUBSTITUTION_PATTERN = Pattern.compile("\\$\\{\\{\\s*([\\w_]+)\\.([\\w_]+)\\s*\\}\\}"); private static final Pattern JSON_ARRAY_DOUBLE_QUOTES_PATTERN = Pattern.compile("\"\\[(.*?)]\""); private ParseUtils() {} - private static final ObjectMapper mapper = new ObjectMapper(); - /** * Converts a JSON string into an XContentParser * @@ -414,12 +411,12 @@ public static Object conditionallySubstitute(Object value, Map map) throws JsonProcessingException { - // Convert the map to a JSON string - String mappedString = mapper.writeValueAsString(map); - return mappedString; + public static String parseArbitraryStringToObjectMapToString(Map map) throws Exception { + try (Jsonb jsonb = JsonbBuilder.create()) { + return jsonb.toJson(map); + } } /** @@ -427,12 +424,15 @@ public static String parseArbitraryStringToObjectMapToString(Map * * @param path file path * @return instance of the string - * @throws JsonProcessingException JsonProcessingException from Jackson for issues processing map + * @throws Exception for issues processing map */ - public static Map parseJsonFileToStringToStringMap(String path) throws IOException { + public static Map parseJsonFileToStringToStringMap(String path) throws Exception { String jsonContent = resourceToString(path); - Map mappedJsonFile = mapper.readValue(jsonContent, Map.class); - return mappedJsonFile; + try (Jsonb jsonb = JsonbBuilder.create()) { + @SuppressWarnings("unchecked") + Map resultMap = jsonb.fromJson(jsonContent, Map.class); + return resultMap; + } } /** diff --git a/src/test/java/org/opensearch/flowframework/util/ParseUtilsTests.java b/src/test/java/org/opensearch/flowframework/util/ParseUtilsTests.java index 92406b3e7..7ece1e463 100644 --- a/src/test/java/org/opensearch/flowframework/util/ParseUtilsTests.java +++ b/src/test/java/org/opensearch/flowframework/util/ParseUtilsTests.java @@ -84,7 +84,7 @@ public void testBuildAndParseStringToStringMap() throws IOException { assertEquals(stringMap.get("one"), parsedMap.get("one")); } - public void testParseArbitraryStringToObjectMapToString() throws IOException { + public void testParseArbitraryStringToObjectMapToString() throws Exception { Map map = Map.ofEntries(Map.entry("test-1", Map.of("test-1", "test-1"))); String parsedMap = ParseUtils.parseArbitraryStringToObjectMapToString(map); assertEquals("{\"test-1\":{\"test-1\":\"test-1\"}}", parsedMap);