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")