From 207e24ef9d413be2c1324896b70bdbce1fe103b9 Mon Sep 17 00:00:00 2001 From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de> Date: Wed, 4 Sep 2024 16:26:36 +0200 Subject: [PATCH] OZG-6239 KOP-2607 xta error codes in exceptions --- .../xta/test/app/model/XtaConstants.java | 12 ++++++ .../xta/test/app/server/MsgBoxPortImpl.java | 38 ++++++++++++++----- .../xta/test/app/server/SendXtaPortImpl.java | 24 +++++++----- .../test/app/mapper/RequestMapperTest.java | 18 ++++----- .../test/app/server/MsgBoxPortImplTest.java | 34 +++++++++++++---- .../test/app/server/SendXtaPortImplTest.java | 10 ++++- 6 files changed, 97 insertions(+), 39 deletions(-) diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java index a5af977..5ca37d7 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java +++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java @@ -65,6 +65,18 @@ public class XtaConstants { public static final String SEND_MESSAGE_ACTION = XTA_ACTION_BASE + "SendMessage"; public static final String SEND_MESSAGE_SYNC_ACTION = XTA_ACTION_BASE + "SendMessageSync"; + /* + * Fehlercodes + */ + public static final String ERROR_CODE_LIST_URN = "urn:de:xta:webservice:codeliste:fehlernummer"; + public static final String ERROR_CODE_LIST_VERSION = "2.0.0"; + public static final String ERROR_CODE_PARAMETER_MISSING = "9020"; + public static final String ERROR_CODE_PARAMETER_MISSING_DESCRIPTION = "Keine Parameter vorhanden"; + public static final String ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM = "9030"; + public static final String ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM_DESCRIPTION = "Interner Fehler beim XTA-Server bzw. XTA-Dienstleister"; + public static final String ERROR_CODE_MESSAGE_ID_UNKNOWN = "9070"; + public static final String ERROR_CODE_MESSAGE_ID_UNKNOWN_DESCRIPTION = "MessageID für den Account nicht bekannt"; + public enum ConnectionPortType { SEND, MSGBOX, MANAGEMENT } diff --git a/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java b/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java index 38a80a5..6fd3857 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java +++ b/src/main/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImpl.java @@ -1,7 +1,10 @@ package de.ozgcloud.xta.test.app.server; +import static de.ozgcloud.xta.test.app.model.XtaConstants.*; + import java.util.Optional; +import genv3.de.xoev.transport.xta.x211.*; import jakarta.jws.WebService; import org.apache.cxf.annotations.SchemaValidation; @@ -16,10 +19,7 @@ import de.ozgcloud.xta.test.app.mapper.ResponseMapper; import de.ozgcloud.xta.test.app.service.XtaMessageService; import de.ozgcloud.xta.test.app.service.XtaParameter; import de.ozgcloud.xta.test.app.util.XtaIdGenerator; -import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException; -import genv3.de.xoev.transport.xta.x211.MsgBoxPortType; -import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; -import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; + import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxResponseType; import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType; @@ -72,7 +72,7 @@ public class MsgBoxPortImpl implements MsgBoxPortType { private void validateFetchRequest(MsgBoxFetchRequest fetchRequest) throws XTAWSTechnicalProblemException { if (!(checkMessageSelectionSupported(fetchRequest.getMsgSelector()) && validator.isListSizeEquals(fetchRequest.getMsgSelector().getMessageID(), 1, "MessageID"))) { - throw new XTAWSTechnicalProblemException("Invalid fetch request"); + throw buildTechnicalProblemException("Invalid fetch request"); } } @@ -90,7 +90,7 @@ public class MsgBoxPortImpl implements MsgBoxPortType { private XtaMessage getXtaMessageOrThrow(String messageId) throws InvalidMessageIDException { Optional<XtaMessage> message = messageService.getMessage(messageId); if (message.isEmpty()) { - throw new InvalidMessageIDException("No message with messageID \"" + messageId + "\" available."); + throw buildInvalidMessageIDException("No message with messageID \"" + messageId + "\" available."); } return message.get(); } @@ -133,7 +133,7 @@ public class MsgBoxPortImpl implements MsgBoxPortType { validator.isNotNull(statusListRequest.getListForm(), "listForm") && statusListRequest.getListForm().equalsIgnoreCase("MessageMetaData") && validator.isNotNull(statusListRequest.getMaxListItems(), "maxListItems"))) { - throw new XTAWSTechnicalProblemException("Invalid getStatusList request"); + throw buildTechnicalProblemException("Invalid getStatusList request"); } } @@ -141,11 +141,11 @@ public class MsgBoxPortImpl implements MsgBoxPortType { try { int maxListItems = statusListRequest.getMaxListItems().intValueExact(); if (maxListItems <= 0) { - throw new XTAWSTechnicalProblemException("Invalid maxListItems value"); + throw buildTechnicalProblemException("Invalid maxListItems value"); } return maxListItems; } catch (ArithmeticException e) { - throw new XTAWSTechnicalProblemException("Invalid maxListItems value"); + throw buildTechnicalProblemException("Invalid maxListItems value"); } } @@ -209,8 +209,26 @@ public class MsgBoxPortImpl implements MsgBoxPortType { messageIdsValid &= messageService.closeMessage(messageId.getValue()); } if( ! messageIdsValid ) { - throw new InvalidMessageIDException("One or more message IDs are invalid."); + throw buildInvalidMessageIDException("One or more message IDs are invalid."); } } + private XTAWSTechnicalProblemException buildTechnicalProblemException(String message) { + var faultInfo = new XTAWSTechnicalProblemExceptionType(); + faultInfo.getErrorCode().setCode(ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM); + faultInfo.getErrorCode().setName(ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM_DESCRIPTION); + faultInfo.getErrorCode().setListURI(ERROR_CODE_LIST_URN); + faultInfo.getErrorCode().setListVersionID(ERROR_CODE_LIST_VERSION); + return new XTAWSTechnicalProblemException(message, faultInfo); + } + + private InvalidMessageIDException buildInvalidMessageIDException(String message) { + var faultInfo = new InvalidMessageIDExceptionType(); + faultInfo.getErrorCode().setCode(ERROR_CODE_MESSAGE_ID_UNKNOWN); + faultInfo.getErrorCode().setName(ERROR_CODE_MESSAGE_ID_UNKNOWN_DESCRIPTION); + faultInfo.getErrorCode().setListURI(ERROR_CODE_LIST_URN); + faultInfo.getErrorCode().setListVersionID(ERROR_CODE_LIST_VERSION); + return new InvalidMessageIDException(message, faultInfo); + } + } diff --git a/src/main/java/de/ozgcloud/xta/test/app/server/SendXtaPortImpl.java b/src/main/java/de/ozgcloud/xta/test/app/server/SendXtaPortImpl.java index c769881..f2be49e 100644 --- a/src/main/java/de/ozgcloud/xta/test/app/server/SendXtaPortImpl.java +++ b/src/main/java/de/ozgcloud/xta/test/app/server/SendXtaPortImpl.java @@ -1,6 +1,10 @@ package de.ozgcloud.xta.test.app.server; +import static de.ozgcloud.xta.test.app.model.XtaConstants.*; + import de.ozgcloud.xta.test.app.mapper.RequestMapper; + +import genv3.de.xoev.transport.xta.x211.*; import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; import lombok.RequiredArgsConstructor; import org.apache.cxf.annotations.SchemaValidation; @@ -8,14 +12,7 @@ import org.springframework.stereotype.Component; import de.ozgcloud.xta.test.app.service.ParameterValidatorService; import de.ozgcloud.xta.test.app.service.XtaMessageService; -import genv3.de.xoev.transport.xta.x211.GenericContentContainer; -import genv3.de.xoev.transport.xta.x211.MessageSchemaViolationException; -import genv3.de.xoev.transport.xta.x211.MessageVirusDetectionException; -import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException; -import genv3.de.xoev.transport.xta.x211.PermissionDeniedException; -import genv3.de.xoev.transport.xta.x211.SendPortType; -import genv3.de.xoev.transport.xta.x211.SyncAsyncException; -import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException; + import jakarta.jws.WebService; import lombok.extern.log4j.Log4j2; @@ -56,7 +53,7 @@ public class SendXtaPortImpl implements SendPortType { public void validateMessageId(MessageMetaData messageMetaData) throws ParameterIsNotValidException { if (messageMetaData.getMsgIdentification() == null || messageMetaData.getMsgIdentification().getMessageID() == null) { - throw new ParameterIsNotValidException("Message ID is missing"); + throw buildParameterIsNotValidException("Message ID is missing"); } } @@ -76,4 +73,13 @@ public class SendXtaPortImpl implements SendPortType { throw new UnsupportedOperationException("sendMessageSync is not supported"); } + private ParameterIsNotValidException buildParameterIsNotValidException(String message) { + var faultInfo = new ParameterIsNotValidExceptionType(); + faultInfo.getErrorCode().setCode(ERROR_CODE_PARAMETER_MISSING); + faultInfo.getErrorCode().setName(ERROR_CODE_PARAMETER_MISSING_DESCRIPTION); + faultInfo.getErrorCode().setListURI(ERROR_CODE_LIST_URN); + faultInfo.getErrorCode().setListVersionID(ERROR_CODE_LIST_VERSION); + return new ParameterIsNotValidException(message, faultInfo); + } + } diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java index 8582b7c..e835fb1 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/RequestMapperTest.java @@ -1,9 +1,16 @@ package de.ozgcloud.xta.test.app.mapper; -import static org.assertj.core.api.Assertions.*; +import static org.assertj.core.api.Assertions.assertThat; import java.nio.file.Files; +import genv3.de.xoev.transport.xta.x211.ContentType; +import genv3.de.xoev.transport.xta.x211.GenericContentContainer; +import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest; +import genv3.eu.osci.ws.x2008.x05.transport.MsgSelector; +import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; +import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType; +import lombok.SneakyThrows; import org.apache.cxf.ws.addressing.AttributedURIType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -15,18 +22,9 @@ import de.ozgcloud.xta.test.app.factory.AttributedURITypeTestFactory; import de.ozgcloud.xta.test.app.factory.ContentTypeTestFactory; import de.ozgcloud.xta.test.app.factory.GenericContentContainerTestFactory; import de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory; -import de.ozgcloud.xta.test.app.factory.MsgBoxStatusListRequestTypeTestFactory; import de.ozgcloud.xta.test.app.factory.QualifierTypeBusinessScenarioTestFactory; import de.ozgcloud.xta.test.app.model.Identifier; import de.ozgcloud.xta.test.app.model.XtaFile; -import genv3.de.xoev.transport.xta.x211.ContentType; -import genv3.de.xoev.transport.xta.x211.GenericContentContainer; -import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest; -import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType; -import genv3.eu.osci.ws.x2008.x05.transport.MsgSelector; -import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; -import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType; -import lombok.SneakyThrows; public class RequestMapperTest { diff --git a/src/test/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImplTest.java b/src/test/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImplTest.java index 84ecb15..d658a5f 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImplTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/server/MsgBoxPortImplTest.java @@ -21,6 +21,7 @@ import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; import genv3.eu.osci.ws.x2014.x10.transport.PartyType; import jakarta.xml.ws.Holder; import lombok.SneakyThrows; +import org.assertj.core.api.Condition; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -107,8 +108,11 @@ public class MsgBoxPortImplTest { void shouldRejectRequestWithoutMessageId() { fetchRequest.getMsgSelector().getMessageID().clear(); + + assertThatExceptionOfType(XTAWSTechnicalProblemException.class).isThrownBy( - () -> msgBoxPortImpl.getMessage(fetchRequest, authorIdentifier, messageMetaDataHolder, responseHeaderHolder)); + () -> msgBoxPortImpl.getMessage(fetchRequest, authorIdentifier, messageMetaDataHolder, responseHeaderHolder)) + .has(technicalProblemErrorCodeCondition()); } @Test @@ -116,7 +120,8 @@ public class MsgBoxPortImplTest { fetchRequest.getMsgSelector().getMessageID().add(AttributedURITypeTestFactory.create("urn:de:xta:messageId:extra-id")); assertThatExceptionOfType(XTAWSTechnicalProblemException.class).isThrownBy( - () -> msgBoxPortImpl.getMessage(fetchRequest, authorIdentifier, messageMetaDataHolder, responseHeaderHolder)); + () -> msgBoxPortImpl.getMessage(fetchRequest, authorIdentifier, messageMetaDataHolder, responseHeaderHolder)) + .has(technicalProblemErrorCodeCondition()); } @Test @@ -124,7 +129,8 @@ public class MsgBoxPortImplTest { when(xtaMessageService.getMessage(MsgBoxFetchRequestTestFactory.MESSAGE_ID.getValue())).thenReturn(Optional.empty()); assertThatExceptionOfType(InvalidMessageIDException.class).isThrownBy( - () -> msgBoxPortImpl.getMessage(fetchRequest, authorIdentifier, messageMetaDataHolder, responseHeaderHolder)); + () -> msgBoxPortImpl.getMessage(fetchRequest, authorIdentifier, messageMetaDataHolder, responseHeaderHolder)) + .has(invalidMessageIDExceptionCondition()); } @Test @@ -132,7 +138,8 @@ public class MsgBoxPortImplTest { fetchRequest.getMsgSelector().setNewEntry(false); assertThatExceptionOfType(XTAWSTechnicalProblemException.class).isThrownBy( - () -> msgBoxPortImpl.getMessage(fetchRequest, authorIdentifier, messageMetaDataHolder, responseHeaderHolder)); + () -> msgBoxPortImpl.getMessage(fetchRequest, authorIdentifier, messageMetaDataHolder, responseHeaderHolder)) + .has(technicalProblemErrorCodeCondition()); } @Test @@ -211,7 +218,8 @@ public class MsgBoxPortImplTest { statusListRequest.setListForm(null); assertThatExceptionOfType(XTAWSTechnicalProblemException.class).isThrownBy( - () -> msgBoxPortImpl.getStatusList(statusListRequest, authorIdentifier, responseHeaderHolder)); + () -> msgBoxPortImpl.getStatusList(statusListRequest, authorIdentifier, responseHeaderHolder)) + .has(technicalProblemErrorCodeCondition()); } @Test @@ -219,7 +227,8 @@ public class MsgBoxPortImplTest { statusListRequest.setListForm("MsgAttributeListType"); assertThatExceptionOfType(XTAWSTechnicalProblemException.class).isThrownBy( - () -> msgBoxPortImpl.getStatusList(statusListRequest, authorIdentifier, responseHeaderHolder)); + () -> msgBoxPortImpl.getStatusList(statusListRequest, authorIdentifier, responseHeaderHolder)) + .has(technicalProblemErrorCodeCondition()); } @ParameterizedTest @@ -229,7 +238,8 @@ public class MsgBoxPortImplTest { when(xtaIdGenerator.generateRequestId()).thenReturn(REQUEST_ID); assertThatExceptionOfType(XTAWSTechnicalProblemException.class).isThrownBy( - () -> msgBoxPortImpl.getStatusList(statusListRequest, authorIdentifier, responseHeaderHolder)); + () -> msgBoxPortImpl.getStatusList(statusListRequest, authorIdentifier, responseHeaderHolder)) + .has(technicalProblemErrorCodeCondition()); } @Test @@ -303,7 +313,15 @@ public class MsgBoxPortImplTest { assertThatExceptionOfType(InvalidMessageIDException.class).isThrownBy( () -> msgBoxPortImpl.close(closeRequest, authorIdentifier) - ); + ).has(invalidMessageIDExceptionCondition()); } } + + private Condition<XTAWSTechnicalProblemException> technicalProblemErrorCodeCondition() { + return new Condition<>(e -> e.getFaultInfo().getErrorCode().getCode().equals("9030"), "error code 9030"); + } + + private Condition<InvalidMessageIDException> invalidMessageIDExceptionCondition() { + return new Condition<>(e -> e.getFaultInfo().getErrorCode().getCode().equals("9070"), "error code 9070 for invalid message ID"); + } } diff --git a/src/test/java/de/ozgcloud/xta/test/app/server/SendXtaPortImplTest.java b/src/test/java/de/ozgcloud/xta/test/app/server/SendXtaPortImplTest.java index 6696591..4b47d2d 100644 --- a/src/test/java/de/ozgcloud/xta/test/app/server/SendXtaPortImplTest.java +++ b/src/test/java/de/ozgcloud/xta/test/app/server/SendXtaPortImplTest.java @@ -9,6 +9,7 @@ import genv3.de.xoev.transport.xta.x211.GenericContentContainer; import genv3.de.xoev.transport.xta.x211.ParameterIsNotValidException; import genv3.eu.osci.ws.x2008.x05.transport.X509TokenContainerType; import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData; +import org.assertj.core.api.Condition; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -71,8 +72,13 @@ public class SendXtaPortImplTest { messageMetaData.getMsgIdentification().setMessageID(null); assertThatExceptionOfType(ParameterIsNotValidException.class).isThrownBy( - () -> sendXtaPortImpl.sendMessage(genericContainer, messageMetaData, x509TokenContainer) - ).withMessage("Message ID is missing"); + () -> sendXtaPortImpl.sendMessage(genericContainer, messageMetaData, x509TokenContainer)) + .withMessage("Message ID is missing") + .has(parameterIsMissingExceptionCondition()); } } + + private Condition<ParameterIsNotValidException> parameterIsMissingExceptionCondition() { + return new Condition<>(e -> e.getFaultInfo().getErrorCode().getCode().equals("9020"), "error code 9020 for missing parameter"); + } } -- GitLab