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 b9b332d1e..3390a0739 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 @@ -128,9 +128,9 @@ public final class FunctionTypeUtils { for (Type generic : generics) { if (generic instanceof ParameterizedType) { Class rawClsss = (Class) ((ParameterizedType) generic).getRawType(); - if (rawClsss.isAssignableFrom(Function.class) - || rawClsss.isAssignableFrom(Consumer.class) - || rawClsss.isAssignableFrom(Supplier.class)) { + if (Function.class.isAssignableFrom(rawClsss) + || Consumer.class.isAssignableFrom(rawClsss) + || Supplier.class.isAssignableFrom(rawClsss)) { return generic; } else { @@ -145,6 +145,8 @@ public final class FunctionTypeUtils { return null; } + + public static Type discoverFunctionTypeFromFunctionMethod(Method functionMethod) { Assert.isTrue( functionMethod.getName().equals("apply") || 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 83c0da597..3066418f7 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 @@ -19,7 +19,6 @@ package org.springframework.cloud.function.context.catalog; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.sql.Date; import java.util.List; import java.util.Map; import java.util.function.Consumer; @@ -132,6 +131,13 @@ public class FunctionTypeUtilsTests { assertThat(type.getInputType()).isAssignableFrom(String.class); } + @Test + public void foo() { + FunctionType type = FunctionType.of(FunctionTypeUtils.discoverFunctionTypeFromClass(ReactiveFunctionImpl.class)); + assertThat(String.class).isAssignableFrom(type.getInputType()); + assertThat(Integer.class).isAssignableFrom(type.getOutputType()); + } + // @Test // public void testInputTypeByIndex() throws Exception { // Type functionType = getReturnType("function"); @@ -208,19 +214,19 @@ public class FunctionTypeUtilsTests { //============ - private interface MessageFunction extends Function, Message> { + private interface MessageFunction extends Function, Message> { } - private interface MyMessageFunction extends MessageFunction { + private interface MyMessageFunction extends MessageFunction { } - private interface MessageConsumer extends Consumer> { + private interface MessageConsumer extends Consumer> { } - private interface MyMessageConsumer extends MessageConsumer { + private interface MyMessageConsumer extends MessageConsumer { } @@ -229,4 +235,17 @@ public class FunctionTypeUtilsTests { public void accept(Flux> messageFlux) { } } + + public interface ReactiveFunction extends Function, Flux> { + + } + + public static class ReactiveFunctionImpl implements ReactiveFunction { + + @Override + public Flux apply(Flux inFlux) { + return inFlux.map(v -> Integer.parseInt(v)); + } + + } } diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/ExporterProperties.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/ExporterProperties.java index b39ece466..1890cadd5 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/ExporterProperties.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/ExporterProperties.java @@ -20,12 +20,13 @@ import java.util.LinkedHashMap; import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.cloud.function.context.FunctionProperties; /** * @author Dave Syer * */ -@ConfigurationProperties("spring.cloud.function.web.export") +@ConfigurationProperties(prefix = FunctionProperties.PREFIX + ".web.export") public class ExporterProperties { /** diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SupplierExporter.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SupplierExporter.java index 09ff2d3ed..99f82e8c3 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SupplierExporter.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SupplierExporter.java @@ -175,7 +175,7 @@ public class SupplierExporter implements SmartLifecycle { body = message.getPayload(); } Mono result = this.client.post().uri(uri) - .headers(headers -> headers(headers, destination, value)).syncBody(body) + .headers(headers -> headers(headers, destination, value)).bodyValue(body) .exchange(); if (this.debug) { result = result.log();