From f0ebfafcb37626fc21c838728cab4227f5accf54 Mon Sep 17 00:00:00 2001
From: Jan Zickermann <jan.zickermann@dataport.de>
Date: Fri, 6 Sep 2024 13:41:33 +0200
Subject: [PATCH] OZG-6239 Use complete identifier instead of just
 identifierValue

---
 .../xta/test/app/mapper/RequestMapper.java    |  14 ++-
 .../xta/test/app/mapper/ResponseMapper.java   |   2 +-
 .../xta/test/app/model/XtaCloseRequest.java   |   3 +-
 .../test/app/model/XtaGetMessageRequest.java  |   4 +-
 .../app/model/XtaLookupServiceRequest.java    |   6 +-
 .../XtaMessageMetaDataListingRequest.java     |   4 +-
 .../test/app/server/ManagementPortImpl.java   |   4 +-
 .../xta/test/app/server/MsgBoxPortImpl.java   |   4 +-
 .../test/app/service/XtaMessageService.java   |  10 +-
 .../LookupServiceRequestTestFactory.java      |   6 +-
 .../factory/MessageMetaDataTestFactory.java   |  11 +-
 .../PartyIdentifierTypeTestFactory.java       |  23 ++--
 .../app/factory/PartyTypeTestFactory.java     |   7 +-
 .../factory/XtaCloseRequestTestFactory.java   |   5 +-
 .../XtaLookupServiceRequestTestFactory.java   |   8 +-
 .../XtaMessageMetaDataTestFactory.java        |  23 ++--
 .../test/app/mapper/RequestMapperTest.java    | 105 +++++++++++++-----
 .../test/app/mapper/ResponseMapperTest.java   |  10 +-
 .../app/server/ManagementPortImplTest.java    |  12 ++
 .../test/app/server/MsgBoxPortImplTest.java   |   6 +-
 .../app/service/XtaMessageServiceTest.java    |   6 +-
 .../app/validation/RequestValidatorTest.java  |  13 ++-
 .../XtaGetMessageRequestTestFactory.java      |   5 +-
 23 files changed, 185 insertions(+), 106 deletions(-)

diff --git a/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java b/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java
index 559a674..b8c7ff6 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/mapper/RequestMapper.java
@@ -15,6 +15,7 @@ import de.ozgcloud.xta.test.app.exception.TechnicalException;
 import de.ozgcloud.xta.test.app.model.XtaCloseRequest;
 import de.ozgcloud.xta.test.app.model.XtaFile;
 import de.ozgcloud.xta.test.app.model.XtaGetMessageRequest;
+import de.ozgcloud.xta.test.app.model.XtaIdentifier;
 import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
 import de.ozgcloud.xta.test.app.model.XtaMessage;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
@@ -26,6 +27,7 @@ import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxCloseRequestType;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxFetchRequest;
 import genv3.eu.osci.ws.x2008.x05.transport.MsgBoxStatusListRequestType;
 import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData;
+import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
 import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
 import genv3.eu.osci.ws.x2014.x10.transport.QualifierType;
 
@@ -79,20 +81,22 @@ public interface RequestMapper {
 		return fetchRequest.getMsgSelector().getMessageID().getFirst().getValue();
 	}
 
-	@Mapping(target = "clientIdentifierValue", source = "clientIdentifier.identifier.value")
+	@Mapping(target = "clientIdentifier", source = "clientIdentifier.identifier")
 	@Mapping(target = "maxListItems", source = "fetchRequest.maxListItems")
 	XtaMessageMetaDataListingRequest mapMessageMetaDataListingRequest(MsgBoxStatusListRequestType fetchRequest, PartyType clientIdentifier);
 
+	XtaIdentifier mapXtaIdentifier(PartyIdentifierType partyType);
+
 	@Mapping(target = "messageId", source = "closeRequest.lastMsgReceived.first.value")
-	@Mapping(target = "clientIdentifierValue", source = "authorIdentifier.identifier.value")
+	@Mapping(target = "clientIdentifier", source = "authorIdentifier.identifier")
 	XtaCloseRequest mapXtaCloseRequest(MsgBoxCloseRequestType closeRequest, PartyType authorIdentifier);
 
 	@Mapping(target = "messageId", source = "fetchRequest.msgSelector.messageID.first.value")
-	@Mapping(target = "clientIdentifierValue", source = "authorIdentifier.identifier.value")
+	@Mapping(target = "clientIdentifier", source = "authorIdentifier.identifier")
 	XtaGetMessageRequest mapXtaGetMessageRequest(MsgBoxFetchRequest fetchRequest, PartyType authorIdentifier);
 
 	@Mapping(target = "service", source = "lookupServiceRequest.lookupServiceRequestList.first.lookupService.serviceType")
-	@Mapping(target = "readerIdentifierValue", source = "lookupServiceRequest.lookupServiceRequestList.first.lookupService.reader.identifier.value")
-	@Mapping(target = "authorIdentifierValue", source = "authorIdentifier.identifier.value")
+	@Mapping(target = "readerIdentifier", source = "lookupServiceRequest.lookupServiceRequestList.first.lookupService.reader.identifier")
+	@Mapping(target = "authorIdentifier", source = "authorIdentifier.identifier")
 	XtaLookupServiceRequest mapXtaLookupServiceRequest(LookupServiceRequest lookupServiceRequest, PartyType authorIdentifier);
 }
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 c7608a2..44b84a5 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
@@ -170,7 +170,7 @@ public interface ResponseMapper {
 
 	@Mapping(target = "isServiceAvailableValue.serviceIsAvailable", expression = "java( true )")
 	@Mapping(target = "serviceType", source = "service")
-	@Mapping(target = "reader.identifier.value", source = "readerIdentifierValue")
+	@Mapping(target = "reader.identifier", source = "readerIdentifier")
 	@Mapping(target = "serviceParameter", ignore = true)
 	LookupServiceResultType mapLookupServiceResultType(XtaLookupServiceRequest xtaLookupServiceRequest);
 
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 627be8b..d6d2ac2 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
@@ -2,6 +2,7 @@ package de.ozgcloud.xta.test.app.model;
 
 import static de.ozgcloud.xta.test.app.validation.ValidXtaId.*;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
 import jakarta.validation.constraints.NotNull;
 
@@ -11,6 +12,6 @@ import lombok.Builder;
 @Builder
 public record XtaCloseRequest(
 		@ValidXtaId(namespace = MESSAGE_ID_NAMESPACE) String messageId,
-		@NotNull @NotBlank String clientIdentifierValue
+		@NotNull @Valid XtaIdentifier clientIdentifier
 ) {
 }
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 c632b5f..443a9c6 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
@@ -2,7 +2,9 @@ package de.ozgcloud.xta.test.app.model;
 
 import static de.ozgcloud.xta.test.app.validation.ValidXtaId.*;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 
 import de.ozgcloud.xta.test.app.validation.ValidXtaId;
 import lombok.Builder;
@@ -10,6 +12,6 @@ import lombok.Builder;
 @Builder
 public record XtaGetMessageRequest(
 		@ValidXtaId(namespace = MESSAGE_ID_NAMESPACE) String messageId,
-		@NotBlank String clientIdentifierValue
+		@NotNull @Valid XtaIdentifier clientIdentifier
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaLookupServiceRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaLookupServiceRequest.java
index 02572b4..ab46e3b 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaLookupServiceRequest.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaLookupServiceRequest.java
@@ -1,13 +1,15 @@
 package de.ozgcloud.xta.test.app.model;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 
 import lombok.Builder;
 
 @Builder
 public record XtaLookupServiceRequest(
 		@NotBlank String service,
-		@NotBlank String readerIdentifierValue,
-		@NotBlank String authorIdentifierValue
+		@NotNull @Valid XtaIdentifier readerIdentifier,
+		@NotNull @Valid XtaIdentifier authorIdentifier
 ) {
 }
diff --git a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java
index 279014f..c19441d 100644
--- a/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java
+++ b/src/main/java/de/ozgcloud/xta/test/app/model/XtaMessageMetaDataListingRequest.java
@@ -1,13 +1,15 @@
 package de.ozgcloud.xta.test.app.model;
 
+import jakarta.validation.Valid;
 import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
 import jakarta.validation.constraints.Positive;
 
 import lombok.Builder;
 
 @Builder
 public record XtaMessageMetaDataListingRequest(
-		@NotBlank String clientIdentifierValue,
+		@NotNull @Valid XtaIdentifier clientIdentifier,
 		@Positive int maxListItems
 ) {
 }
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 f709010..d47d134 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
@@ -10,6 +10,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.service.XtaMessageService;
+import de.ozgcloud.xta.test.app.validation.RequestValidator;
 import genv3.de.xoev.transport.xta.x211.CancelDeniedException;
 import genv3.de.xoev.transport.xta.x211.InvalidMessageIDException;
 import genv3.de.xoev.transport.xta.x211.LookupServiceRequest;
@@ -30,6 +31,7 @@ public class ManagementPortImpl implements ManagementPortType {
 
 	private final ResponseMapper responseMapper;
 	private final RequestMapper requestMapper;
+	private final RequestValidator requestValidator;
 	private final XtaMessageService xtaMessageService;
 
 	/*
@@ -72,8 +74,8 @@ public class ManagementPortImpl implements ManagementPortType {
 			final genv3.eu.osci.ws.x2014.x10.transport.PartyType authorIdentifier)
 			throws XTAWSTechnicalProblemException, PermissionDeniedException, ParameterIsNotValidException {
 		log.info("Executing operation lookupService");
-
 		var request = requestMapper.mapXtaLookupServiceRequest(lookupServiceRequest, authorIdentifier);
+		requestValidator.validate(request);
 
 		return responseMapper.mapLookupServiceResponse(request);
 	}
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 8f24819..6e43533 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
@@ -50,7 +50,7 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 		requestValidator.validate(request);
 
 		var message = messageService.getMessage(request)
-				.orElseThrow(() -> createInvalidMessageIdException(request.messageId(), request.clientIdentifierValue()));
+				.orElseThrow(() -> createInvalidMessageIdException(request.messageId(), request.clientIdentifier().value()));
 
 		messageMetaData.value = responseMapper.mapMessageMetaData(message.metaData());
 		fetchResponseHeader.value = responseMapper.mapMsgBoxResponseTypeFromRequestId(
@@ -131,7 +131,7 @@ public class MsgBoxPortImpl implements MsgBoxPortType {
 		requestValidator.validate(request);
 
 		if (!messageService.closeMessage(request)) {
-			throw createInvalidMessageIdException(request.messageId(), request.clientIdentifierValue());
+			throw createInvalidMessageIdException(request.messageId(), request.clientIdentifier().value());
 		}
 	}
 
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 e4cffea..79864e4 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
@@ -4,8 +4,6 @@ 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;
@@ -33,9 +31,9 @@ public class XtaMessageService {
 
 	public XtaMessageMetaDataListing getStatusList(XtaMessageMetaDataListingRequest listingRequest) {
 		return XtaMessageMetaDataListing.builder()
-				.pendingMessageCount(messageRepository.countByReaderIdentifierValue(listingRequest.clientIdentifierValue()))
+				.pendingMessageCount(messageRepository.countByReaderIdentifierValue(listingRequest.clientIdentifier().value()))
 				.messages(getMetaData(messageRepository.findByReaderIdentifierValueLimitedTo(
-						listingRequest.clientIdentifierValue(),
+						listingRequest.clientIdentifier().value(),
 						listingRequest.maxListItems())))
 				.build();
 	}
@@ -48,7 +46,7 @@ public class XtaMessageService {
 
 	public Optional<XtaMessage> getMessage(XtaGetMessageRequest request) {
 		return messageRepository.get(request.messageId())
-				.filter(isAuthorOrReaderOfMessage(request.clientIdentifierValue()));
+				.filter(isAuthorOrReaderOfMessage(request.clientIdentifier().value()));
 	}
 
 	Predicate<XtaMessage> isAuthorOrReaderOfMessage(String clientIdentifierValue) {
@@ -59,7 +57,7 @@ public class XtaMessageService {
 	public boolean closeMessage(XtaCloseRequest request) {
 		return messageRepository.deleteByMessageIdAndReaderIdentifierValue(
 				request.messageId(),
-				request.clientIdentifierValue()
+				request.clientIdentifier().value()
 		);
 	}
 
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/LookupServiceRequestTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/LookupServiceRequestTestFactory.java
index b36a0ea..0c083b2 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/LookupServiceRequestTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/LookupServiceRequestTestFactory.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.xta.test.app.factory;
 
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
+
 import genv3.de.xoev.transport.xta.x211.LookupServiceRequest;
 import genv3.de.xoev.transport.xta.x211.LookupServiceType;
 import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
@@ -7,7 +9,6 @@ import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
 public class LookupServiceRequestTestFactory {
 	public static final String SERVICE_TYPE = "http://www.osci.de/xmeld181/xmeld181Rueckmeldung.wsdl";
 	public static final PartyType READER_PARTY_TYPE = createReaderPartyType();
-	public static final String LOOKUP_SERVICE_REQUEST_READER = "gae:reader";
 
 	public static LookupServiceRequest create() {
 		var lookupServiceRequest = new LookupServiceRequest();
@@ -32,8 +33,7 @@ public class LookupServiceRequestTestFactory {
 
 	private static PartyType createReaderPartyType() {
 		var readerPartyType = new PartyType();
-		var readerIdentifier = PartyIdentifierTypeTestFactory.createReader(LOOKUP_SERVICE_REQUEST_READER);
-		readerPartyType.setIdentifier(readerIdentifier);
+		readerPartyType.setIdentifier(READER_PARTY_IDENTIFIER);
 		return readerPartyType;
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/MessageMetaDataTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/MessageMetaDataTestFactory.java
index 085b413..99db136 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/MessageMetaDataTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/MessageMetaDataTestFactory.java
@@ -1,28 +1,27 @@
 package de.ozgcloud.xta.test.app.factory;
 
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
+
 import java.math.BigInteger;
 
 import org.apache.cxf.ws.addressing.AttributedURIType;
 
 import genv3.eu.osci.ws.x2014.x10.transport.MessageMetaData;
 import genv3.eu.osci.ws.x2014.x10.transport.MsgIdentificationType;
-import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
 import genv3.eu.osci.ws.x2014.x10.transport.QualifierType;
 
 public class MessageMetaDataTestFactory {
-	public static final BigInteger MESSAGE_SIZE = BigInteger.TEN;
+	public static final BigInteger MESSAGE_SIZE = BigInteger.valueOf(3000);
 	public static final String QUALIFER_SERVICE = "service";
 	public static final String QUALIFER_SUBJECT = "subject";
 	public static final String QUALIFER_MESSAGE_TYPE_CODE = "code";
 	public static final String QUALIFER_MESSAGE_TYPE_PAYLOAD_SCHEMA = "payloadSchema";
 	public static final String MESSAGE_ID = "de:xta:messageid:test-id";
-	public static final PartyIdentifierType AUTHOR_IDENTIFIER = PartyIdentifierTypeTestFactory.createAuthor("author");
-	public static final PartyIdentifierType READER_IDENTIFIER = PartyIdentifierTypeTestFactory.createReader("reader");
 
 	public static MessageMetaData create() {
 		var metaData = new MessageMetaData();
-		metaData.getOriginators().getAuthor().setIdentifier(AUTHOR_IDENTIFIER);
-		metaData.getDestinations().getReader().setIdentifier(READER_IDENTIFIER);
+		metaData.getOriginators().getAuthor().setIdentifier(AUTHOR_PARTY_IDENTIFIER);
+		metaData.getDestinations().getReader().setIdentifier(READER_PARTY_IDENTIFIER);
 		metaData.setMsgIdentification(createMsgIdentificationType(AttributedURITypeTestFactory.create(MESSAGE_ID)));
 		metaData.setQualifier(createQualifierType(new QualifierType.BusinessScenario()));
 		metaData.setMsgSize(MESSAGE_SIZE);
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/PartyIdentifierTypeTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/PartyIdentifierTypeTestFactory.java
index d7e4d21..6f33f6d 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/PartyIdentifierTypeTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/PartyIdentifierTypeTestFactory.java
@@ -4,23 +4,22 @@ import genv3.eu.osci.ws.x2014.x10.transport.PartyIdentifierType;
 
 public class PartyIdentifierTypeTestFactory {
 	public static final String PARTY_IDENTIFIER_TYPE = "xoev";
-	public static final String PARTY_IDENTIFIER_CATEGORY_AUTHOR = "AUTHOR";
-	public static final String PARTY_IDENTIFIER_CATEGORY_READER = "READER";
+	public static final String PARTY_IDENTIFIER_CATEGORY_READER = "READER-category";
+	public static final String PARTY_IDENTIFIER_NAME_READER = "READER-name";
+	public static final String PARTY_IDENTIFIER_VALUE_READER = "READER-value";
+	public static final String PARTY_IDENTIFIER_CATEGORY_AUTHOR = "AUTHOR-category";
+	public static final String PARTY_IDENTIFIER_NAME_AUTHOR = "AUTHOR-name";
+	public static final String PARTY_IDENTIFIER_VALUE_AUTHOR = "AUTHOR-value";
 
-	public static PartyIdentifierType createAuthor(String value) {
-		return create(value, PARTY_IDENTIFIER_CATEGORY_AUTHOR);
-	}
-
-	public static PartyIdentifierType createReader(String value) {
-		return create(value, PARTY_IDENTIFIER_CATEGORY_READER);
-	}
+	public static final PartyIdentifierType AUTHOR_PARTY_IDENTIFIER = create(PARTY_IDENTIFIER_VALUE_AUTHOR, PARTY_IDENTIFIER_NAME_AUTHOR, PARTY_IDENTIFIER_CATEGORY_AUTHOR);
+	public static final PartyIdentifierType READER_PARTY_IDENTIFIER = create(PARTY_IDENTIFIER_VALUE_READER, PARTY_IDENTIFIER_NAME_READER, PARTY_IDENTIFIER_CATEGORY_READER);
 
-	public static PartyIdentifierType create(String value, String category) {
+	private static PartyIdentifierType create(String value, String name, String category) {
 		var partyIdentifierType = new PartyIdentifierType();
-		partyIdentifierType.setName(value);
 		partyIdentifierType.setValue(value);
-		partyIdentifierType.setType(PARTY_IDENTIFIER_TYPE);
+		partyIdentifierType.setName(name);
 		partyIdentifierType.setCategory(category);
+		partyIdentifierType.setType(PARTY_IDENTIFIER_TYPE);
 		return partyIdentifierType;
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/PartyTypeTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/PartyTypeTestFactory.java
index 78e2af6..ab1da30 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/PartyTypeTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/PartyTypeTestFactory.java
@@ -1,6 +1,6 @@
 package de.ozgcloud.xta.test.app.factory;
 
-import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
 
 import genv3.eu.osci.ws.x2014.x10.transport.PartyType;
 
@@ -8,14 +8,13 @@ public class PartyTypeTestFactory {
 
 	public static PartyType create() {
 		var partyIdentifier = new PartyType();
-		partyIdentifier.setIdentifier(READER_IDENTIFIER);
+		partyIdentifier.setIdentifier(READER_PARTY_IDENTIFIER);
 		return partyIdentifier;
 	}
 
 	public static PartyType createWithAuthor() {
 		var partyIdentifier = new PartyType();
-		partyIdentifier.setIdentifier(AUTHOR_IDENTIFIER);
+		partyIdentifier.setIdentifier(AUTHOR_PARTY_IDENTIFIER);
 		return partyIdentifier;
 	}
-
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaCloseRequestTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaCloseRequestTestFactory.java
index 01815f0..4c78739 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaCloseRequestTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaCloseRequestTestFactory.java
@@ -1,11 +1,12 @@
 package de.ozgcloud.xta.test.app.factory;
 
+import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
+
 import de.ozgcloud.xta.test.app.model.XtaCloseRequest;
 
 public class XtaCloseRequestTestFactory {
 
 	public static final String CLOSE_REQUEST_MESSAGE_ID = "close-request-message-id";
-	public static final String READER_IDENTIFIER_VALUE = "reader-identifier";
 
 	public static XtaCloseRequest create() {
 		return createBuilder().build();
@@ -14,6 +15,6 @@ public class XtaCloseRequestTestFactory {
 	public static XtaCloseRequest.XtaCloseRequestBuilder createBuilder() {
 		return XtaCloseRequest.builder()
 				.messageId(CLOSE_REQUEST_MESSAGE_ID)
-				.clientIdentifierValue(READER_IDENTIFIER_VALUE);
+				.clientIdentifier(READER_IDENTIFIER);
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaLookupServiceRequestTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaLookupServiceRequestTestFactory.java
index 1062e28..32f7984 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaLookupServiceRequestTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaLookupServiceRequestTestFactory.java
@@ -1,12 +1,12 @@
 package de.ozgcloud.xta.test.app.factory;
 
+import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
+
 import de.ozgcloud.xta.test.app.model.XtaLookupServiceRequest;
 
 public class XtaLookupServiceRequestTestFactory {
 
 	public static String LOOKUP_SERVICE_SERVICE = "lookup-request-service";
-	public static String LOOKUP_SERVICE_READER_IDENTIFIER_VALUE = "reader-identifier-value";
-	public static String LOOKUP_SERVICE_AUTHOR_IDENTIFIER_VALUE = "author-identifier-value";
 
 	public static XtaLookupServiceRequest create() {
 		return createBuilder().build();
@@ -15,7 +15,7 @@ public class XtaLookupServiceRequestTestFactory {
 	public static XtaLookupServiceRequest.XtaLookupServiceRequestBuilder createBuilder() {
 		return XtaLookupServiceRequest.builder()
 				.service(LOOKUP_SERVICE_SERVICE)
-				.readerIdentifierValue(LOOKUP_SERVICE_READER_IDENTIFIER_VALUE)
-				.authorIdentifierValue(LOOKUP_SERVICE_AUTHOR_IDENTIFIER_VALUE);
+				.readerIdentifier(READER_IDENTIFIER)
+				.authorIdentifier(AUTHOR_IDENTIFIER);
 	}
 }
diff --git a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageMetaDataTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageMetaDataTestFactory.java
index bc26530..b6cdda7 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageMetaDataTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/factory/XtaMessageMetaDataTestFactory.java
@@ -1,14 +1,23 @@
 package de.ozgcloud.xta.test.app.factory;
 
-import java.math.BigInteger;
+import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
 
 import de.ozgcloud.xta.test.app.model.XtaIdentifier;
 import de.ozgcloud.xta.test.app.model.XtaMessageMetaData;
 
 public class XtaMessageMetaDataTestFactory {
 	public static final String DEFAULT_MESSAGE_ID = "defaultMessageId";
-	public static final XtaIdentifier AUTHOR_IDENTIFIER = createIdentifier("author", "AUTHOR");
-	public static final XtaIdentifier READER_IDENTIFIER = createIdentifier("reader", "READER");
+	public static final XtaIdentifier AUTHOR_IDENTIFIER = XtaIdentifier.builder()
+			.value(PARTY_IDENTIFIER_VALUE_AUTHOR)
+			.name(PARTY_IDENTIFIER_NAME_AUTHOR)
+			.category(PARTY_IDENTIFIER_CATEGORY_AUTHOR)
+			.build();
+	public static final XtaIdentifier READER_IDENTIFIER = XtaIdentifier.builder()
+			.value(PARTY_IDENTIFIER_VALUE_READER)
+			.name(PARTY_IDENTIFIER_NAME_READER)
+			.category(PARTY_IDENTIFIER_CATEGORY_READER)
+			.build();
 	public static final String SERVICE = "Service";
 	public static final String BUSINESS_SCENARIO_CODE = "BusinessScenarioCode";
 	public static final String BUSINESS_SCENARIO_NAME = "BusinessScenarioName";
@@ -16,7 +25,6 @@ public class XtaMessageMetaDataTestFactory {
 	public static final String BUSINESS_SCENARIO_LIST_VERSION_ID = "BusinessScenarioListVersionID";
 	public static final String MESSAGE_TYPE_CODE = "MessageTypeCode";
 	public static final String MESSAGE_PAYLOAD_SCHEMA = "MessageTypePayloadSchema";
-	public static final BigInteger MESSAGE_SIZE = BigInteger.valueOf(3000);
 
 	public static XtaMessageMetaData create() {
 		return createBuilder().build();
@@ -43,11 +51,4 @@ public class XtaMessageMetaDataTestFactory {
 				.messageSize(MESSAGE_SIZE);
 	}
 
-	private static XtaIdentifier createIdentifier(String value, String category) {
-		return XtaIdentifier.builder()
-				.value(value)
-				.name(value)
-				.category(category)
-				.build();
-	}
 }
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 ac1006d..0e6128c 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
@@ -3,6 +3,7 @@ package de.ozgcloud.xta.test.app.mapper;
 import static de.ozgcloud.xta.test.app.factory.LookupServiceRequestTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.MsgBoxCloseRequestTypeTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.MsgBoxFetchRequestTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
 import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
 import static org.assertj.core.api.Assertions.*;
 
@@ -37,12 +38,45 @@ 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 genv3.eu.osci.ws.x2014.x10.transport.PartyType;
 import lombok.SneakyThrows;
 
 public class RequestMapperTest {
 
-	private final RequestMapper requestMapper = Mappers.getMapper(RequestMapper.class);
+	private final RequestMapper mapper = Mappers.getMapper(RequestMapper.class);
+
+	@DisplayName("map XtaIdentifier")
+	@Nested
+	class TestMapXtaIdentifier {
+		private static final PartyIdentifierType CLIENT_IDENTIFIER = PartyTypeTestFactory.create().getIdentifier();
+
+		@DisplayName("should map name")
+		@Test
+		void shouldMapName() {
+			var result = doMapping();
+
+			assertThat(result.name()).isEqualTo(CLIENT_IDENTIFIER.getName());
+		}
+
+		@DisplayName("should map category")
+		@Test
+		void shouldMapCategory() {
+			var result = doMapping();
+
+			assertThat(result.category()).isEqualTo(CLIENT_IDENTIFIER.getCategory());
+		}
+
+		@DisplayName("should map value")
+		@Test
+		void shouldMapValue() {
+			var result = doMapping();
+
+			assertThat(result.value()).isEqualTo(CLIENT_IDENTIFIER.getValue());
+		}
+
+		private XtaIdentifier doMapping() {
+			return mapper.mapXtaIdentifier(CLIENT_IDENTIFIER);
+		}
+	}
 
 	@Nested
 	class MapXtaMessageFromGenericContentContainer {
@@ -65,7 +99,7 @@ public class RequestMapperTest {
 		@DisplayName("Should map message and attachment files from content container")
 		@Test
 		void shouldMapFiles() {
-			var xtaMessage = requestMapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
+			var xtaMessage = mapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
 			var messageFile = xtaMessage.messageFile();
 			var attachmentFiles = xtaMessage.attachmentFiles();
 
@@ -87,7 +121,7 @@ public class RequestMapperTest {
 		@DisplayName("Should map XtaMessageMetaData from MessageMetaData")
 		@Test
 		void shouldMapMetaData() {
-			var xtaMessage = requestMapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
+			var xtaMessage = mapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
 			var xtaMessageMetaData = xtaMessage.metaData();
 
 			assertThat(xtaMessageMetaData.service()).isEqualTo(MessageMetaDataTestFactory.QUALIFER_SERVICE);
@@ -100,12 +134,12 @@ public class RequestMapperTest {
 		@DisplayName("Should map author and reader identifiers from MessageMetaData")
 		@Test
 		void shouldMapIdentifier() {
-			var xtaMessage = requestMapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
+			var xtaMessage = mapper.mapXtaMessageFromGenericContentContainer(genericContentContainer, messageMetaData);
 			var authorIdentifier = xtaMessage.metaData().authorIdentifier();
 			var readerIdentifier = xtaMessage.metaData().readerIdentifier();
 
-			assertIdentifiersAreEqual(authorIdentifier, MessageMetaDataTestFactory.AUTHOR_IDENTIFIER);
-			assertIdentifiersAreEqual(readerIdentifier, MessageMetaDataTestFactory.READER_IDENTIFIER);
+			assertIdentifiersAreEqual(authorIdentifier, AUTHOR_PARTY_IDENTIFIER);
+			assertIdentifiersAreEqual(readerIdentifier, READER_PARTY_IDENTIFIER);
 		}
 
 		void assertIdentifiersAreEqual(XtaIdentifier identifier, PartyIdentifierType identifierType) {
@@ -120,7 +154,7 @@ public class RequestMapperTest {
 			var businessScenario = QualifierTypeBusinessScenarioTestFactory.createDefinedBusinessScenario();
 			messageMetaData.getQualifier().setBusinessScenario(businessScenario);
 
-			var xtaMessageMetaData = requestMapper.mapXtaMessageMetaData(messageMetaData);
+			var xtaMessageMetaData = mapper.mapXtaMessageMetaData(messageMetaData);
 
 			assertThat(xtaMessageMetaData.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE);
 			assertThat(xtaMessageMetaData.businessScenarioName()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_NAME);
@@ -135,7 +169,7 @@ public class RequestMapperTest {
 			var businessScenario = QualifierTypeBusinessScenarioTestFactory.createUndefinedBusinessScenario();
 			messageMetaData.getQualifier().setBusinessScenario(businessScenario);
 
-			var xtaMessageMetaData = requestMapper.mapXtaMessageMetaData(messageMetaData);
+			var xtaMessageMetaData = mapper.mapXtaMessageMetaData(messageMetaData);
 
 			assertThat(xtaMessageMetaData.businessScenarioCode()).isEqualTo(QualifierTypeBusinessScenarioTestFactory.BUSINESS_SCENARIO_CODE);
 			assertThat(xtaMessageMetaData.businessScenarioListUri()).isNull();
@@ -162,7 +196,7 @@ public class RequestMapperTest {
 		@DisplayName("Should map message id from MsgBoxRequest")
 		@Test
 		void shouldMapMessageId() {
-			var messageId = requestMapper.mapMessageIdFromMsgBoxFetchRequest(fetchRequest);
+			var messageId = mapper.mapMessageIdFromMsgBoxFetchRequest(fetchRequest);
 
 			assertThat(messageId).isEqualTo(MESSAGE_ID);
 		}
@@ -173,12 +207,14 @@ public class RequestMapperTest {
 	class TestMapMessageMetaDataListingRequest {
 		private static final int MAX_LIST_ITEMS = 10;
 
-		@DisplayName("should map client identifier value")
+		@DisplayName("should map client identifier")
 		@Test
-		void shouldMapClientIdentifierValue() {
+		void shouldMapClientIdentifier() {
 			var result = doMapping();
 
-			assertThat(result.clientIdentifierValue()).isEqualTo(READER_IDENTIFIER.value());
+			assertThat(result.clientIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_IDENTIFIER);
 		}
 
 		@DisplayName("should map max list items")
@@ -190,8 +226,10 @@ public class RequestMapperTest {
 		}
 
 		private XtaMessageMetaDataListingRequest doMapping() {
-			return requestMapper.mapMessageMetaDataListingRequest(MsgBoxStatusListRequestTypeTestFactory.create(MAX_LIST_ITEMS),
-					PartyTypeTestFactory.create());
+			return mapper.mapMessageMetaDataListingRequest(
+					MsgBoxStatusListRequestTypeTestFactory.create(MAX_LIST_ITEMS),
+					READER_PARTY_TYPE
+			);
 		}
 	}
 
@@ -206,16 +244,18 @@ public class RequestMapperTest {
 			assertThat(result.messageId()).isEqualTo(CLOSE_REQUEST_MESSAGE_ID);
 		}
 
-		@DisplayName("should map client identifier value")
+		@DisplayName("should map client identifier")
 		@Test
-		void shouldMapClientIdentifierValue() {
+		void shouldMapClientIdentifier() {
 			var result = doMapping();
 
-			assertThat(result.clientIdentifierValue()).isEqualTo(READER_IDENTIFIER.value());
+			assertThat(result.clientIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_IDENTIFIER);
 		}
 
 		private XtaCloseRequest doMapping() {
-			return requestMapper.mapXtaCloseRequest(MsgBoxCloseRequestTypeTestFactory.create(),
+			return mapper.mapXtaCloseRequest(MsgBoxCloseRequestTypeTestFactory.create(),
 					PartyTypeTestFactory.create());
 		}
 	}
@@ -231,16 +271,18 @@ public class RequestMapperTest {
 			assertThat(result.messageId()).isEqualTo(GET_MESSAGE_REQUEST_MESSAGE_ID);
 		}
 
-		@DisplayName("should map client identifier value")
+		@DisplayName("should map client identifier")
 		@Test
-		void shouldMapClientIdentifierValue() {
+		void shouldMapClientIdentifier() {
 			var result = doMapping();
 
-			assertThat(result.clientIdentifierValue()).isEqualTo(READER_IDENTIFIER.value());
+			assertThat(result.clientIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_IDENTIFIER);
 		}
 
 		private XtaGetMessageRequest doMapping() {
-			return requestMapper.mapXtaGetMessageRequest(MsgBoxFetchRequestTestFactory.create(),
+			return mapper.mapXtaGetMessageRequest(MsgBoxFetchRequestTestFactory.create(),
 					PartyTypeTestFactory.create());
 		}
 	}
@@ -248,7 +290,6 @@ public class RequestMapperTest {
 	@DisplayName("map xta lookup service request")
 	@Nested
 	class TestMapXtaLookupServiceRequest {
-		private static final PartyType partyType = PartyTypeTestFactory.create();
 
 		@DisplayName("should map service")
 		@Test
@@ -258,12 +299,14 @@ public class RequestMapperTest {
 			assertThat(result.service()).isEqualTo(SERVICE_TYPE);
 		}
 
-		@DisplayName("should map reader identifier value")
+		@DisplayName("should map reader identifier")
 		@Test
-		void shouldMapReaderIdentifierValue() {
+		void shouldMapReaderIdentifier() {
 			var result = doMapping();
 
-			assertThat(result.readerIdentifierValue()).isEqualTo(LOOKUP_SERVICE_REQUEST_READER);
+			assertThat(result.readerIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_IDENTIFIER);
 		}
 
 		@DisplayName("should map author identifier value")
@@ -271,12 +314,14 @@ public class RequestMapperTest {
 		void shouldMapAuthorIdentifierValue() {
 			var result = doMapping();
 
-			assertThat(result.authorIdentifierValue()).isEqualTo(partyType.getIdentifier().getValue());
+			assertThat(result.authorIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(AUTHOR_IDENTIFIER);
 		}
 
 		private XtaLookupServiceRequest doMapping() {
-			return requestMapper.mapXtaLookupServiceRequest(LookupServiceRequestTestFactory.create(),
-					partyType);
+			return mapper.mapXtaLookupServiceRequest(LookupServiceRequestTestFactory.create(),
+					PartyTypeTestFactory.createWithAuthor());
 		}
 	}
 
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 07d8b77..fee8821 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,5 +1,7 @@
 package de.ozgcloud.xta.test.app.mapper;
 
+import static de.ozgcloud.xta.test.app.factory.MessageMetaDataTestFactory.*;
+import static de.ozgcloud.xta.test.app.factory.PartyIdentifierTypeTestFactory.*;
 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.*;
@@ -452,12 +454,14 @@ public class ResponseMapperTest {
 			assertThat(result.getServiceType()).isEqualTo(LOOKUP_SERVICE_SERVICE);
 		}
 
-		@DisplayName("should map reader identifier value")
+		@DisplayName("should map reader identifier")
 		@Test
-		void shouldMapReaderIdentifierValue() {
+		void shouldMapReaderIdentifier() {
 			var result = getFirstLookupServiceResult();
 
-			assertThat(result.getReader().getIdentifier().getValue()).isEqualTo(LOOKUP_SERVICE_READER_IDENTIFIER_VALUE);
+			assertThat(result.getReader().getIdentifier())
+					.usingRecursiveComparison()
+					.isEqualTo(READER_PARTY_IDENTIFIER);
 		}
 
 		@DisplayName("should map service is available value")
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 9e83bfc..6574133 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
@@ -16,6 +16,7 @@ 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.service.XtaMessageService;
+import de.ozgcloud.xta.test.app.validation.RequestValidator;
 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;
@@ -32,6 +33,8 @@ public class ManagementPortImplTest {
 	private ResponseMapper responseMapper;
 	@Mock
 	private RequestMapper requestMapper;
+	@Mock
+	private RequestValidator requestValidator;
 
 	@DisplayName("create message id")
 	@Nested
@@ -92,6 +95,15 @@ public class ManagementPortImplTest {
 			when(responseMapper.mapLookupServiceResponse(request)).thenReturn(response);
 		}
 
+		@DisplayName("should validate request")
+		@Test
+		@SneakyThrows
+		void shouldValidateRequest() {
+			managementPortImpl.lookupService(lookupServiceRequest, authorIdentifier);
+
+			verify(requestValidator).validate(request);
+		}
+
 		@DisplayName("should return")
 		@Test
 		@SneakyThrows
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 96c321e..0caf897 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.factory.XtaMessageMetaDataTestFactory.*;
 import static de.ozgcloud.xta.test.app.mapper.ResponseMapper.*;
 import static org.assertj.core.api.Assertions.*;
 import static org.mockito.ArgumentMatchers.*;
@@ -62,7 +63,6 @@ public class MsgBoxPortImplTest {
 	@Nested
 	class TestGetMessage {
 		private static final String MESSAGE_ID = "message-id";
-		private static final String CLIENT_IDENTIFIER_VALUE = "client-identifier";
 
 		@Mock
 		private MsgBoxFetchRequest fetchRequest;
@@ -85,7 +85,7 @@ public class MsgBoxPortImplTest {
 		void mock() {
 			request = XtaGetMessageRequest.builder()
 					.messageId(MESSAGE_ID)
-					.clientIdentifierValue(CLIENT_IDENTIFIER_VALUE)
+					.clientIdentifier(READER_IDENTIFIER)
 					.build();
 
 			messageMetaDataHolder = new Holder<>();
@@ -268,7 +268,7 @@ public class MsgBoxPortImplTest {
 		void mock() {
 			request = XtaCloseRequest.builder()
 					.messageId(MESSAGE_ID)
-					.clientIdentifierValue(TestGetMessage.CLIENT_IDENTIFIER_VALUE)
+					.clientIdentifier(READER_IDENTIFIER)
 					.build();
 			when(requestMapper.mapXtaCloseRequest(closeRequest, authorIdentifier)).thenReturn(request);
 		}
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 80599ee..495193a 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
@@ -67,7 +67,7 @@ public class XtaMessageServiceTest {
 		private final int MESSAGE_COUNT = 2;
 
 		private final XtaMessageMetaDataListingRequest messageMetaDataListingRequest = XtaMessageMetaDataListingRequest.builder()
-				.clientIdentifierValue(READER_IDENTIFIER.value())
+				.clientIdentifier(READER_IDENTIFIER)
 				.maxListItems(MAX_LIST_ITEMS)
 				.build();
 
@@ -109,7 +109,7 @@ public class XtaMessageServiceTest {
 	class TestGetMessage {
 		private static final XtaGetMessageRequest GET_MESSAGE_REQUEST = XtaGetMessageRequest.builder()
 				.messageId(MESSAGE_ID_1)
-				.clientIdentifierValue(READER_IDENTIFIER.value())
+				.clientIdentifier(READER_IDENTIFIER)
 				.build();
 		private static final Predicate<XtaMessage> IS_AUTHOR_OR_READER = m -> true;
 		private static final Predicate<XtaMessage> IS_NOT_AUTHOR_OR_READER = m -> false;
@@ -195,7 +195,7 @@ public class XtaMessageServiceTest {
 		void shouldReturn(boolean deleted) {
 			var request = XtaCloseRequestTestFactory.create();
 			when(messageRepository.deleteByMessageIdAndReaderIdentifierValue(
-					request.messageId(), request.clientIdentifierValue())
+					request.messageId(), request.clientIdentifier().value())
 			).thenReturn(deleted);
 
 			boolean result = service.closeMessage(request);
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 23e1264..a8775f2 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
@@ -11,6 +11,7 @@ import org.mockito.InjectMocks;
 import org.mockito.Mock;
 
 import de.ozgcloud.xta.test.app.mapper.ExceptionMapper;
+import de.ozgcloud.xta.test.app.model.XtaIdentifier;
 import genv3.de.xoev.transport.xta.x211.XTAWSTechnicalProblemException;
 import lombok.SneakyThrows;
 
@@ -33,7 +34,11 @@ class RequestValidatorTest {
 		@Test
 		@SneakyThrows
 		void shouldReturn() {
-			validator.validate(XtaGetMessageRequestTestFactory.create());
+			validator.validate(XtaGetMessageRequestTestFactory.createBuilder()
+					.clientIdentifier(XtaIdentifier.builder()
+							.value("not blank")
+							.build())
+					.build());
 		}
 
 		@DisplayName("should throw if null")
@@ -73,11 +78,13 @@ class RequestValidatorTest {
 				assertThatThrownBy(() -> validator.validate(request)).isEqualTo(exception);
 			}
 
-			@DisplayName("should throw if clientIdentifierValue is null")
+			@DisplayName("should throw if clientIdentifier value is null")
 			@Test
 			void shouldThrowIfClientIdentifierValueIsNull() {
 				var request = XtaGetMessageRequestTestFactory.createBuilder()
-						.clientIdentifierValue(null)
+						.clientIdentifier(XtaIdentifier.builder()
+								.value(null)
+								.build())
 						.build();
 
 				assertThatThrownBy(() -> validator.validate(request)).isEqualTo(exception);
diff --git a/src/test/java/de/ozgcloud/xta/test/app/validation/XtaGetMessageRequestTestFactory.java b/src/test/java/de/ozgcloud/xta/test/app/validation/XtaGetMessageRequestTestFactory.java
index 7ec8f61..e410ffc 100644
--- a/src/test/java/de/ozgcloud/xta/test/app/validation/XtaGetMessageRequestTestFactory.java
+++ b/src/test/java/de/ozgcloud/xta/test/app/validation/XtaGetMessageRequestTestFactory.java
@@ -1,15 +1,16 @@
 package de.ozgcloud.xta.test.app.validation;
 
+import static de.ozgcloud.xta.test.app.factory.XtaMessageMetaDataTestFactory.*;
+
 import de.ozgcloud.xta.test.app.model.XtaGetMessageRequest;
 
 public class XtaGetMessageRequestTestFactory {
 	public static String VALID_MESSAGE_ID = "urn:de:xta:messageid:application:000ca2fe-f4e1-45c2-8233-3a0eb760bd16";
-	public static String VALID_CLIENT_IDENTIFIER_VALUE = "prefix:someValue";
 
 	public static XtaGetMessageRequest.XtaGetMessageRequestBuilder createBuilder() {
 		return XtaGetMessageRequest.builder()
 				.messageId(VALID_MESSAGE_ID)
-				.clientIdentifierValue(VALID_CLIENT_IDENTIFIER_VALUE);
+				.clientIdentifier(READER_IDENTIFIER);
 	}
 
 	public static XtaGetMessageRequest create() {
-- 
GitLab