diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapper.java
index afcf35c837babee45c7d4bd1c818cad79faed75e..2579d41f3b1eafc5bcb9672cebdcc07147c5a7ae 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapper.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapper.java
@@ -1,7 +1,5 @@
 package de.ozgcloud.xta.test.app.mapper;
 
-import static de.ozgcloud.xta.test.app.model.XtaConstants.*;
-
 import org.mapstruct.Mapper;
 import org.mapstruct.Mapping;
 import org.mapstruct.ReportingPolicy;
@@ -19,6 +17,15 @@ import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemExceptionType;
 )
 public interface ExceptionMapper {
 
+	String ERROR_CODE_LIST_URN = "urn:de:xta:webservice:codeliste:fehlernummer";
+	String ERROR_CODE_LIST_VERSION = "2.0.0";
+	String ERROR_CODE_PARAMETER_MISSING = "9020";
+	String ERROR_CODE_PARAMETER_MISSING_DESCRIPTION = "Notwendige Parameter nicht vorhanden";
+	String ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM = "9030";
+	String ERROR_CODE_INTERNAL_TECHNICAL_PROBLEM_DESCRIPTION = "Interner Fehler beim XTA-Server bzw. XTA-Dienstleister";
+	String ERROR_CODE_MESSAGE_ID_UNKNOWN = "9070";
+	String ERROR_CODE_MESSAGE_ID_UNKNOWN_DESCRIPTION = "MessageID für den Account nicht bekannt";
+
 	default InvalidMessageIDException createInvalidMessageIDException(String message) {
 		return new InvalidMessageIDException(
 				message,
diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
index aa8bf819de6770c9b65867e5ac29571409f1e7b1..c7608a297f104f34e079b714b95687f30a91b2c4 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/ResponseMapper.java
@@ -27,7 +27,6 @@ import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
 import de.ozgcloud.xta.test.app.model.XtaMessage;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
-import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
 import genv3.de.xoev.transport.xta.x211.ContentType;
 import genv3.de.xoev.transport.xta.x211.GenericContentContainer;
 import genv3.de.xoev.transport.xta.x211.LookupServiceResponse;
@@ -133,14 +132,10 @@ public interface ResponseMapper {
 		return DatatypeFactory.newInstance().newXMLGregorianCalendar(isoTimeString);
 	}
 
-	default MsgBoxResponseType createGetMessageResponseHeader(XtaIdGenerator xtaIdGenerator) {
-		return mapMsgBoxResponseTypeFromRequestID(xtaIdGenerator.generateRequestId().toString());
-	}
-
 	@Mapping(target = "itemsPending", expression = "java( BigInteger.ZERO )")
 	@Mapping(target = "msgBoxRequestID", source = "requestId")
 	@Mapping(target = "noMessageAvailable", expression = "java( null )")
-	MsgBoxResponseType mapMsgBoxResponseTypeFromRequestID(String requestId);
+	MsgBoxResponseType mapMsgBoxResponseTypeFromRequestId(String requestId);
 
 	@Mapping(target = "itemsPending", source = "pendingMessageCount")
 	@Mapping(target = "msgBoxRequestID", constant = REQUEST_ID)
@@ -182,10 +177,6 @@ public interface ResponseMapper {
 	@Mapping(target = "lookupServiceResultList.lookupServiceResult", expression = "java( List.of( mapLookupServiceResultType(xtaLookupServiceRequest) ) )")
 	LookupServiceResponse mapLookupServiceResponse(XtaLookupServiceRequest xtaLookupServiceRequest);
 
-	default AttributedURIType createCreateMessageIdResponse(XtaIdGenerator xtaIdGenerator) {
-		return mapCreateMessageIdResponse(xtaIdGenerator.generateMessageId().toString());
-	}
-
 	@Mapping(target = "otherAttributes", ignore = true)
 	AttributedURIType mapCreateMessageIdResponse(String value);
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaCloseRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaCloseRequest.java
index a08804dd283b60d4e3905590c38992bde7375a31..627be8ba0a8bd336a430c316bcc329218901b402 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaCloseRequest.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaCloseRequest.java
@@ -1,14 +1,16 @@
 package de.ozgcloud.xta.test.app.model;
 
+import static de.ozgcloud.xta.test.app.validation.ValidXtaId.*;
+
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 
-import de.ozgcloud.xta.test.app.validation.ValidXtaMessageId;
+import de.ozgcloud.xta.test.app.validation.ValidXtaId;
 import lombok.Builder;
 
 @Builder
 public record XtaCloseRequest(
-		@ValidXtaMessageId String messageId,
+		@ValidXtaId(namespace = MESSAGE_ID_NAMESPACE) String messageId,
 		@NotNull @NotBlank String clientIdentifierValue
 ) {
 }
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
deleted file mode 100644
index ce88d0e36cf52d151fd93b2533e4816348347b64..0000000000000000000000000000000000000000
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaConstants.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * @formatter:off
- *
- * Copyright 2021-2022  Koordinierungsstelle für IT-Standards (KoSIT)
- *
- * Licensed under the European Public License, Version 1.2 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     https://opensource.org/licenses/EUPL-1.2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * @formatter:on
- */
-package de.ozgcloud.xta.test.app.model;
-
-import javax.xml.namespace.QName;
-
-import lombok.experimental.UtilityClass;
-
-@UtilityClass
-public class XtaConstants {
-
-	public static final String W3_ORG_2005_08_ADDRESSING = "http://www.w3.org/2005/08/addressing";
-
-	public static final String XTA_211 = "http://xoev.de/transport/xta/211";
-	public static final String XTA_ACTION_BASE = "http://www.xta.de/XTA/";
-
-	public static final String OSCI_2008_05_TRANSPORT = "http://www.osci.eu/ws/2008/05/transport";
-	public static final String OSCI_2014_10_TRANSPORT = "http://www.osci.eu/ws/2014/10/transport";
-
-	public static final String OSCI_2008_05_ACTION_BASE = OSCI_2008_05_TRANSPORT + "/urn/messageTypes/";
-	public static final String OSCI_2014_10_ACTION_BASE = OSCI_2014_10_TRANSPORT + "/urn/messageTypes/";
-
-	/*
-	 * Xml QNames in alphabetic order
-	 */
-
-	public static final QName ACTION = new QName(W3_ORG_2005_08_ADDRESSING, "Action");
-	public static final QName MSG_BOX_RESPONSE = new QName(OSCI_2008_05_TRANSPORT, "MsgBoxResponse");
-	public static final QName MESSAGE_META_DATA = new QName(OSCI_2014_10_TRANSPORT, "MessageMetaData");
-	public static final QName TO = new QName(W3_ORG_2005_08_ADDRESSING, "To");
-
-	/*
-	 * Actions in alphabetic order
-	 */
-
-	public static final String CANCEL_MESSAGE_ACTION = XTA_ACTION_BASE + "CancelMessage";
-	public static final String CHECK_ACCOUNT_ACTIVE_ACTION = XTA_ACTION_BASE + "CheckAccountActive";
-	public static final String CLOSE_ACTION = OSCI_2008_05_ACTION_BASE + "MsgBoxCloseRequest";
-	public static final String CREATE_MESSAGE_ID_ACTION = XTA_ACTION_BASE + "CreateMessageID";
-
-	public static final String GET_MESSAGE_ACTION = OSCI_2008_05_ACTION_BASE + "MsgBoxFetchRequest";
-	public static final String GET_NEXT_MESSAGE_ACTION = OSCI_2008_05_ACTION_BASE + "MsgBoxGetNextMsgRequest";
-	public static final String GET_NEXT_STATUS_LIST_ACTION = OSCI_2008_05_ACTION_BASE + "MsgBoxGetNextListRequest";
-	public static final String GET_STATUS_LIST_ACTION = OSCI_2008_05_ACTION_BASE + "MsgBoxStatusListRequest";
-	public static final String GET_TRANSPORT_REPORT_ACTION = XTA_ACTION_BASE + "GetTransportReport";
-
-	public static final String LOOKUP_SERVICE_ACTION = XTA_ACTION_BASE + "IsServiceAvailable";
-
-	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 = "Notwendige Parameter nicht 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 static final String MESSAGE_ID_PATTERN = "(\\w+):(.+):([^:]+):([^:]+)";
-
-	public enum ConnectionPortType {
-		SEND, MSGBOX, MANAGEMENT
-	}
-}
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaFile.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaFile.java
index 0a8319c41688eb9133a12e4b7f905f4c02cdbc62..1a824a7cdd277b6b61ffee04a07ed3159dd45b9c 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaFile.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaFile.java
@@ -19,6 +19,6 @@ public record XtaFile(
 		@NotBlank String name,
 		@Nullable String id,
 		@Nullable String language,
-		@PositiveOrZero BigInteger size
+		@NotNull @PositiveOrZero BigInteger size
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaGetMessageRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaGetMessageRequest.java
index 41ad56b586791fcdfbd3386190d09ef552b6f547..c632b5f934e93aa864c83c85e267263cb79bf1c6 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaGetMessageRequest.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaGetMessageRequest.java
@@ -1,13 +1,15 @@
 package de.ozgcloud.xta.test.app.model;
 
+import static de.ozgcloud.xta.test.app.validation.ValidXtaId.*;
+
 import jakarta.validation.constraints.NotBlank;
 
-import de.ozgcloud.xta.test.app.validation.ValidXtaMessageId;
+import de.ozgcloud.xta.test.app.validation.ValidXtaId;
 import lombok.Builder;
 
 @Builder
 public record XtaGetMessageRequest(
-		@ValidXtaMessageId String messageId,
+		@ValidXtaId(namespace = MESSAGE_ID_NAMESPACE) String messageId,
 		@NotBlank String clientIdentifierValue
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java
index 32ec4b6d1b1a6d0e9700abb12ef2c48af4a0b196..167a64d0be7ef786c7c5833a460b7898e8c1a96c 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaData.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.xta.test.app.model;
 
+import static de.ozgcloud.xta.test.app.validation.ValidXtaId.*;
+
 import java.math.BigInteger;
 
 import jakarta.annotation.Nullable;
@@ -8,7 +10,7 @@ import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.PositiveOrZero;
 
-import de.ozgcloud.xta.test.app.validation.ValidXtaMessageId;
+import de.ozgcloud.xta.test.app.validation.ValidXtaId;
 import lombok.Builder;
 
 @Builder(toBuilder = true)
@@ -20,7 +22,7 @@ public record XtaMessageMetaData(
 		@Nullable String businessScenarioListVersionId,
 		@NotBlank String messageTypeCode,
 		@NotBlank String messageTypePayloadSchema,
-		@ValidXtaMessageId String messageId,
+		@ValidXtaId(namespace = MESSAGE_ID_NAMESPACE) String messageId,
 		@NotNull @Valid XtaIdentifier authorIdentifier,
 		@NotNull @Valid XtaIdentifier readerIdentifier,
 		@NotNull @PositiveOrZero BigInteger messageSize
diff --git a/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java b/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
index 364f4201b1babc68f5617467c3e391645d59aed6..f709010c81d7020b89103f6d966071af25a83808 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/server/ManagementPortImpl.java
@@ -9,7 +9,7 @@ import org.springframework.stereotype.Component;
 
 import de.ozgcloud.xta.test.app.mapper.RequestMapper;
 import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
-import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
+import de.ozgcloud.xta.test.app.service.XtaMessageService;
 import genv3.de.xoev.transport.xta.x211.CancelDeniedException;
 import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
 import genv3.de.xoev.transport.xta.x211.LookupServiceRequest;
@@ -28,9 +28,9 @@ import lombok.extern.log4j.Log4j2;
 @Log4j2
 public class ManagementPortImpl implements ManagementPortType {
 
-	private final XtaIdGenerator xtaIdGenerator;
 	private final ResponseMapper responseMapper;
 	private final RequestMapper requestMapper;
+	private final XtaMessageService xtaMessageService;
 
 	/*
 	 * (non-Javadoc)
@@ -43,7 +43,9 @@ public class ManagementPortImpl implements ManagementPortType {
 			throws XTAWSTechnicalProblemException, PermissionDeniedException {
 		log.info("Executing operation createMessageId");
 
-		return responseMapper.createCreateMessageIdResponse(xtaIdGenerator);
+		return responseMapper.mapCreateMessageIdResponse(
+				xtaMessageService.createMessageId()
+		);
 	}
 
 	/*
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 7b1425446fa176af04cdd1d12dcf2c26f6541fef..8f24819ad20340a542bd2a80cefdadd24d4b6d7f 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
@@ -9,7 +9,6 @@ import de.ozgcloud.xta.test.app.mapper.ExceptionMapper;
 import de.ozgcloud.xta.test.app.mapper.RequestMapper;
 import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
 import de.ozgcloud.xta.test.app.service.XtaMessageService;
-import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
 import de.ozgcloud.xta.test.app.validation.RequestValidator;
 import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
 import genv3.de.xoev.transport.xta.x211.MsgBoxPortType;
@@ -29,7 +28,6 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 	private final RequestMapper requestMapper;
 	private final ExceptionMapper exceptionMapper;
 	private final ResponseMapper responseMapper;
-	private final XtaIdGenerator xtaIdGenerator;
 	private final XtaMessageService messageService;
 
 	/*
@@ -55,7 +53,9 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 				.orElseThrow(() -> createInvalidMessageIdException(request.messageId(), request.clientIdentifierValue()));
 
 		messageMetaData.value = responseMapper.mapMessageMetaData(message.metaData());
-		fetchResponseHeader.value = responseMapper.createGetMessageResponseHeader(xtaIdGenerator);
+		fetchResponseHeader.value = responseMapper.mapMsgBoxResponseTypeFromRequestId(
+				messageService.createRequestId()
+		);
 		return responseMapper.mapGenericContentContainerFromXtaMessage(message);
 	}
 
diff --git a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java
index eca4f2f0f31862a79435223340504987035ccff4..e4cffea58c1ea08992ebf16fad475eac22cddf9d 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/service/XtaMessageService.java
@@ -2,8 +2,12 @@ package de.ozgcloud.xta.test.app.service;
 
 import java.util.List;
 import java.util.Optional;
+import java.util.UUID;
 import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
+import org.springframework.core.env.Environment;
 import org.springframework.stereotype.Service;
 
 import de.ozgcloud.xta.test.app.data.XtaMessageRepository;
@@ -20,6 +24,8 @@ import lombok.RequiredArgsConstructor;
 public class XtaMessageService {
 	private final XtaMessageRepository messageRepository;
 
+	private final Environment environment;
+
 	public boolean sendMessage(XtaMessage message) {
 		messageRepository.save(message);
 		return true;
@@ -56,4 +62,21 @@ public class XtaMessageService {
 				request.clientIdentifierValue()
 		);
 	}
+
+	public String createMessageId() {
+		return generateXtaIdWithNamespace("de:xta:messageid");
+	}
+
+	public String createRequestId() {
+		return generateXtaIdWithNamespace("de:xta:requestid");
+	}
+
+	private String generateXtaIdWithNamespace(String namespace) {
+		return String.join(":",
+				"urn",
+				namespace,
+				environment.getProperty("spring.application.name"),
+				UUID.randomUUID().toString()
+		);
+	}
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/util/XtaId.java b/src/main/java/de/ozgcloud/xta/test/app/util/XtaId.java
deleted file mode 100644
index 7ab923459f48656619562b5f29ba93920e96ec68..0000000000000000000000000000000000000000
--- a/src/main/java/de/ozgcloud/xta/test/app/util/XtaId.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * @formatter:off
- *
- * Copyright 2021-2022  Koordinierungsstelle für IT-Standards (KoSIT)
- *
- * Licensed under the European Public License, Version 1.2 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     https://opensource.org/licenses/EUPL-1.2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * @formatter:on
- */
-package de.ozgcloud.xta.test.app.util;
-
-import java.util.Optional;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import lombok.Data;
-
-@Data
-public class XtaId {
-
-	public static final Pattern PATTERN = Pattern.compile("(\\w+):(.+):([^:]+):([^:]+)");
-	private final String schema;
-	private final String namespace;
-	private final String application; // prefix
-	private final String uuid; // identifier
-
-	public XtaId(final String schema, final String namespace, final String application, final String uuid) {
-		this.schema = schema;
-		this.namespace = namespace;
-		this.application = application;
-		this.uuid = uuid;
-	}
-
-	@Override
-	public String toString() {
-		return schema + ":" + namespace + ":" + application + ":" + uuid;
-	}
-
-	public static Optional<XtaId> parse(final String messageId) {
-		// page 119; structure: "urn:de:xta:messageid:<Präfix>:<Identifikator>"
-		Matcher matcher = PATTERN.matcher(messageId);
-		if (matcher.matches()) {
-			return Optional
-					.of(new XtaId(matcher.group(1), matcher.group(2), matcher.group(3), matcher.group(4)));
-		}
-		return Optional.empty();
-	}
-}
diff --git a/src/main/java/de/ozgcloud/xta/test/app/util/XtaIdGenerator.java b/src/main/java/de/ozgcloud/xta/test/app/util/XtaIdGenerator.java
deleted file mode 100644
index cdedee6b37ccdf8fbf032cd582362967437bd4c1..0000000000000000000000000000000000000000
--- a/src/main/java/de/ozgcloud/xta/test/app/util/XtaIdGenerator.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * @formatter:off
- *
- * Copyright 2021-2022  Koordinierungsstelle für IT-Standards (KoSIT)
- *
- * Licensed under the European Public License, Version 1.2 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     https://opensource.org/licenses/EUPL-1.2
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * @formatter:on
- */
-package de.ozgcloud.xta.test.app.util;
-
-import org.springframework.stereotype.Component;
-
-import java.util.UUID;
-
-@Component
-public class XtaIdGenerator {
-
-	public static final String MESSAGE_ID_NAMESPACE = "de:xta:messageid";
-	public static final String REQUEST_ID_NAMESPACE = "de:xta:requestid";
-
-	public static final String APPLICATION_NAME = "xta-test-server";
-
-	public XtaId generateMessageId() {
-		return generateId(MESSAGE_ID_NAMESPACE);
-	}
-
-	public XtaId generateRequestId() {
-		return generateId(REQUEST_ID_NAMESPACE);
-	}
-
-	public XtaId generateId(final String namespace) {
-		return new XtaId("urn", namespace, APPLICATION_NAME, UUID.randomUUID().toString());
-	}
-}
diff --git a/src/main/java/de/ozgcloud/xta/test/app/util/YamlPropertySourceFactory.java b/src/main/java/de/ozgcloud/xta/test/app/util/YamlPropertySourceFactory.java
deleted file mode 100644
index 3828423a6f600f2189ff0baaeb0843491ab8d352..0000000000000000000000000000000000000000
--- a/src/main/java/de/ozgcloud/xta/test/app/util/YamlPropertySourceFactory.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Created 2023-03-24
- */
-package de.ozgcloud.xta.test.app.util;
-
-import java.io.IOException;
-import java.util.Properties;
-
-import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
-import org.springframework.core.env.PropertiesPropertySource;
-import org.springframework.core.env.PropertySource;
-import org.springframework.core.io.support.EncodedResource;
-import org.springframework.core.io.support.PropertySourceFactory;
-
-public class YamlPropertySourceFactory implements PropertySourceFactory {
-
-	@Override
-	public PropertySource<?> createPropertySource(final String name, final EncodedResource encodedResource)
-			throws IOException {
-		if (encodedResource == null) {
-			throw new IOException("Resource is null");
-		}
-		YamlPropertiesFactoryBean factory = new YamlPropertiesFactoryBean();
-		if (!encodedResource.getResource().exists()) {
-			return new PropertiesPropertySource(name, null);
-		}
-		factory.setResources(encodedResource.getResource());
-
-		Properties properties = factory.getObject();
-
-		return new PropertiesPropertySource(name, properties);
-	}
-}
diff --git a/src/main/java/de/ozgcloud/xta/test/app/validation/ValidXtaMessageId.java b/src/main/java/de/ozgcloud/xta/test/app/validation/ValidXtaId.java
similarity index 57%
rename from src/main/java/de/ozgcloud/xta/test/app/validation/ValidXtaMessageId.java
rename to src/main/java/de/ozgcloud/xta/test/app/validation/ValidXtaId.java
index 72ee404cb14c2e55df32c9c292459b8aa6927922..94bdd31cc9ab0786a25c13b8d97b2930cc14250a 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/validation/ValidXtaMessageId.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/validation/ValidXtaId.java
@@ -8,13 +8,21 @@ import java.lang.annotation.Target;
 import jakarta.validation.Constraint;
 import jakarta.validation.Payload;
 
-@Constraint(validatedBy = XtaMessageIdValidator.class)
-@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER }) // Specify where the annotation can be applied
+@Constraint(validatedBy = XtaIdValidator.class)
+@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER })
 @Retention(RetentionPolicy.RUNTIME)
-public @interface ValidXtaMessageId {
-	String message() default "Invalid message id"; // Default error message
+public @interface ValidXtaId {
+	String MESSAGE_ID_NAMESPACE = "de:xta:messageid";
+	String REQUEST_ID_NAMESPACE = "de:xta:requestid";
+	String ANY_NAMESPACE = ".+";
+
+	String message() default "Invalid xta id";
+
+	String namespace() default ANY_NAMESPACE;
 
 	Class<?>[] groups() default {};
 
 	Class<? extends Payload>[] payload() default {};
 }
+
+
diff --git a/src/main/java/de/ozgcloud/xta/test/app/validation/XtaIdValidator.java b/src/main/java/de/ozgcloud/xta/test/app/validation/XtaIdValidator.java
new file mode 100644
index 0000000000000000000000000000000000000000..e5187cdbc98c355cdbc7fbde5a918598bd04e773
--- /dev/null
+++ b/src/main/java/de/ozgcloud/xta/test/app/validation/XtaIdValidator.java
@@ -0,0 +1,23 @@
+package de.ozgcloud.xta.test.app.validation;
+
+import java.util.regex.Pattern;
+
+import jakarta.validation.ConstraintValidator;
+import jakarta.validation.ConstraintValidatorContext;
+
+public class XtaIdValidator implements ConstraintValidator<ValidXtaId, String> {
+
+	private Pattern pattern;
+
+	@Override
+	public void initialize(ValidXtaId constraintAnnotation) {
+		pattern = Pattern.compile(
+				"(\\w+):(" + constraintAnnotation.namespace() + "):([^:]+):([^:]+)"
+		);
+	}
+
+	@Override
+	public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
+		return value != null && pattern.matcher(value).matches();
+	}
+}
diff --git a/src/main/java/de/ozgcloud/xta/test/app/validation/XtaMessageIdValidator.java b/src/main/java/de/ozgcloud/xta/test/app/validation/XtaMessageIdValidator.java
deleted file mode 100644
index 4b6a2e96098169466eda9dbd891aae17d1fbb596..0000000000000000000000000000000000000000
--- a/src/main/java/de/ozgcloud/xta/test/app/validation/XtaMessageIdValidator.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package de.ozgcloud.xta.test.app.validation;
-
-import static de.ozgcloud.xta.test.app.model.XtaConstants.*;
-
-import java.util.regex.Pattern;
-
-import jakarta.validation.ConstraintValidator;
-import jakarta.validation.ConstraintValidatorContext;
-
-public class XtaMessageIdValidator implements ConstraintValidator<ValidXtaMessageId, String> {
-	public Pattern PATTERN = Pattern.compile(MESSAGE_ID_PATTERN);
-
-	@Override
-	public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) {
-		return value != null && PATTERN.matcher(value).matches();
-	}
-}
diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapperTest.java
index 573cd77571562dd9581061f335aae23de04726eb..4279ef93590c87f083ba661fcd70e6287c2ff46b 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapperTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/ExceptionMapperTest.java
@@ -1,6 +1,6 @@
 package de.ozgcloud.xta.test.app.mapper;
 
-import static de.ozgcloud.xta.test.app.model.XtaConstants.*;
+import static de.ozgcloud.xta.test.app.mapper.ExceptionMapper.*;
 import static org.assertj.core.api.Assertions.*;
 
 import org.junit.jupiter.api.DisplayName;
diff --git a/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java b/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java
index d65f05c55f5a616d308d94b1c42588ae7a09629b..07d8b77efc8cecbaf3bcf9635eef59d22f7e9ac1 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/mapper/ResponseMapperTest.java
@@ -1,14 +1,9 @@
 package de.ozgcloud.xta.test.app.mapper;
 
-import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
-import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.AUTHOR_IDENTIFIER;
-import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.MESSAGE_SIZE;
-import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.READER_IDENTIFIER;
+import static de.ozgcloud.xta.test.app.factory.XtaLookupServiceRequestTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
 import static de.ozgcloud.xta.test.app.mapper.ResponseMapper.*;
-import static de.ozgcloud.xta.test.app.factory.XtaLookupServiceRequestTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
-import static org.mockito.Mockito.*;
 
 import java.math.BigInteger;
 import java.nio.charset.StandardCharsets;
@@ -19,7 +14,6 @@ import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
 import org.mapstruct.factory.Mappers;
-import org.mockito.Mock;
 
 import de.ozgcloud.xta.test.app.factory.XtaFileTestFactory;
 import de.ozgcloud.xta.test.app.factory.XtaLookupServiceRequestTestFactory;
@@ -27,8 +21,6 @@ import de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory;
 import de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory;
 import de.ozgcloud.xta.test.app.model.XtaFile;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
-import de.ozgcloud.xta.test.app.util.XtaId;
-import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
 import genv3.de.xoev.transport.xta.x211.ContentType;
 import genv3.de.xoev.transport.xta.x211.LookupServiceResponse;
 import genv3.de.xoev.transport.xta.x211.LookupServiceResultType;
@@ -419,25 +411,14 @@ public class ResponseMapperTest {
 		}
 	}
 
-	@DisplayName("create get message response header")
+	@DisplayName("map MsgBoxResponseType from requestId")
 	@Nested
-	class TestCreateGetMessageResponseHeader {
-		@Mock
-		private XtaIdGenerator xtaIdGenerator;
-
-		@Mock
-		private XtaId xtaId;
-
-		@BeforeEach
-		void mock() {
-			when(xtaIdGenerator.generateRequestId()).thenReturn(xtaId);
-			when(xtaId.toString()).thenReturn(REQUEST_ID);
-		}
+	class TestMapMsgBoxResponseTypeFromRequestId {
 
 		@DisplayName("should map message box response type from request id")
 		@Test
 		void shouldMapMsgBoxResponseTypeFromRequestId() {
-			var result = mapper.createGetMessageResponseHeader(xtaIdGenerator);
+			var result = mapper.mapMsgBoxResponseTypeFromRequestId(REQUEST_ID);
 
 			assertThat(result.getMsgBoxRequestID()).isEqualTo(REQUEST_ID);
 		}
@@ -445,7 +426,7 @@ public class ResponseMapperTest {
 		@DisplayName("should map items pending to zero")
 		@Test
 		void shouldMapItemsPendingToZero() {
-			var result = mapper.createGetMessageResponseHeader(xtaIdGenerator);
+			var result = mapper.mapMsgBoxResponseTypeFromRequestId(REQUEST_ID);
 
 			assertThat(result.getItemsPending()).isEqualTo(BigInteger.ZERO);
 		}
@@ -453,7 +434,7 @@ public class ResponseMapperTest {
 		@DisplayName("should set no messages available to null")
 		@Test
 		void shouldSetNoMessagesAvailableToNull() {
-			var result = mapper.createGetMessageResponseHeader(xtaIdGenerator);
+			var result = mapper.mapMsgBoxResponseTypeFromRequestId(REQUEST_ID);
 
 			assertThat(result.getNoMessageAvailable()).isNull();
 		}
@@ -496,27 +477,4 @@ public class ResponseMapperTest {
 		}
 	}
 
-	@DisplayName("create create message id response")
-	@Nested
-	class TestCreateCreateMessageIdResponse {
-		@Mock
-		private XtaIdGenerator xtaIdGenerator;
-
-		@Mock
-		private XtaId xtaId;
-
-		@BeforeEach
-		void mock() {
-			when(xtaIdGenerator.generateMessageId()).thenReturn(xtaId);
-			when(xtaId.toString()).thenReturn(MESSAGE_ID);
-		}
-
-		@DisplayName("should map attributed uri type")
-		@Test
-		void shouldMapAttributedUriType() {
-			var result = mapper.createCreateMessageIdResponse(xtaIdGenerator);
-
-			assertThat(result.getValue()).isEqualTo(MESSAGE_ID);
-		}
-	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java b/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
index 29cc41f2192f3ba18b26c6d28be107868ee36033..9e83bfcf56a0720c4ba657cedd96ce55ded176f0 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/server/ManagementPortImplTest.java
@@ -1,5 +1,6 @@
 package de.ozgcloud.xta.test.app.server;
 
+import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
@@ -14,7 +15,7 @@ import org.mockito.Mock;
 import de.ozgcloud.xta.test.app.mapper.RequestMapper;
 import de.ozgcloud.xta.test.app.mapper.ResponseMapper;
 import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
-import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
+import de.ozgcloud.xta.test.app.service.XtaMessageService;
 import genv3.de.xoev.transport.xta.x211.LookupServiceRequest;
 import genv3.de.xoev.transport.xta.x211.LookupServiceResponse;
 import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
@@ -26,7 +27,7 @@ public class ManagementPortImplTest {
 	private ManagementPortImpl managementPortImpl;
 
 	@Mock
-	private XtaIdGenerator xtaIdGenerator;
+	private XtaMessageService xtaMessageService;
 	@Mock
 	private ResponseMapper responseMapper;
 	@Mock
@@ -43,7 +44,8 @@ public class ManagementPortImplTest {
 
 		@BeforeEach
 		void beforeEach() {
-			when(responseMapper.createCreateMessageIdResponse(xtaIdGenerator)).thenReturn(createdMessageId);
+			when(xtaMessageService.createMessageId()).thenReturn(MESSAGE_ID);
+			when(responseMapper.mapCreateMessageIdResponse(MESSAGE_ID)).thenReturn(createdMessageId);
 		}
 
 		@DisplayName("should return")
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 12d49137a94ffb93536ff7117159e1fe4dd7dba3..96c321e353cf29cd3b58469e10f1d96ddbd71021 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
@@ -1,6 +1,7 @@
 package de.ozgcloud.xta.test.app.server;
 
 import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
+import static de.ozgcloud.xta.test.app.mapper.ResponseMapper.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
@@ -25,7 +26,6 @@ import de.ozgcloud.xta.test.app.model.XtaMessage;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListing;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest;
 import de.ozgcloud.xta.test.app.service.XtaMessageService;
-import de.ozgcloud.xta.test.app.util.XtaIdGenerator;
 import de.ozgcloud.xta.test.app.validation.RequestValidator;
 import genv3.de.xoev.transport.xta.x211.GenericContentContainer;
 import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
@@ -55,8 +55,6 @@ public class MsgBoxPortImplTest {
 	@Mock
 	private ResponseMapper responseMapper;
 
-	@Mock
-	private XtaIdGenerator xtaIdGenerator;
 	@Mock
 	private XtaMessageService xtaMessageService;
 
@@ -104,7 +102,8 @@ public class MsgBoxPortImplTest {
 				when(xtaMessageService.getMessage(request)).thenReturn(Optional.of(xtaMessage));
 
 				when(responseMapper.mapMessageMetaData(xtaMessage.metaData())).thenReturn(mappedMessageMetaData);
-				when(responseMapper.createGetMessageResponseHeader(xtaIdGenerator)).thenReturn(mappedFetchResponseHeader);
+				when(xtaMessageService.createRequestId()).thenReturn(REQUEST_ID);
+				when(responseMapper.mapMsgBoxResponseTypeFromRequestId(REQUEST_ID)).thenReturn(mappedFetchResponseHeader);
 				when(responseMapper.mapGenericContentContainerFromXtaMessage(xtaMessage)).thenReturn(mappedGenericContentContainer);
 			}
 
diff --git a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java
index 4841132c2a4e9808882c82b2868cfa322956d7ad..80599eec0ba843241443b26d17bad9c66546e60e 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/service/XtaMessageServiceTest.java
@@ -2,6 +2,7 @@ package de.ozgcloud.xta.test.app.service;
 
 import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.XtaMessageTestFactory.*;
+import static de.ozgcloud.xta.test.app.validation.ValidXtaId.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.Mockito.*;
 
@@ -19,6 +20,7 @@ import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Spy;
+import org.springframework.core.env.Environment;
 
 import de.ozgcloud.xta.test.app.data.XtaMessageRepository;
 import de.ozgcloud.xta.test.app.factory.XtaCloseRequestTestFactory;
@@ -31,6 +33,8 @@ import de.ozgcloud.xta.test.app.model.XtaMessageMetaDataListingRequest;
 public class XtaMessageServiceTest {
 	@Mock
 	private XtaMessageRepository messageRepository;
+	@Mock
+	private Environment environment;
 
 	@Spy
 	@InjectMocks
@@ -200,4 +204,53 @@ public class XtaMessageServiceTest {
 
 		}
 	}
+
+	@DisplayName("create message id")
+	@Nested
+	class TestCreateMessageId {
+
+		@DisplayName("should return unique id")
+		@Test
+		void shouldReturnUniqueId() {
+			var result1 = service.createMessageId();
+			var result2 = service.createMessageId();
+
+			assertThat(result1).isNotEqualTo(result2);
+		}
+
+		@DisplayName("should return")
+		@Test
+		void shouldReturn() {
+			when(environment.getProperty("spring.application.name")).thenReturn("app");
+
+			var result = service.createMessageId();
+
+			assertThat(result).startsWith("urn:" + MESSAGE_ID_NAMESPACE + ":app:");
+		}
+	}
+
+	@DisplayName("create request id")
+	@Nested
+	class TestCreateRequestId {
+
+		@DisplayName("should return unique id")
+		@Test
+		void shouldReturnUniqueId() {
+			var result1 = service.createRequestId();
+			var result2 = service.createRequestId();
+
+			assertThat(result1).isNotEqualTo(result2);
+		}
+
+		@DisplayName("should return")
+		@Test
+		void shouldReturn() {
+			when(environment.getProperty("spring.application.name")).thenReturn("app");
+
+			var result = service.createRequestId();
+
+			assertThat(result).startsWith("urn:" + REQUEST_ID_NAMESPACE + ":app:");
+		}
+	}
+
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/util/XtaIdGeneratorTest.java b/src/test/java/de/ozgcloud/xta/test/app/util/XtaIdGeneratorTest.java
deleted file mode 100644
index fd622f3a06eadcd9904f078ddcb7797aa667f9e7..0000000000000000000000000000000000000000
--- a/src/test/java/de/ozgcloud/xta/test/app/util/XtaIdGeneratorTest.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package de.ozgcloud.xta.test.app.util;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-
-class XtaIdGeneratorTest {
-	private XtaIdGenerator xtaIdGenerator;
-
-	@BeforeEach
-	void beforeEach() {
-		xtaIdGenerator = new XtaIdGenerator();
-	}
-
-	@Test
-	void generateTest() {
-		XtaId xtaMessageId1 = xtaIdGenerator.generateMessageId();
-		XtaId xtaMessageId2 = xtaIdGenerator.generateMessageId();
-
-		assertEquals(xtaMessageId1.getSchema(), xtaMessageId2.getSchema());
-		assertEquals(xtaMessageId1.getNamespace(), xtaMessageId2.getNamespace());
-		assertEquals(xtaMessageId1.getApplication(), xtaMessageId2.getApplication());
-		assertNotEquals(xtaMessageId1.getUuid(), xtaMessageId2.getUuid());
-	}
-}
diff --git a/src/test/java/de/ozgcloud/xta/test/app/util/XtaIdTest.java b/src/test/java/de/ozgcloud/xta/test/app/util/XtaIdTest.java
deleted file mode 100644
index 6417b1f7f60c785ed6e9fbd9a781f47ab397198a..0000000000000000000000000000000000000000
--- a/src/test/java/de/ozgcloud/xta/test/app/util/XtaIdTest.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package de.ozgcloud.xta.test.app.util;
-
-import static org.junit.jupiter.api.Assertions.*;
-
-import java.util.Optional;
-
-import org.junit.jupiter.api.Test;
-
-public class XtaIdTest {
-
-	@Test
-	void parseTest_messageIdIsCorrect_returnedOptionalIsPresent() {
-		// given
-		String messageId = "urn:de:xta:messageid:application:000ca2fe-f4e1-45c2-8233-3a0eb760bd16";
-
-		// when
-		Optional<XtaId> optId = XtaId.parse(messageId);
-
-		// then
-		assertTrue(optId.isPresent());
-		XtaId xtaMessageId = optId.get();
-		assertAll(
-				() -> assertEquals("urn", xtaMessageId.getSchema(), "wrong schema"),
-				() -> assertEquals("de:xta:messageid", xtaMessageId.getNamespace(), "wrong namespace"),
-				() -> assertEquals("application", xtaMessageId.getApplication(), "wrong application"),
-				() -> assertEquals("000ca2fe-f4e1-45c2-8233-3a0eb760bd16", xtaMessageId.getUuid(), "wrong uuid"));
-	}
-
-	@Test
-	void parseTest_messageIdIsNotCorrect_returnedOptionalIsEmpty() {
-		// given
-		String messageId = "urn:application:000ca2fe-f4e1-45c2-8233-3a0eb760bd16";
-
-		// when
-		Optional<XtaId> optId = XtaId.parse(messageId);
-
-		// then
-		assertTrue(optId.isEmpty());
-	}
-}
diff --git a/src/test/java/de/ozgcloud/xta/test/app/validation/RequestValidatorTest.java b/src/test/java/de/ozgcloud/xta/test/app/validation/RequestValidatorTest.java
index 3a49bf94b4e1b8b0db26e28659b0d7265874f203..cb46fc56d20adac55b181fcc3998b489ae2900a7 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/validation/RequestValidatorTest.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/validation/RequestValidatorTest.java
@@ -36,6 +36,14 @@ class RequestValidatorTest {
 			validator.validate(XtaGetMessageRequestTestFactory.create());
 		}
 
+		@DisplayName("should throw if null")
+		@Test
+		void shouldThrowIfNull() {
+			when(exceptionMapper.createTechnicalProblemException(any())).thenReturn(exception);
+
+			assertThatThrownBy(() -> validator.validate(null)).isEqualTo(exception);
+		}
+
 		@DisplayName("with invalid request")
 		@Nested
 		class TestWithInvalidRequest {
@@ -59,7 +67,7 @@ class RequestValidatorTest {
 			@Test
 			void shouldThrowIfMessageIdDoesNotMatchPattern() {
 				var request = XtaGetMessageRequestTestFactory.createBuilder()
-						.messageId("urn:some-invalid-format")
+						.messageId("urn:unknown-namespace:application:000ca2fe-f4e1-45c2-8233-3a0eb760bd16")
 						.build();
 
 				assertThatThrownBy(() -> validator.validate(request)).isEqualTo(exception);