aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/moazs/pipeline/SingleThreadedDeliveryPipeline.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/pipeline/SingleThreadedDeliveryPipeline.java')
-rw-r--r--src/main/java/at/gv/egiz/moazs/pipeline/SingleThreadedDeliveryPipeline.java107
1 files changed, 34 insertions, 73 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/pipeline/SingleThreadedDeliveryPipeline.java b/src/main/java/at/gv/egiz/moazs/pipeline/SingleThreadedDeliveryPipeline.java
index 783df32..69065d7 100644
--- a/src/main/java/at/gv/egiz/moazs/pipeline/SingleThreadedDeliveryPipeline.java
+++ b/src/main/java/at/gv/egiz/moazs/pipeline/SingleThreadedDeliveryPipeline.java
@@ -1,17 +1,17 @@
-package at.gv.egiz.moazs.pipeline;
+package at.gv.egiz.moazs.process;
import at.gv.egiz.moazs.MoaZSException;
-import at.gv.egiz.moazs.util.ClientFactory;
+import at.gv.egiz.moazs.client.ClientFactory;
+import at.gv.egiz.moazs.client.TnvzHelper;
+import at.gv.egiz.moazs.repository.BinaryRepository;
import at.gv.egiz.moazs.repository.DeliveryRepository;
import at.gv.egiz.moazs.scheme.Mzs2MsgConverter;
-import at.gv.egiz.moazs.scheme.NameSpace;
-import at.gv.egiz.moazs.scheme.TnvzHelper;
+import at.gv.egiz.moazs.scheme.RequestStatusResponse;
+import at.gv.egiz.moazs.verify.MsgResponseVerifier;
import at.gv.egiz.moazs.verify.SignatureVerifier;
import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType;
import at.gv.zustellung.msg.xsd.App2ZusePort;
-import at.gv.zustellung.msg.xsd.DeliveryAnswerType;
-import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType;
import at.gv.zustellung.tnvz.xsd.TNVZServicePort;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,10 +19,7 @@ import org.springframework.context.annotation.Profile;
import org.springframework.stereotype.Component;
import static at.gv.egiz.moazs.MoaZSException.moaZSExceptionBuilder;
-import static at.gv.egiz.moazs.util.NullCoalesce.coalesce;
-import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.Error.errorBuilder;
-import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder;
-import static at.gv.zustellung.msg.xsd.ErrorInfoType.errorInfoTypeBuilder;
+import static at.gv.egiz.moazs.scheme.RequestStatusResponse.generateErrorFromException;
import static java.lang.String.format;
@Component
@@ -30,8 +27,11 @@ import static java.lang.String.format;
public class SingleThreadedDeliveryPipeline implements DeliveryPipeline {
private static final Logger log = Logger.getLogger(SingleThreadedDeliveryPipeline.class);
+ private static final String MZS_PIPELINE_ERROR_MSG =
+ "An error occured while processing the DeliveryRequest with AppDeliveryID=%s. ";
private final DeliveryRepository repository;
+ private final BinaryRepository binaryRepository;
private final TnvzHelper tnvzHelper;
private final Mzs2MsgConverter converter;
private final ClientFactory clientFactory;
@@ -39,12 +39,13 @@ public class SingleThreadedDeliveryPipeline implements DeliveryPipeline {
@Autowired
public SingleThreadedDeliveryPipeline(DeliveryRepository repository,
+ BinaryRepository binaryStatusRepository,
TnvzHelper tnvzHelper,
Mzs2MsgConverter converter,
ClientFactory clientFactory,
- SignatureVerifier verifier
- ) {
+ SignatureVerifier verifier) {
this.repository = repository;
+ this.binaryRepository = binaryStatusRepository;
this.tnvzHelper = tnvzHelper;
this.converter = converter;
this.clientFactory = clientFactory;
@@ -58,89 +59,49 @@ public class SingleThreadedDeliveryPipeline implements DeliveryPipeline {
try {
var mzsRequest = repository.getDeliveryRequest(appDeliveryId).orElseThrow();
- exceptionBuilder.withMzsRequest(mzsRequest);
+ exceptionBuilder.withDeliverySystem(mzsRequest);
at.gv.zustellung.msg.xsd.DeliveryRequestType msgRequest = buildMsgRequest(mzsRequest, exceptionBuilder);
- exceptionBuilder.withMsgRequest(msgRequest);
var msgClientParams = mzsRequest.getConfig().getMSGClient();
App2ZusePort client = clientFactory.create(msgClientParams, App2ZusePort.class);
var status = client.delivery(msgRequest);
- exceptionBuilder.withMsgResult(status);
- verifySignedStatus(appDeliveryId, exceptionBuilder);
- repository.add(status);
+ var response = new RequestStatusResponse(status);
+ exceptionBuilder.withAllParametersInAnswer(response.getAnswer());
- } catch (MoaZSException exception) {
-
- log.error(format("An error occured while processing the DeliveryRequest with AppDeliveryID=%s. ",
- appDeliveryId), exception);
-
- var errorStatus = generateErrorStatus(exception, appDeliveryId);
- repository.add(errorStatus);
- }
- }
+ verifySignedStatus(response.getResponseID(), exceptionBuilder);
+ repository.add(response);
- private at.gv.zustellung.msg.xsd.DeliveryRequestType buildMsgRequest(DeliveryRequestType mzsRequest,
- MoaZSException.Builder exceptionBuilder) {
- if (mzsRequest.getConfig().isPerformQueryPersonRequest()) {
- var tnvzClientParams = mzsRequest.getConfig().getTNVZClient();
- TNVZServicePort tvnzPort = clientFactory.create(tnvzClientParams, TNVZServicePort.class);
- var identification = tnvzHelper.performQueryPersonRequest(mzsRequest, tvnzPort, exceptionBuilder);
- return converter.convert(mzsRequest, identification);
- } else {
- return converter.convert(mzsRequest);
+ } catch (MoaZSException exception) {
+ log.error(format(MZS_PIPELINE_ERROR_MSG, appDeliveryId), exception);
+ var errorResponse = generateErrorFromException(exception);
+ repository.add(errorResponse);
}
}
private void verifySignedStatus(String appDeliveryId, MoaZSException.Builder exceptionBuilder) throws MoaZSException {
-
try {
- var signedStatus = repository.getSignedDeliveryRequestStatus(appDeliveryId).get();
+ var signedStatus = binaryRepository.get(appDeliveryId).get();
verifier.verify(signedStatus);
- } catch (Exception ex) {
- throw exceptionBuilder.withMessage(format("Signature of DeliveryRequestStatus with AppDeliveryID=%s " +
- " is not valid.", appDeliveryId))
+ } catch (MoaZSException ex) {
+ throw exceptionBuilder.withMessage(format(MsgResponseVerifier.MOASP_SIGNATURE_INVALID_ERROR_MSG, appDeliveryId))
.withErrorCode(MoaZSException.ERROR_MOASP_SIGNATURE_INVALID)
.withCause(ex)
.build();
}
}
- private DeliveryRequestStatusType generateErrorStatus(MoaZSException exception, String appDeliveryId) {
-
- var infoBuilder = errorInfoTypeBuilder()
- .withText(exception.getMessage())
- .withCode(exception.getErrorCode());
-
- var errorBuilder = errorBuilder()
- .withErrorInfo(infoBuilder.build())
- .withAppDeliveryID(appDeliveryId);
-
- if (exception.getMzsRequest() != null) {
- errorBuilder.withDeliverySystem(exception.getMzsRequest().getConfig().getMSGClient().getURL());
- }
-
- if (exception.getTnvzResult() != null && exception.getTnvzResult().getError() != null) {
- errorBuilder.withPreAdviceNoteSent(exception.getTnvzResult().getError().getPreAdviceNoteSent());
- }
-
- if (exception.getMsgResult() != null) {
- var answer = getAnswerFromResult(exception.getMsgResult());
- errorBuilder.withGZ(answer.getGZ());
- errorBuilder.withZSDeliveryID(answer.getZSDeliveryID());
+ private at.gv.zustellung.msg.xsd.DeliveryRequestType buildMsgRequest(DeliveryRequestType mzsRequest,
+ MoaZSException.Builder exceptionBuilder) throws MoaZSException {
+ if (mzsRequest.getConfig().isPerformQueryPersonRequest()) {
+ var tnvzClientParams = mzsRequest.getConfig().getTNVZClient();
+ TNVZServicePort tvnzPort = clientFactory.create(tnvzClientParams, TNVZServicePort.class);
+ var identification = tnvzHelper.performQueryPersonRequest(mzsRequest, tvnzPort, exceptionBuilder);
+ return converter.convert(mzsRequest, identification);
+ } else {
+ return converter.convert(mzsRequest);
}
-
- return deliveryRequestStatusTypeBuilder()
- .withError(errorBuilder.build())
- .withVersion(NameSpace.MSG_VERSION)
- .build();
-
- }
-
- private DeliveryAnswerType getAnswerFromResult(DeliveryRequestStatusType msgResult) {
- return coalesce(msgResult.getSuccess(), msgResult.getPartialSuccess(), msgResult.getError()).get();
}
-
}