diff --git a/spring-cloud-function-context/pom.xml b/spring-cloud-function-context/pom.xml index 9abc8837d..74273869d 100644 --- a/spring-cloud-function-context/pom.xml +++ b/spring-cloud-function-context/pom.xml @@ -64,12 +64,6 @@ org.springframework.boot spring-boot-starter-test true - - - com.vaadin.external.google - android-json - - io.projectreactor @@ -112,12 +106,6 @@ 2.2.0 true - - - org.json - json - 20240303 - diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JsonMapper.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JsonMapper.java index 781181fe4..4fb91f775 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JsonMapper.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JsonMapper.java @@ -24,13 +24,14 @@ import java.util.Collection; import java.util.HashSet; import java.util.List; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.json.JSONArray; -import org.json.JSONException; -import org.json.JSONObject; import org.springframework.cloud.function.context.catalog.FunctionTypeUtils; @@ -137,33 +138,33 @@ public abstract class JsonMapper { && !value.getClass().getPackage().getName().startsWith("reactor.util.function")) { return true; } - if (value instanceof byte[]) { - value = new String((byte[]) value, StandardCharsets.UTF_8); + if (value instanceof byte[] byteValue) { + value = new String(byteValue, StandardCharsets.UTF_8); } - if (value instanceof String) { + if (value instanceof String stringValue) { try { - new JSONArray((String) value); + JsonNode node = mapper.readTree(stringValue); + return node instanceof ArrayNode; } - catch (JSONException e) { + catch (JsonProcessingException e) { return false; } - return true; } return false; } public static boolean isJsonStringRepresentsMap(Object value) { - if (value instanceof byte[]) { - value = new String((byte[]) value, StandardCharsets.UTF_8); + if (value instanceof byte[] byteValue) { + value = new String(byteValue, StandardCharsets.UTF_8); } - if (value instanceof String) { + if (value instanceof String stringValue) { try { - new JSONObject(value); + JsonNode node = mapper.readTree(stringValue); + return node instanceof ObjectNode; } - catch (JSONException e) { + catch (JsonProcessingException e) { return false; } - return true; } return false; } diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java index 5f2fb2fb9..5c9d49c95 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistryTests.java @@ -75,6 +75,7 @@ import org.springframework.messaging.converter.AbstractMessageConverter; import org.springframework.messaging.converter.ByteArrayMessageConverter; import org.springframework.messaging.converter.CompositeMessageConverter; import org.springframework.messaging.converter.MessageConverter; +import org.springframework.messaging.converter.ProtobufMessageConverter; import org.springframework.messaging.converter.StringMessageConverter; import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.MimeType; @@ -115,7 +116,7 @@ public class SimpleFunctionRegistryTests { Function getValue = msg -> msg != null ? msg.getValue() : null; Type functionType = ResolvableType.forClassWithGenerics(Function.class, ResolvableType.forClass(StringValue.class), ResolvableType.forClass(String.class)).getType(); - var catalog = new SimpleFunctionRegistry(this.conversionService, this.messageConverter, new JacksonMapper(new ObjectMapper())); + var catalog = new SimpleFunctionRegistry(this.conversionService, new CompositeMessageConverter(List.of(new ProtobufMessageConverter())), new JacksonMapper(new ObjectMapper())); catalog.register(new FunctionRegistration<>(getValue, "getValue").type(functionType)); FunctionInvocationWrapper lookedUpFunction = catalog.lookup("getValue"); @@ -129,22 +130,7 @@ public class SimpleFunctionRegistryTests { .setHeader("contentType", "application/x-protobuf") .build(); - if (stringValue.equals("aaaaaaaaaa")) { - try { - lookedUpFunction.apply(inputMessage); - } - catch (Exception ex) { - assertThat(ex).isInstanceOf(ClassCastException.class); - } - } - else { - try { - lookedUpFunction.apply(inputMessage); - } - catch (Exception ex) { - assertThat(ex).isInstanceOf(IllegalStateException.class); - } - } + assertThat(lookedUpFunction.apply(inputMessage)).isEqualTo(stringValue); } @SuppressWarnings("rawtypes")