aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/gv/egiz/moazs/backend/DeliveryRequestBackend.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/backend/DeliveryRequestBackend.java')
-rw-r--r--src/main/java/at/gv/egiz/moazs/backend/DeliveryRequestBackend.java53
1 files changed, 32 insertions, 21 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/backend/DeliveryRequestBackend.java b/src/main/java/at/gv/egiz/moazs/backend/DeliveryRequestBackend.java
index 06eba80..6a1e0fd 100644
--- a/src/main/java/at/gv/egiz/moazs/backend/DeliveryRequestBackend.java
+++ b/src/main/java/at/gv/egiz/moazs/backend/DeliveryRequestBackend.java
@@ -9,6 +9,7 @@ import at.gv.egiz.moazs.scheme.Mzs2MsgConverter;
import at.gv.egiz.moazs.scheme.RequestStatusResponse;
import at.gv.zustellung.app2mzs.xsd.DeliveryRequestType;
import at.gv.zustellung.msg.xsd.App2ZusePort;
+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;
@@ -17,8 +18,10 @@ import org.springframework.stereotype.Component;
import java.util.function.Consumer;
-import static at.gv.egiz.moazs.MoaZSException.moaZSExceptionBuilder;
-import static at.gv.egiz.moazs.scheme.RequestStatusResponse.generateErrorFromException;
+import static at.gv.egiz.moazs.scheme.RequestStatusResponse.*;
+import static at.gv.egiz.moazs.scheme.RequestStatusResponse.generateError;
+import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.Error.errorBuilder;
+import static at.gv.zustellung.msg.xsd.DeliveryRequestStatusType.deliveryRequestStatusTypeBuilder;
import static java.lang.String.format;
@Component
@@ -28,6 +31,10 @@ public class DeliveryRequestBackend implements Consumer<String> {
private static final Logger log = Logger.getLogger(DeliveryRequestBackend.class);
private static final String MZS_PIPELINE_ERROR_MSG =
"An error occured while processing the DeliveryRequest with AppDeliveryID=%s. ";
+ private static final String DELIVERY_REQUEST_MISSING_ERROR_MSG =
+ "DeliveryRequest for AppDeliveryID=%s is not in repository. " ;
+ private static final String BINARY_RESPONSE_MISSING_ERROR_MSG =
+ "Binary DeliveryRequestStatus for AppDeliveryID=%s is not in repository. " ;
private final DeliveryRepository repository;
private final TnvzHelper tnvzHelper;
@@ -60,49 +67,53 @@ public class DeliveryRequestBackend implements Consumer<String> {
@Override
public void accept(String appDeliveryID) {
- var exceptionBuilder = moaZSExceptionBuilder();
+ DeliveryRequestStatusType status = null;
+ var fallbackAnswerBuilder = errorBuilder().withAppDeliveryID(appDeliveryID);
try {
- var mzsRequest = repository.retrieveDeliveryRequest(appDeliveryID).orElseThrow();
- exceptionBuilder.withDeliverySystem(mzsRequest);
-
- at.gv.zustellung.msg.xsd.DeliveryRequestType msgRequest = buildMsgRequest(mzsRequest, exceptionBuilder);
+ var mzsRequest = repository.retrieveDeliveryRequest(appDeliveryID).orElseThrow(
+ () -> MoaZSException.moaZSException(format(DELIVERY_REQUEST_MISSING_ERROR_MSG, appDeliveryID)));
+ fallbackAnswerBuilder.withDeliverySystem(mzsRequest.getConfig().getMSGClient().getURL());
+ var msgRequest = buildMsgRequest(mzsRequest);
var msgClientParams = mzsRequest.getConfig().getMSGClient();
App2ZusePort client = clientFactory.create(msgClientParams, App2ZusePort.class);
- var status = client.delivery(msgRequest);
+ status = client.delivery(msgRequest);
var response = new RequestStatusResponse(status);
- exceptionBuilder.withAllParametersInAnswer(response.getAnswer());
- verifySignedStatus(response.getResponseID(), appDeliveryID, exceptionBuilder);
+ verifySignedStatus(response.getResponseID(), appDeliveryID);
repository.store(response);
} catch (MoaZSException exception) {
log.error(format(MZS_PIPELINE_ERROR_MSG, appDeliveryID), exception);
- var errorResponse = generateErrorFromException(exception);
- repository.store(errorResponse);
+
+ var templateAnswer = (status == null)
+ ? fallbackAnswerBuilder.build()
+ : getAnswer(status);
+
+ var errorStatus = generateError(exception, templateAnswer);
+ repository.store(errorStatus);
}
}
- private void verifySignedStatus(String responseID, String appDeliveryID, MoaZSException.Builder exceptionBuilder) throws MoaZSException {
+ private void verifySignedStatus(String responseID, String appDeliveryID) throws MoaZSException {
try {
- var signedStatus = repository.retrieveBinaryResponse(responseID).get();
+ var signedStatus = repository.retrieveBinaryResponse(responseID).orElseThrow(
+ () -> MoaZSException.moaZSException(format(BINARY_RESPONSE_MISSING_ERROR_MSG, responseID)));
signatureVerifier.accept(signedStatus);
} catch (MoaZSException ex) {
- throw exceptionBuilder.withMessage(format(MsgResponseBackend.MOASP_SIGNATURE_INVALID_ERROR_MSG, appDeliveryID))
- .withErrorCode(MoaZSException.ERROR_MOASP_SIGNATURE_INVALID)
- .withCause(ex)
- .build();
+ var message = format(MsgResponseBackend.MOASP_SIGNATURE_INVALID_ERROR_MSG, appDeliveryID);
+ var code = MoaZSException.ERROR_MOASP_SIGNATURE_INVALID;
+ throw MoaZSException.moaZSException(message, code, ex);
}
}
- private at.gv.zustellung.msg.xsd.DeliveryRequestType buildMsgRequest(DeliveryRequestType mzsRequest,
- MoaZSException.Builder exceptionBuilder) throws MoaZSException {
+ private at.gv.zustellung.msg.xsd.DeliveryRequestType buildMsgRequest(DeliveryRequestType mzsRequest) 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);
+ var identification = tnvzHelper.performQueryPersonRequest(mzsRequest, tvnzPort);
return converter.convert(mzsRequest, identification);
} else {
return converter.convert(mzsRequest);