diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java index cfdba9a3e..7735f17c1 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java @@ -91,9 +91,7 @@ public final class FunctionTypeUtils { if (isPublisher(type) || isMessage(type)) { type = getImmediateGenericType(type, 0); } - if (isMessage(type)) { - type = getImmediateGenericType(type, 0); - } + return TypeResolver.reify(type instanceof GenericArrayType ? type : TypeResolver.reify(type)); } diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtilsTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtilsTests.java index 46a073423..6f0285422 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtilsTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtilsTests.java @@ -144,7 +144,8 @@ public class FunctionTypeUtilsTests { assertThat(FunctionTypeUtils.isTypeCollection(new ParameterizedTypeReference() { }.getType())).isFalse(); assertThat(FunctionTypeUtils.isTypeCollection(new ParameterizedTypeReference>() { }.getType())).isTrue(); assertThat(FunctionTypeUtils.isTypeCollection(new ParameterizedTypeReference>>() { }.getType())).isTrue(); - assertThat(FunctionTypeUtils.isTypeCollection(new ParameterizedTypeReference>>>() { }.getType())).isTrue(); + assertThat(FunctionTypeUtils.isTypeCollection(new ParameterizedTypeReference>>>() { }.getType())).isTrue(); + assertThat(FunctionTypeUtils.isTypeCollection(new ParameterizedTypeReference>>>() { }.getType())).isFalse(); } private static Function function() { diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java index 4e9163e67..6e4230b0d 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java @@ -206,9 +206,11 @@ public class ContextFunctionCatalogAutoConfigurationTests { assertThat(function).isInstanceOf(Function.class); assertThat(function.isInputTypeMessage()).isTrue(); - Type inputType = function.getInputType(); + final Type inputType = function.getInputType(); - assertThat((Class) FunctionTypeUtils.getGenericType(inputType)).isAssignableFrom(String.class); + assertThat(FunctionTypeUtils.getRawType(inputType)).isAssignableFrom(Flux.class); + assertThat(FunctionTypeUtils.getRawType(FunctionTypeUtils.getGenericType(inputType))).isAssignableFrom(Message.class); + assertThat(FunctionTypeUtils.getRawType(FunctionTypeUtils.getGenericType(FunctionTypeUtils.getGenericType(inputType)))).isAssignableFrom(String.class); } @Test @@ -219,9 +221,12 @@ public class ContextFunctionCatalogAutoConfigurationTests { assertThat(function).isInstanceOf(Function.class); assertThat(function.isInputTypeMessage()).isTrue(); - Type inputType = function.getInputType(); - assertThat((Class) FunctionTypeUtils.getGenericType(inputType)).isAssignableFrom(String.class); + final Type inputType = function.getInputType(); + assertThat(FunctionTypeUtils.getRawType(inputType)).isAssignableFrom(Publisher.class); + assertThat(FunctionTypeUtils.getRawType(FunctionTypeUtils.getGenericType(inputType))).isAssignableFrom(Message.class); + assertThat(FunctionTypeUtils.getRawType(FunctionTypeUtils.getGenericType(FunctionTypeUtils.getGenericType(inputType)))).isAssignableFrom(String.class); + } @Test