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 a5af9770da236f89a773991a477349bb17c84c30..5ca37d7c8fc35f8d38d2882e7e637e1fa6dd2667 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 38a80a56f7734a3281d5dd31ed3630920a80f00e..6fd385701407e9b8b5e4e206d4b6cd371d276ab7 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 c769881a9cf8e11b78b5d0d52ae7ac159af6aa58..f2be49e61015ffce3ccab084e0007504edf2ead3 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 8582b7ca5930efe3182ceb17b82bb29c99d676a6..e835fb1d983fe6eed6aaa9e8f8155017eb11bd91 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 84ecb152e7bcb20472cfc69badbc3e45176a29d8..d658a5f75259cb1ca19ae59054908f50a3b558b3 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 66965913baea13ac9508a18c6971b720d950ad8c..4b47d2d087b8df20a328dbdd0f0b602c05b1d691 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"); + } }