diff --git a/cs-json/pom.xml b/cs-json/pom.xml index 194b03b41c..baff780ccd 100644 --- a/cs-json/pom.xml +++ b/cs-json/pom.xml @@ -21,7 +21,7 @@ io.cloudslang.content cs-json - 0.0.19-SNAPSHOT + 0.0.20-SNAPSHOT jar ${project.groupId}:${project.artifactId} @@ -111,8 +111,17 @@ com.fasterxml.jackson.core jackson-databind + + net.minidev + json-smart + + + net.minidev + json-smart + 2.4.7 + com.google.code.gson diff --git a/cs-json/src/main/java/io/cloudslang/content/json/actions/JsonPathQuery.java b/cs-json/src/main/java/io/cloudslang/content/json/actions/JsonPathQuery.java index b402940433..6e7e16f8a1 100644 --- a/cs-json/src/main/java/io/cloudslang/content/json/actions/JsonPathQuery.java +++ b/cs-json/src/main/java/io/cloudslang/content/json/actions/JsonPathQuery.java @@ -16,7 +16,6 @@ package io.cloudslang.content.json.actions; -import com.fasterxml.jackson.databind.JsonNode; import com.hp.oo.sdk.content.annotations.Action; import com.hp.oo.sdk.content.annotations.Output; import com.hp.oo.sdk.content.annotations.Param; @@ -28,6 +27,7 @@ import io.cloudslang.content.constants.ReturnCodes; import io.cloudslang.content.json.services.JsonService; import io.cloudslang.content.json.utils.Constants; +import io.cloudslang.content.json.utils.StringUtils; import io.cloudslang.content.utils.OutputUtilities; import java.util.Map; @@ -61,8 +61,8 @@ public Map execute( @Param(value = Constants.InputNames.JSON_OBJECT, required = true) String jsonObject, @Param(value = Constants.InputNames.JSON_PATH, required = true) String jsonPath) { try { - final JsonNode jsonNode = JsonService.evaluateJsonPathQuery(jsonObject, jsonPath); - if (!jsonNode.isNull()) { + final Object jsonNode = JsonService.evaluateJsonPathQuery(jsonObject, jsonPath); + if (!StringUtils.isEmpty(jsonNode)) { return OutputUtilities.getSuccessResultsMap(jsonNode.toString()); } return OutputUtilities.getSuccessResultsMap(NULL_STRING); diff --git a/cs-json/src/main/java/io/cloudslang/content/json/services/JsonService.java b/cs-json/src/main/java/io/cloudslang/content/json/services/JsonService.java index 15e4efde57..30ad30c750 100644 --- a/cs-json/src/main/java/io/cloudslang/content/json/services/JsonService.java +++ b/cs-json/src/main/java/io/cloudslang/content/json/services/JsonService.java @@ -17,10 +17,6 @@ package io.cloudslang.content.json.services; -import com.fasterxml.jackson.databind.JsonNode; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import com.google.gson.JsonSyntaxException; import com.jayway.jsonpath.Configuration; import com.jayway.jsonpath.InvalidJsonException; @@ -41,7 +37,10 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.*; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; import static io.cloudslang.content.json.utils.Constants.InputNames.EMPTY_STRING; @@ -51,7 +50,7 @@ public class JsonService { @NotNull - public static JsonNode evaluateJsonPathQuery(@Nullable final String jsonObject, @Nullable final String jsonPath) { + public static Object evaluateJsonPathQuery(@Nullable final String jsonObject, @Nullable final String jsonPath) { final JsonContext jsonContext = JsonUtils.getValidJsonContext(jsonObject); final JsonPath path = JsonUtils.getValidJsonPath(jsonPath); return jsonContext.read(path); diff --git a/cs-json/src/main/java/io/cloudslang/content/json/utils/JsonUtils.java b/cs-json/src/main/java/io/cloudslang/content/json/utils/JsonUtils.java index 281cc8ca63..2d1cb2514a 100644 --- a/cs-json/src/main/java/io/cloudslang/content/json/utils/JsonUtils.java +++ b/cs-json/src/main/java/io/cloudslang/content/json/utils/JsonUtils.java @@ -128,8 +128,11 @@ public static JsonContext getValidJsonContext(final String jsonObject) { final AbstractJsonProvider provider = new JacksonJsonNodeJsonProvider(objectMapper); final Configuration configuration = Configuration.defaultConfiguration() .jsonProvider(provider); - final JsonContext jsonContext = new JsonContext(configuration); - jsonContext.parse(jsonObject); + + + final JsonContext jsonContext = (JsonContext) JsonPath + .using(configuration) + .parse(jsonObject); return jsonContext; } catch (IllegalArgumentException iae) { throw hammerIllegalArgumentExceptionWithMessage(INVALID_JSONOBJECT, iae); diff --git a/cs-json/src/test/java/io/cloudslang/content/json/services/JsonServiceTest.java b/cs-json/src/test/java/io/cloudslang/content/json/services/JsonServiceTest.java index 5334ff943c..52f5a01ae1 100644 --- a/cs-json/src/test/java/io/cloudslang/content/json/services/JsonServiceTest.java +++ b/cs-json/src/test/java/io/cloudslang/content/json/services/JsonServiceTest.java @@ -202,13 +202,13 @@ public void givenJsonWithEmptyElementsThenReturnEmptyJsonString() throws RemoveE @Test public void evaluateSimpleJsonPathQuery() throws Exception { - JsonNode jsonNode = JsonService.evaluateJsonPathQuery("{'key1': 'value1','key2': 'value2', 'key3': { 'key31': 'value31'}}", "$.key3.key31"); + Object jsonNode = JsonService.evaluateJsonPathQuery("{'key1': 'value1','key2': 'value2', 'key3': { 'key31': 'value31'}}", "$.key3.key31"); assertEquals(jsonNode.toString(), "\"value31\""); } @Test public void evaluateComplexJsonPathQuery() throws Exception { - JsonNode jsonNode = JsonService.evaluateJsonPathQuery("{ \"store\": {\n" + + Object jsonNode = JsonService.evaluateJsonPathQuery("{ \"store\": {\n" + " \"book\": [ \n" + " { \"category\": \"reference\",\n" + " \"author\": \"Nigel Rees\",\n" +