Only expose Publisher via FunctionCatalog

Flux.from() is cheap and can be used to marshal the inputs everywhere
internally. With this change users ought to be able to register any
function of any Publisher type.
This commit is contained in:
Dave Syer
2018-05-01 11:46:29 -04:00
parent fb04324ac9
commit b59b43ddc5
14 changed files with 81 additions and 59 deletions

View File

@@ -22,6 +22,8 @@ import java.util.List;
import com.microsoft.azure.serverless.functions.ExecutionContext;
import org.reactivestreams.Publisher;
import reactor.core.publisher.Flux;
/**
@@ -44,7 +46,7 @@ public class AzureSpringBootRequestHandler<I, O> extends AzureSpringFunctionInit
initialize(context);
Object convertedEvent = convertEvent(foo);
Flux<?> output = apply(extract(convertedEvent));
Publisher<?> output = apply(extract(convertedEvent));
return result(convertedEvent, output);
}
@@ -59,9 +61,9 @@ public class AzureSpringBootRequestHandler<I, O> extends AzureSpringFunctionInit
return Flux.just(input);
}
private O result(Object input, Flux<?> output) {
private O result(Object input, Publisher<?> output) {
List<Object> result = new ArrayList<>();
for (Object value : output.toIterable()) {
for (Object value : Flux.from(output).toIterable()) {
result.add(convertOutput(value));
}
if (isSingleValue(input) && result.size() == 1) {

View File

@@ -28,7 +28,8 @@ import java.util.function.Function;
import java.util.jar.Manifest;
import com.microsoft.azure.serverless.functions.ExecutionContext;
import reactor.core.publisher.Flux;
import org.reactivestreams.Publisher;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@@ -37,12 +38,14 @@ import org.springframework.cloud.function.context.FunctionCatalog;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.util.ClassUtils;
import reactor.core.publisher.Flux;
/**
* @author Soby Chacko
*/
public class AzureSpringFunctionInitializer implements Closeable {
private Function<Flux<?>, Flux<?>> function;
private Function<Publisher<?>, Publisher<?>> function;
private AtomicBoolean initialized = new AtomicBoolean();
@@ -110,7 +113,7 @@ public class AzureSpringFunctionInitializer implements Closeable {
}
}
protected Flux<?> apply(Flux<?> input) {
protected Publisher<?> apply(Publisher<?> input) {
if (this.function != null) {
return function.apply(input);
}