GH-929 Ensure AWS Functioininvoker handles Mono<Void> return the same way as imperative Consumer

Resolves #929
This commit is contained in:
Oleg Zhurakousky
2022-10-19 10:51:55 +02:00
parent e77498eec5
commit 6bcc143c2c
2 changed files with 34 additions and 10 deletions

View File

@@ -90,28 +90,31 @@ public class FunctionInvoker implements RequestStreamHandler {
@SuppressWarnings("unchecked")
private byte[] buildResult(Message<?> requestMessage, Object output) throws IOException {
Message<byte[]> responseMessage;
Message<byte[]> responseMessage = null;
if (output instanceof Publisher<?>) {
List<Object> result = new ArrayList<>();
for (Object value : Flux.from((Publisher<?>) output).toIterable()) {
if (logger.isInfoEnabled()) {
logger.info("Response value: " + value);
if (logger.isDebugEnabled()) {
logger.debug("Response value: " + value);
}
result.add(value);
}
if (result.size() > 1) {
output = result;
}
else {
else if (result.size() == 1) {
output = result.get(0);
}
if (logger.isInfoEnabled()) {
logger.info("OUTPUT: " + output + " - " + output.getClass().getName());
else {
output = null;
}
if (output != null) {
if (logger.isDebugEnabled()) {
logger.debug("OUTPUT: " + output + " - " + output.getClass().getName());
}
byte[] payload = this.jsonMapper.toJson(output);
responseMessage = MessageBuilder.withPayload(payload).build();
}
byte[] payload = this.jsonMapper.toJson(output);
responseMessage = MessageBuilder.withPayload(payload).build();
}
else {
responseMessage = (Message<byte[]>) output;