GH-746 Fix support for Cloud Event properly enriching Function<Mono, Mono>
Resolves #746
This commit is contained in:
@@ -841,13 +841,8 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
||||
}
|
||||
Object result = ((Function) this.target).apply(inputValue);
|
||||
|
||||
if (result instanceof Flux && functionInvocationHelper != null) {
|
||||
result = ((Flux) result).map(v -> {
|
||||
if (firstInputMessage.get() != null && CloudEventMessageUtils.isCloudEvent(firstInputMessage.get())) {
|
||||
return functionInvocationHelper.postProcessResult(v, firstInputMessage.get());
|
||||
}
|
||||
return v;
|
||||
});
|
||||
if (result instanceof Publisher && functionInvocationHelper != null) {
|
||||
result = this.postProcessFunction((Publisher) result, firstInputMessage);
|
||||
}
|
||||
|
||||
return value instanceof OriginalMessageHolder
|
||||
@@ -855,6 +850,40 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect
|
||||
: result;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
private Publisher postProcessFunction(Publisher result, AtomicReference<Message<?>> firstInputMessage) {
|
||||
if (FunctionTypeUtils.isPublisher(this.inputType) && FunctionTypeUtils.isPublisher(this.outputType)) {
|
||||
if (!FunctionTypeUtils.getRawType(FunctionTypeUtils.getImmediateGenericType(this.inputType, 0))
|
||||
.isAssignableFrom(Void.class)
|
||||
&& !FunctionTypeUtils.getRawType(FunctionTypeUtils.getImmediateGenericType(this.outputType, 0))
|
||||
.isAssignableFrom(Void.class)) {
|
||||
|
||||
if (result instanceof Mono) {
|
||||
return Mono.from((result)).map(v -> {
|
||||
if (firstInputMessage.get() != null && CloudEventMessageUtils
|
||||
.isCloudEvent(firstInputMessage.get())) {
|
||||
return functionInvocationHelper.postProcessResult(v,
|
||||
firstInputMessage.get());
|
||||
}
|
||||
return v;
|
||||
});
|
||||
}
|
||||
else {
|
||||
return Flux.from((result)).map(v -> {
|
||||
if (firstInputMessage.get() != null && CloudEventMessageUtils
|
||||
.isCloudEvent(firstInputMessage.get())) {
|
||||
return functionInvocationHelper.postProcessResult(v,
|
||||
firstInputMessage.get());
|
||||
}
|
||||
return v;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
/*
|
||||
*
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user