diff options
author | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-07-16 14:33:26 +0200 |
---|---|---|
committer | Christof Rabensteiner <christof.rabensteiner@iaik.tugraz.at> | 2019-07-16 14:33:26 +0200 |
commit | 8f3b805a558c4ed454db2b691032cea800d7b6dd (patch) | |
tree | 524a2c90e76bc52a5c90de3e2a54ebb679328cb7 /src/main/java/at/gv/egiz/moazs/scheme/NotificationResponse.java | |
parent | d9e5864f48d261c06de1f1d34000ff6156155569 (diff) | |
download | moa-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/scheme/NotificationResponse.java')
-rw-r--r-- | src/main/java/at/gv/egiz/moazs/scheme/NotificationResponse.java | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/scheme/NotificationResponse.java b/src/main/java/at/gv/egiz/moazs/scheme/NotificationResponse.java index 784d000..21e00a1 100644 --- a/src/main/java/at/gv/egiz/moazs/scheme/NotificationResponse.java +++ b/src/main/java/at/gv/egiz/moazs/scheme/NotificationResponse.java @@ -1,12 +1,16 @@ package at.gv.egiz.moazs.scheme; import at.gv.egiz.moazs.MoaZSException; +import at.gv.zustellung.app2mzs.xsd.Mzs2AppPortType; import at.gv.zustellung.msg.xsd.DeliveryAnswerType; import at.gv.zustellung.msg.xsd.DeliveryNotificationType; import at.gv.zustellung.msg.xsd.ObjectFactory; import javax.xml.bind.JAXBElement; +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + import static at.gv.zustellung.msg.xsd.DeliveryNotificationType.deliveryNotificationTypeBuilder; public class NotificationResponse extends MsgResponse<DeliveryNotificationType> { @@ -50,17 +54,23 @@ public class NotificationResponse extends MsgResponse<DeliveryNotificationType> } @Override - public MsgResponse<DeliveryNotificationType> generateError(MoaZSException exception) { + public NotificationResponse generateError(MoaZSException exception) { - //TODO: test this! + //TODO: use copy constructor? var notificationType = deliveryNotificationTypeBuilder() - .withAppDeliveryID(exception.getAppDeliveryID()) - .withDeliverySystem(exception.getDeliverySystem()) - .withGZ(exception.getGz()) - .withZSDeliveryID(exception.getZsDeliveryID()) - .build(); + .withAppDeliveryID(exception.getAppDeliveryID()) + .withDeliverySystem(exception.getDeliverySystem()) + .withGZ(exception.getGz()) + .withZSDeliveryID(exception.getZsDeliveryID()) + .build(); return new NotificationResponse(notificationType); + } + @Override + public CompletableFuture<Void> sendToMzsClient(Msg2MzsConverter converter, Optional<byte[]> signedNotification, Mzs2AppPortType client) { + var mzsNotification = converter.convert(notification, signedNotification); + client.forwardNotification(mzsNotification); + return CompletableFuture.completedFuture(null); } } |