diff options
author | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-12-06 13:18:12 +0100 |
---|---|---|
committer | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-12-06 13:18:12 +0100 |
commit | ff1e38bfa954dd747a5ff185dfe51c120d5ab5e7 (patch) | |
tree | 98b270471b8170b666421f90d9a93228717c9bbe /src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java | |
parent | 6b2201998fd4c2404e52c63b40b3f60c2dc126d1 (diff) | |
download | moa-zs-ff1e38bfa954dd747a5ff185dfe51c120d5ab5e7.tar.gz moa-zs-ff1e38bfa954dd747a5ff185dfe51c120d5ab5e7.tar.bz2 moa-zs-ff1e38bfa954dd747a5ff185dfe51c120d5ab5e7.zip |
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.
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java')
-rw-r--r-- | src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java | 20 |
1 files changed, 9 insertions, 11 deletions
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<String> { +public class MsgResponseBackend { private static final Logger log = LoggerFactory.getLogger(MsgService.class); @@ -92,15 +93,10 @@ public class MsgResponseBackend implements Consumer<String> { * * @param responseID refers to MsgResponse Object. */ - @Override - public void accept(String responseID) { + public CompletableFuture<Void> 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<String> { 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<Void> applySinks(MsgResponse msgResponse) { var appDeliveryID = msgResponse.getAppDeliveryID(); var config = repository @@ -135,7 +133,7 @@ public class MsgResponseBackend implements Consumer<String> { .getConfig(); var sinkParams = config.getMsgResponseSinks(); - hub.applySinks(msgResponse, sinkParams); + return hub.applySinks(msgResponse, sinkParams); } private Supplier<DeliveryRequestType> supplyRequestWithDefaultConfig(String appDeliveryID) { |