diff options
Diffstat (limited to 'src/main/java/at/gv/egiz/moazs/scheme')
5 files changed, 67 insertions, 32 deletions
diff --git a/src/main/java/at/gv/egiz/moazs/scheme/MsgResponse.java b/src/main/java/at/gv/egiz/moazs/scheme/MsgResponse.java index 8bd88d9..c4fd0b7 100644 --- a/src/main/java/at/gv/egiz/moazs/scheme/MsgResponse.java +++ b/src/main/java/at/gv/egiz/moazs/scheme/MsgResponse.java @@ -1,6 +1,5 @@ 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; @@ -33,7 +32,14 @@ public abstract class MsgResponse <T> { public abstract String getAppDeliveryID(); public abstract String getZSDeliveryID(); public abstract DeliveryAnswerType getAnswer(); - public abstract MsgResponse<T> generateError(MoaZSException exception); + + /** + * Create an error response that is based on the current response. + * @param text describes the error. + * @param code contains an error code. + * @return Deep Copy of response but of "error" type + */ + public abstract MsgResponse<T> generateError(String text, String code); public abstract CompletableFuture<Void> sendToMzsClient(Msg2MzsConverter converter, Optional<byte[]> signedStatus, Mzs2AppPortType client); } diff --git a/src/main/java/at/gv/egiz/moazs/scheme/NameSpace.java b/src/main/java/at/gv/egiz/moazs/scheme/NameSpace.java index bb7f621..6b6f34a 100644 --- a/src/main/java/at/gv/egiz/moazs/scheme/NameSpace.java +++ b/src/main/java/at/gv/egiz/moazs/scheme/NameSpace.java @@ -16,5 +16,6 @@ public class NameSpace { public static final String MSG_DELIVERY_REQUEST_STATUS = MSG_FACTORY.createDeliveryRequestStatus(null).getName().getLocalPart(); public static final String MSG_DELIVERY_NOTIFICATION = MSG_FACTORY.createDeliveryNotification(null).getName().getLocalPart(); + public static final String MSG_APP_DELIVERY_ID = MSG_FACTORY.createAppDeliveryID("").getName().getLocalPart(); } 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 21e00a1..4e7abae 100644 --- a/src/main/java/at/gv/egiz/moazs/scheme/NotificationResponse.java +++ b/src/main/java/at/gv/egiz/moazs/scheme/NotificationResponse.java @@ -1,16 +1,17 @@ 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.ErrorInfoType; import at.gv.zustellung.msg.xsd.ObjectFactory; import javax.xml.bind.JAXBElement; - +import java.util.List; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import static at.gv.zustellung.msg.xsd.DeliveryErrorType.deliveryErrorTypeBuilder; import static at.gv.zustellung.msg.xsd.DeliveryNotificationType.deliveryNotificationTypeBuilder; public class NotificationResponse extends MsgResponse<DeliveryNotificationType> { @@ -54,14 +55,19 @@ public class NotificationResponse extends MsgResponse<DeliveryNotificationType> } @Override - public NotificationResponse generateError(MoaZSException exception) { - - //TODO: use copy constructor? - var notificationType = deliveryNotificationTypeBuilder() - .withAppDeliveryID(exception.getAppDeliveryID()) - .withDeliverySystem(exception.getDeliverySystem()) - .withGZ(exception.getGz()) - .withZSDeliveryID(exception.getZsDeliveryID()) + public NotificationResponse generateError(String text, String code) { + + var info = ErrorInfoType.errorInfoTypeBuilder() + .withCode(code) + .withText(text) + .build(); + + var error = deliveryErrorTypeBuilder() + .withErrorInfo(info) + .build(); + + var notificationType = deliveryNotificationTypeBuilder(notification) + .withAnswer(List.of(factory.createAnswer(error))) .build(); return new NotificationResponse(notificationType); diff --git a/src/main/java/at/gv/egiz/moazs/scheme/RequestStatusResponse.java b/src/main/java/at/gv/egiz/moazs/scheme/RequestStatusResponse.java index 14e22ad..8a4b590 100644 --- a/src/main/java/at/gv/egiz/moazs/scheme/RequestStatusResponse.java +++ b/src/main/java/at/gv/egiz/moazs/scheme/RequestStatusResponse.java @@ -6,11 +6,13 @@ import at.gv.zustellung.msg.xsd.DeliveryAnswerType; import at.gv.zustellung.msg.xsd.DeliveryRequestStatusType; import at.gv.zustellung.msg.xsd.ErrorInfoType; import at.gv.zustellung.msg.xsd.ObjectFactory; +import org.springframework.lang.Nullable; import javax.xml.bind.JAXBElement; import java.util.Optional; import java.util.concurrent.CompletableFuture; +import static at.gv.egiz.moazs.MoaZSException.moaZSException; 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; @@ -26,10 +28,19 @@ public class RequestStatusResponse extends MsgResponse<DeliveryRequestStatusType public RequestStatusResponse(DeliveryRequestStatusType status) { this.status = status; - this.answer = coalesce(status.getSuccess(), status.getPartialSuccess(), status.getError()).get(); + this.answer = getAnswer(status); super.id = createResponseId(answer.getAppDeliveryID(), ID_SUFFIX); } + /** + * Convenience method to access DeliveryAnswerType's base fields of Success, PartialSuccess or Error. + * @param status + * @return Success, PartialSuccess, or Error casted to DeliveryAnswerType + */ + public static DeliveryAnswerType getAnswer(DeliveryRequestStatusType status) { + return coalesce(status.getSuccess(), status.getPartialSuccess(), status.getError()).get(); + } + public static String getResponseID(String appDeliveryID) { return appDeliveryID + ID_SUFFIX; } @@ -60,31 +71,42 @@ public class RequestStatusResponse extends MsgResponse<DeliveryRequestStatusType } @Override - public MsgResponse<DeliveryRequestStatusType> generateError(MoaZSException exception) { - return generateErrorFromException(exception); + public MsgResponse<DeliveryRequestStatusType> generateError(String text, String code) { + var auxException = moaZSException(text, code); + return generateError(auxException, answer); } - public static MsgResponse<DeliveryRequestStatusType> generateErrorFromException(MoaZSException exception) { + /** + * Creates A MsgResponse with a DeliveryRequestStatus of type error and merges fields from + * {@code exception} and {@code answer} + * @param exception + * @param answer + * @return + */ + public static MsgResponse<DeliveryRequestStatusType> generateError(MoaZSException exception, + @Nullable DeliveryAnswerType answer) { ErrorInfoType info = errorInfoTypeBuilder() .withText(exception.getMessage()) - .withCode(exception.getErrorCode()) + .withCode(exception.getCode()) .build(); - DeliveryRequestStatusType.Error error = errorBuilder() - .withErrorInfo(info) - .withAppDeliveryID(exception.getAppDeliveryID()) - .withDeliverySystem(exception.getDeliverySystem()) - .withGZ(exception.getGz()) + var errorBuilder = errorBuilder() .withPreAdviceNoteSent(exception.getPreAdviceNoteSent()) - .withZSDeliveryID(exception.getZsDeliveryID()) - .build(); - - var status = deliveryRequestStatusTypeBuilder() - .withError(error) - .withVersion(NameSpace.MSG_VERSION) + .withErrorInfo(info); + + if (answer != null) { + errorBuilder + .withAppDeliveryID(answer.getAppDeliveryID()) + .withDeliverySystem(answer.getDeliverySystem()) + .withZSDeliveryID(answer.getZSDeliveryID()) + .withGZ(answer.getGZ()); + } + + var errorStatus = deliveryRequestStatusTypeBuilder() + .withError(errorBuilder.build()) .build(); - return new RequestStatusResponse(status); + return new RequestStatusResponse(errorStatus); } @Override diff --git a/src/main/java/at/gv/egiz/moazs/scheme/SOAPUtils.java b/src/main/java/at/gv/egiz/moazs/scheme/SOAPUtils.java index 8b8219a..6e96a6b 100644 --- a/src/main/java/at/gv/egiz/moazs/scheme/SOAPUtils.java +++ b/src/main/java/at/gv/egiz/moazs/scheme/SOAPUtils.java @@ -1,6 +1,7 @@ package at.gv.egiz.moazs.scheme; import at.gv.egiz.eaaf.core.impl.utils.DOMUtils; +import at.gv.egiz.moazs.MoaZSException; import org.apache.cxf.binding.soap.Soap11; import org.springframework.stereotype.Component; import org.w3c.dom.Element; @@ -12,7 +13,6 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; -import static at.gv.egiz.moazs.MoaZSException.moaZSExceptionBuilder; @Component public class SOAPUtils { @@ -31,12 +31,12 @@ public class SOAPUtils { .getBytes(StandardCharsets.UTF_8); } catch (IOException | TransformerException e) { - throw moaZSExceptionBuilder("Error while parsing message. ").withCause(e).build(); + throw MoaZSException.moaZSException("Error while parsing message. ", e); } } public String getAppDeliveryIDFrom(Element document) { - var elements = document.getElementsByTagNameNS(NameSpace.MSG, "AppDeliveryID"); + var elements = document.getElementsByTagNameNS(NameSpace.MSG, NameSpace.MSG_APP_DELIVERY_ID); var appDeliveryIdElement = elements.item(0).getFirstChild(); |