From 52f1f04020f50860b00dcc7ac9b5974c3c6c88e3 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 1 Oct 2019 14:06:17 -0400 Subject: [PATCH] GH-395 Add support for non-message json to be converted as POJO Resolves #395 --- .../catalog/BeanFactoryAwareFunctionRegistry.java | 10 +++++++++- .../catalog/BeanFactoryAwareFunctionRegistryTests.java | 10 ++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java index ad555fd57..200c804a1 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java @@ -69,6 +69,7 @@ import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.converter.CompositeMessageConverter; +import org.springframework.messaging.support.GenericMessage; import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; @@ -668,7 +669,14 @@ public class BeanFactoryAwareFunctionRegistry } } else if (rawType instanceof Class) { // see AWS adapter with WildardTypeImpl and Azure with Voids - convertedValue = conversionService.convert(value, (Class) rawType); + try { + convertedValue = conversionService.convert(value, (Class) rawType); + } + catch (Exception e) { + if (value instanceof String || value instanceof byte[]) { + convertedValue = messageConverter.fromMessage(new GenericMessage(value), (Class) rawType); + } + } } } if (logger.isDebugEnabled()) { diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java index 55a064f9e..fbe668b8e 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java @@ -282,6 +282,16 @@ public class BeanFactoryAwareFunctionRegistryTests { assertThat((Object) catalog.lookup("")).isNull(); } + @Test + public void pojoFunctionAsJson() { + FunctionCatalog catalog = this.configureCatalog(); + Function uppercasePerson = catalog.lookup("uppercasePerson"); + + Person person = uppercasePerson.apply("{\"name\":\"bill\",\"id\":2}"); + assertThat(person.getName()).isEqualTo("BILL"); + + } + @EnableAutoConfiguration @Configuration