aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/moazs/backend
diff options
context:
space:
mode:
authorChristof Rabensteiner <christof.rabensteiner@iaik.tugraz.at>2019-07-16 14:33:26 +0200
committerChristof Rabensteiner <christof.rabensteiner@iaik.tugraz.at>2019-07-16 14:33:26 +0200
commit8f3b805a558c4ed454db2b691032cea800d7b6dd (patch)
tree524a2c90e76bc52a5c90de3e2a54ebb679328cb7 /src/main/java/at/gv/egiz/moazs/backend
parentd9e5864f48d261c06de1f1d34000ff6156155569 (diff)
downloadmoa-zs-8f3b805a558c4ed454db2b691032cea800d7b6dd.tar.gz
moa-zs-8f3b805a558c4ed454db2b691032cea800d7b6dd.tar.bz2
moa-zs-8f3b805a558c4ed454db2b691032cea800d7b6dd.zip
Implement ForwardResponseToService Sink And All Its Implications
MZS Schema Change: - Add configuration for ForwardResponseToServiceSink (add parameters in mzs:DeliveryRequest/Config) - Add sink configuration in application.yaml, convert from Spring Environment to ConfigType, and merge ConfigTypes. - Validate sink configuration completeness. Contract added: - Add contract mzs2app.wsdl: This contract specifies how mzs:DeliveryRequestStatus' and mzs:DeliveryNotifications are forwarded to the sender application. - Implement "ForwardResponseToService" Sink. - Add and implement MsgResponse.sendToMzsClient() : This is a somewhat unfortunate solution because, intuitively, sending should be done by it's caller, the "ForwardResponseToService"-sink. However, this solution prevents differences between msg:DeliveryRequestStatus and msg:DeliveryNotification (and code that needs to handle differences, i.e. sending) from sprawling outside of the respective MsgResponse derivatives. We move the entire "send" process into MsgResponse to prevent a hard-to-maintain "if type == notification then do x else to y" construct in ForwardResponseToServiceSink. Otherwise, introducing the MsgResponse wrapper was pointless.
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/backend')
-rw-r--r--src/main/java/at/gv/egiz/moazs/backend/ForwardResponseToServiceSink.java33
-rw-r--r--src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java20
2 files changed, 48 insertions, 5 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/backend/ForwardResponseToServiceSink.java b/src/main/java/at/gv/egiz/moazs/backend/ForwardResponseToServiceSink.java
new file mode 100644
index 0000000..4b3c085
--- /dev/null
+++ b/src/main/java/at/gv/egiz/moazs/backend/ForwardResponseToServiceSink.java
@@ -0,0 +1,33 @@
+package at.gv.egiz.moazs.backend;
+
+import at.gv.egiz.moazs.client.ClientFactory;
+import at.gv.egiz.moazs.repository.DeliveryRepository;
+import at.gv.egiz.moazs.scheme.Msg2MzsConverter;
+import at.gv.egiz.moazs.scheme.MsgResponse;
+import at.gv.zustellung.app2mzs.xsd.ClientType;
+import at.gv.zustellung.app2mzs.xsd.Mzs2AppPortType;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.concurrent.CompletableFuture;
+
+@Component
+public class ForwardResponseToServiceSink {
+
+ private final ClientFactory factory;
+ private final DeliveryRepository repository;
+ private final Msg2MzsConverter converter;
+
+ @Autowired
+ public ForwardResponseToServiceSink(ClientFactory factory, DeliveryRepository repository, Msg2MzsConverter converter) {
+ this.factory = factory;
+ this.repository = repository;
+ this.converter = converter;
+ }
+
+ public CompletableFuture<Void> send(MsgResponse msgResponse, ClientType params) {
+ var binaryResponse = repository.retrieveBinaryResponse(msgResponse.getResponseID());
+ Mzs2AppPortType client = factory.create(params, Mzs2AppPortType.class);
+ return msgResponse.sendToMzsClient(converter, binaryResponse, client);
+ }
+}
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 59db396..9e3cd36 100644
--- a/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java
+++ b/src/main/java/at/gv/egiz/moazs/backend/MsgResponseBackend.java
@@ -26,18 +26,22 @@ public class MsgResponseBackend implements Consumer<String> {
private final DeliveryRepository repository;
private final Consumer<byte[]> signatureVerifier;
- private final SaveResponseToFileSink saveResponseToFileSink;
+ private final SaveResponseToFileSink saveResponseSink;
private final LogResponseSink logResponseSink;
+ private final ForwardResponseToServiceSink forwardResponseSink;
@Autowired
public MsgResponseBackend(DeliveryRepository repository,
Consumer<byte[]> signatureVerifier,
SaveResponseToFileSink saveResponseToFileSink,
- LogResponseSink logResponseSink) {
+ LogResponseSink logResponseSink,
+ ForwardResponseToServiceSink forwardResponseSink) {
this.repository = repository;
this.signatureVerifier = signatureVerifier;
- this.saveResponseToFileSink = saveResponseToFileSink;
+ this.saveResponseSink = saveResponseToFileSink;
this.logResponseSink = logResponseSink;
+ this.forwardResponseSink = forwardResponseSink;
+
}
/**
@@ -84,13 +88,19 @@ public class MsgResponseBackend implements Consumer<String> {
var sinkParams = getSinkParams(msgResponse);
- if (sinkParams.getSafeResponseToFile().isActive()) {
- supplyAsync(() -> saveResponseToFileSink.save(msgResponse, sinkParams.getSafeResponseToFile().getPath()));
+ if (sinkParams.getSaveResponseToFile().isActive()) {
+ supplyAsync(() -> saveResponseSink.save(msgResponse, sinkParams.getSaveResponseToFile().getPath()));
}
if (sinkParams.isLogResponse()) {
supplyAsync(() -> logResponseSink.log(msgResponse));
}
+
+ if (sinkParams.getForwardResponseToService().isActive()) {
+ supplyAsync(() -> forwardResponseSink.send(
+ msgResponse, sinkParams.getForwardResponseToService().getMzsClient()));
+ }
+
}
private MsgResponseSinksType getSinkParams(MsgResponse msgResponse) {