From ff1e38bfa954dd747a5ff185dfe51c120d5ab5e7 Mon Sep 17 00:00:00 2001 From: Christof Rabensteiner Date: Fri, 6 Dec 2019 13:18:12 +0100 Subject: Change msg service: Acknowledge Response iff Backend Succeeds - Before: Upon receipt of a message via the msg/ endpoint, MOA ZS would immediately acknowledge the receipt without verifying that the message was successfully processed by the backend. - Now: MOA ZS receives a message via the msg/ endpoint, forwards it to the sinks, and acknowledges the receipt if and only if the processing succeeded. --- .../at/gv/egiz/moazs/backend/MsgResponseBackend.java | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java') diff --git a/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java b/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java index 81398da..45a4000 100644 --- a/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java +++ b/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java @@ -35,6 +35,7 @@ import org.springframework.core.task.TaskExecutor; import org.springframework.stereotype.Component; import java.util.Map; +import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; import java.util.function.Supplier; @@ -49,7 +50,7 @@ import static java.util.concurrent.CompletableFuture.supplyAsync; * */ @Component -public class MsgResponseBackend implements Consumer { +public class MsgResponseBackend { private static final Logger log = LoggerFactory.getLogger(MsgService.class); @@ -92,15 +93,10 @@ public class MsgResponseBackend implements Consumer { * * @param responseID refers to MsgResponse Object. */ - @Override - public void accept(String responseID) { + public CompletableFuture accept(String responseID) { log.info("Backend accepts MsgResponse with responseID={}.", responseID); - supplyAsync(() -> verifySignature(responseID), taskExecutor) - .thenAcceptAsync(msgResponse -> applySinks(msgResponse), taskExecutor) - .exceptionally(ex -> { - log.error(ex.getMessage(), ex); - return null; - }); + return supplyAsync(() -> verifySignature(responseID), taskExecutor) + .thenCompose(msgResponse -> applySinks(msgResponse)); } private MsgResponse verifySignature(String responseID) { @@ -117,16 +113,18 @@ public class MsgResponseBackend implements Consumer { signatureVerifier.accept(binaryResponse); return response; + } catch (MoaZSException ex) { log.error(ex.getMessage(), ex); var text = format(MOASP_SIGNATURE_INVALID_ERROR_MSG, response.getAppDeliveryID()); var code = ERROR_MOASP_SIGNATURE_INVALID; return response.generateError(text, code); + } } - private void applySinks(MsgResponse msgResponse) { + private CompletableFuture applySinks(MsgResponse msgResponse) { var appDeliveryID = msgResponse.getAppDeliveryID(); var config = repository @@ -135,7 +133,7 @@ public class MsgResponseBackend implements Consumer { .getConfig(); var sinkParams = config.getMsgResponseSinks(); - hub.applySinks(msgResponse, sinkParams); + return hub.applySinks(msgResponse, sinkParams); } private Supplier supplyRequestWithDefaultConfig(String appDeliveryID) { -- cgit v1.2.3