diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaConfiguration.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaConfiguration.java
index a58411a47551496e1813c02934e5310ef4c91188..8ffe47ae143539920df0c69ab94c4d151e92e339 100644
--- a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaConfiguration.java
+++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaConfiguration.java
@@ -2,6 +2,10 @@ package de.ozgcloud.archive.common.xta;
 
 import java.io.IOException;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
@@ -58,4 +62,9 @@ class XtaConfiguration {
 	ObjectMapper objectMapper() {
 		return new ObjectMapper();
 	}
+
+	@Bean
+	DocumentBuilder documentBuilder() throws ParserConfigurationException {
+		return DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder();
+	}
 }
diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileParser.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..70e10b3348bd4b3581df8a75e222c6e5865397df
--- /dev/null
+++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileParser.java
@@ -0,0 +1,41 @@
+package de.ozgcloud.archive.common.xta;
+
+import java.io.IOException;
+
+import javax.xml.parsers.DocumentBuilder;
+
+import org.springframework.stereotype.Component;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+import de.ozgcloud.xta.client.model.XtaFile;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.log4j.Log4j2;
+
+@Log4j2
+@RequiredArgsConstructor
+@Component
+public class XtaFileParser {
+
+	private final DocumentBuilder documentBuilder;
+
+	public boolean isType(XtaFile file, XtaFileType type) {
+		try {
+			var doc = parse(file);
+			return type.getTypeStr().equals(getRootTagName(doc));
+		} catch (Exception e) {
+			LOG.warn("Error parsing xta file.", e);
+			return false;
+		}
+	}
+
+	Document parse(XtaFile file) throws SAXException, IOException {
+		var document = documentBuilder.parse(file.content().getDataSource().getInputStream());
+		document.getDocumentElement().normalize();
+		return document;
+	}
+
+	private String getRootTagName(Document doc) {
+		return doc.getDocumentElement().getTagName();
+	}
+}
\ No newline at end of file
diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java
deleted file mode 100644
index b1fa014a4390a3c9e96fac8e58f33ef309e42099..0000000000000000000000000000000000000000
--- a/archive-manager-server/src/main/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtils.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package de.ozgcloud.archive.common.xta;
-
-import java.io.IOException;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-import de.ozgcloud.xta.client.model.XtaFile;
-import lombok.AccessLevel;
-import lombok.NoArgsConstructor;
-import lombok.extern.log4j.Log4j2;
-
-@Log4j2
-@NoArgsConstructor(access = AccessLevel.PRIVATE)
-public class XtaFileXmlUtils {
-
-	public static boolean isType(XtaFile file, XtaFileType type) {
-		try {
-			var doc = XtaFileXmlUtils.parse(file);
-			return type.getTypeStr().equals(XtaFileXmlUtils.getRootTagName(doc));
-		} catch (Exception e) {
-			LOG.warn("Error parsing xta file.", e);
-			return false;
-		}
-	}
-
-	private static String getRootTagName(Document doc) {
-		return doc.getDocumentElement().getTagName();
-	}
-
-	static Document parse(XtaFile file) throws SAXException, IOException, ParserConfigurationException {
-		var document = XtaFileXmlUtils.createDocumentBuilder().parse(file.content().getDataSource().getInputStream());
-		document.getDocumentElement().normalize();
-		return document;
-	}
-
-	private static DocumentBuilder createDocumentBuilder() throws ParserConfigurationException {
-		return DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder();
-	}
-}
\ No newline at end of file
diff --git a/archive-manager-server/src/main/java/de/ozgcloud/archive/quittung/QuittungService.java b/archive-manager-server/src/main/java/de/ozgcloud/archive/quittung/QuittungService.java
index f80e00d71a0af61ccf86f2f3b703bc590ed16e2e..08df946a4f2ec6537405ba4ed79c37defa4fa9a7 100644
--- a/archive-manager-server/src/main/java/de/ozgcloud/archive/quittung/QuittungService.java
+++ b/archive-manager-server/src/main/java/de/ozgcloud/archive/quittung/QuittungService.java
@@ -10,8 +10,8 @@ import de.ozgcloud.archive.common.command.ArchiveManagerCommand;
 import de.ozgcloud.archive.common.command.CommandOrder;
 import de.ozgcloud.archive.common.command.CommandService;
 import de.ozgcloud.archive.common.xta.XtaFileHelper;
+import de.ozgcloud.archive.common.xta.XtaFileParser;
 import de.ozgcloud.archive.common.xta.XtaFileType;
-import de.ozgcloud.archive.common.xta.XtaFileXmlUtils;
 import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeAdapter;
 import de.ozgcloud.archive.common.xta.XtaService;
 import de.ozgcloud.command.Command;
@@ -29,6 +29,7 @@ class QuittungService {
 
 	private final XtaService xtaService;
 	private final XtaFileHelper xtaFileHelper;
+	private final XtaFileParser xtaFileParser;
 
 	private final CommandService commandService;
 
@@ -45,7 +46,7 @@ class QuittungService {
 	}
 
 	boolean isImportConfirmation(XtaFile xtaFile) {
-		return XtaFileXmlUtils.isType(xtaFile, XtaFileType.IMPORT_CONFIRMATION);
+		return xtaFileParser.isType(xtaFile, XtaFileType.IMPORT_CONFIRMATION);
 	}
 
 	void handleAbgabe(XtaAbgabeAdapter abgabeHandler) {
diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/AbgabeImportBestaetigen0402TestFactory.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/AbgabeImportBestaetigen0402TestFactory.java
index 1b7e8be653f0d5b7d46473310006f4e64c3d2f69..d034a25e99f4699183b736593be47bde4b271d41 100644
--- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/AbgabeImportBestaetigen0402TestFactory.java
+++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/AbgabeImportBestaetigen0402TestFactory.java
@@ -29,6 +29,6 @@ public class AbgabeImportBestaetigen0402TestFactory {
 
 	@SneakyThrows
 	public static Document createAsDocument() {
-		return XtaFileXmlUtils.parse(XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH));
+		return DocumentTestFactory.createFrom(XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH));
 	}
 }
\ No newline at end of file
diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/DocumentTestFactory.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/DocumentTestFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..36d4a24ef635b9f1b8f17493cf3cf86dfd21815d
--- /dev/null
+++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/DocumentTestFactory.java
@@ -0,0 +1,23 @@
+package de.ozgcloud.archive.common.xta;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+
+import de.ozgcloud.xta.client.model.XtaFile;
+import lombok.SneakyThrows;
+
+public class DocumentTestFactory {
+
+	public static final XtaFile FILE = XtaFileTestFactory.create();
+
+	public static Document create() {
+		return createFrom(FILE);
+	}
+
+	@SneakyThrows
+	public static Document createFrom(XtaFile file) {
+		return DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder().parse(file.content().getDataSource().getInputStream());
+	}
+
+}
diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileParserITCase.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileParserITCase.java
new file mode 100644
index 0000000000000000000000000000000000000000..47cca112e543d89778b4f4ce4764d3c754d44a4e
--- /dev/null
+++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileParserITCase.java
@@ -0,0 +1,38 @@
+package de.ozgcloud.archive.common.xta;
+
+import static org.assertj.core.api.Assertions.*;
+
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import de.ozgcloud.common.test.ITCase;
+
+@ITCase
+class XtaFileParserITCase {
+
+	@Autowired
+	private XtaFileParser parser;
+
+	@DisplayName("Is import confirmation")
+	@Nested
+	class TestIsType {
+
+		@Test
+		void shouldReturnTrueOnMatchingTag() {
+			var isImportConfirmation = parser.isType(XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH),
+					XtaFileType.IMPORT_CONFIRMATION);
+
+			assertThat(isImportConfirmation).isTrue();
+		}
+
+		@Test
+		void shouldReturnFalseOnNonMatchingTag() {
+			var isImportConfirmation = parser.isType(XtaFileTestFactory.create(), XtaFileType.ABGABE);
+
+			assertThat(isImportConfirmation).isFalse();
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileParserTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileParserTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..2f3713ad2b66b577bbda5200903e45f5fffc2cb2
--- /dev/null
+++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileParserTest.java
@@ -0,0 +1,124 @@
+package de.ozgcloud.archive.common.xta;
+
+import static org.assertj.core.api.Assertions.*;
+import static org.mockito.ArgumentMatchers.*;
+import static org.mockito.Mockito.*;
+
+import java.io.InputStream;
+
+import javax.xml.parsers.DocumentBuilder;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DisplayName;
+import org.junit.jupiter.api.Nested;
+import org.junit.jupiter.api.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Captor;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.springframework.core.io.ClassPathResource;
+import org.w3c.dom.Document;
+
+import de.ozgcloud.common.errorhandling.TechnicalException;
+import de.ozgcloud.xta.client.model.XtaFile;
+import lombok.SneakyThrows;
+
+class XtaFileParserTest {
+
+	@Spy
+	@InjectMocks
+	private XtaFileParser parser;
+
+	@Mock
+	private DocumentBuilder documentBuilder;
+
+	@DisplayName("Is import confirmation")
+	@Nested
+	class TestIsType {
+
+		private final XtaFile file = XtaFileTestFactory.create();
+
+		@Test
+		@SneakyThrows
+		void shouldCallParse() {
+			isType();
+
+			verify(parser).parse(file);
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldReturnTrueOnMatchingTag() {
+			doReturn(AbgabeImportBestaetigen0402TestFactory.createAsDocument()).when(parser).parse(file);
+
+			var isImportConfirmation = isType();
+
+			assertThat(isImportConfirmation).isTrue();
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldReturnFalseOnNonMatchingTag() {
+			doReturn(DocumentTestFactory.create()).when(parser).parse(file);
+
+			var isImportConfirmation = isType();
+
+			assertThat(isImportConfirmation).isFalse();
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldReturnFalseOnException() {
+			doThrow(TechnicalException.class).when(parser).parse(any());
+
+			var isType = isType();
+
+			assertThat(isType).isFalse();
+		}
+
+		private boolean isType() {
+			return parser.isType(file, XtaFileType.IMPORT_CONFIRMATION);
+		}
+	}
+
+	@Nested
+	class TestParse {
+
+		private final XtaFile file = XtaFileTestFactory.create();
+		private final Document document = AbgabeImportBestaetigen0402TestFactory.createAsDocument();
+
+		@Captor
+		private ArgumentCaptor<InputStream> inputStreamCaptor;
+
+		@BeforeEach
+		@SneakyThrows
+		void mock() {
+			when(documentBuilder.parse(any(InputStream.class))).thenReturn(document);
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldCallDocumentBuilder() {
+			var expectedBytes = new ClassPathResource(XtaFileTestFactory.DUMMY_XML_FILE_PATH).getContentAsByteArray();
+
+			parse();
+
+			verify(documentBuilder).parse(inputStreamCaptor.capture());
+			assertThat(inputStreamCaptor.getValue().readAllBytes()).isEqualTo(expectedBytes);
+		}
+
+		@Test
+		@SneakyThrows
+		void shouldReturnDocument() {
+			var result = parse();
+
+			assertThat(result).isEqualTo(document);
+		}
+
+		@SneakyThrows
+		private Document parse() {
+			return parser.parse(file);
+		}
+	}
+}
\ No newline at end of file
diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileTestFactory.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileTestFactory.java
index 35183dd9596733ce0d852458863f3a8b8ff1b6bd..4e03b8db6ffae2c86c18f18e07b03bda9231cb98 100644
--- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileTestFactory.java
+++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileTestFactory.java
@@ -10,7 +10,7 @@ import lombok.SneakyThrows;
 
 public class XtaFileTestFactory {
 
-	private static final String DUMMY_XML_FILE_PATH = "xml-templates/dummy.xml";
+	public static final String DUMMY_XML_FILE_PATH = "xml-templates/dummy.xml";
 
 	public static XtaFile create() {
 		return create(DUMMY_XML_FILE_PATH);
diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java
deleted file mode 100644
index 9da78a09c2fd11e1c138a3dda8b39a5f73b873b7..0000000000000000000000000000000000000000
--- a/archive-manager-server/src/test/java/de/ozgcloud/archive/common/xta/XtaFileXmlUtilsTest.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package de.ozgcloud.archive.common.xta;
-
-import static org.assertj.core.api.Assertions.*;
-import static org.mockito.ArgumentMatchers.*;
-
-import java.util.function.Consumer;
-
-import org.junit.jupiter.api.DisplayName;
-import org.junit.jupiter.api.Nested;
-import org.junit.jupiter.api.Test;
-import org.mockito.MockedStatic;
-import org.mockito.Mockito;
-
-import de.ozgcloud.common.errorhandling.TechnicalException;
-
-class XtaFileXmlUtilsTest {
-
-	@DisplayName("Is import confirmation")
-	@Nested
-	class TestIsType {
-
-		@Test
-		void shouldReturnTrueOnMatchingTag() {
-			var isImportConfirmation = XtaFileXmlUtils.isType(XtaFileTestFactory.create(AbgabeImportBestaetigen0402TestFactory.FILE_PATH),
-					XtaFileType.IMPORT_CONFIRMATION);
-
-			assertThat(isImportConfirmation).isTrue();
-		}
-
-		@Test
-		void shouldReturnFalseOnNonMatchingTag() {
-			var isImportConfirmation = XtaFileXmlUtils.isType(XtaFileTestFactory.create(), XtaFileType.ABGABE);
-
-			assertThat(isImportConfirmation).isFalse();
-		}
-
-		@Test
-		void shouldReturnFalseOnException() {
-			mockStatic(XtaFileXmlUtils.class, mock -> {
-				mock.when(() -> XtaFileXmlUtils.parse(any())).thenThrow(new TechnicalException("DummyException"));
-
-				var isType = XtaFileXmlUtils.isType(XtaFileTestFactory.create(), XtaFileType.IMPORT_CONFIRMATION);
-				assertThat(isType).isFalse();
-			});
-		}
-
-		private <T> void mockStatic(Class<T> clazz, Consumer<MockedStatic<T>> mockConfigurer) {
-			try (var staticMock = Mockito.mockStatic(clazz, Mockito.CALLS_REAL_METHODS)) {
-				mockConfigurer.accept(staticMock);
-			}
-		}
-	}
-}
\ No newline at end of file
diff --git a/archive-manager-server/src/test/java/de/ozgcloud/archive/quittung/QuittungServiceTest.java b/archive-manager-server/src/test/java/de/ozgcloud/archive/quittung/QuittungServiceTest.java
index e2c6e9cd8d066e42cfceccacdf0edff16b2f44af..dc5082c545173554aaae0adf6f0e967b4565258b 100644
--- a/archive-manager-server/src/test/java/de/ozgcloud/archive/quittung/QuittungServiceTest.java
+++ b/archive-manager-server/src/test/java/de/ozgcloud/archive/quittung/QuittungServiceTest.java
@@ -12,6 +12,8 @@ import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.DisplayName;
 import org.junit.jupiter.api.Nested;
 import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.ValueSource;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
 import org.mockito.InjectMocks;
@@ -25,6 +27,9 @@ import de.ozgcloud.archive.common.command.CommandService;
 import de.ozgcloud.archive.common.command.CommandTestFactory;
 import de.ozgcloud.archive.common.xta.AbgabeImportBestaetigen0402TestFactory;
 import de.ozgcloud.archive.common.xta.XtaFileHelper;
+import de.ozgcloud.archive.common.xta.XtaFileParser;
+import de.ozgcloud.archive.common.xta.XtaFileTestFactory;
+import de.ozgcloud.archive.common.xta.XtaFileType;
 import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler;
 import de.ozgcloud.archive.common.xta.XtaImportConfirmationHandler.XtaAbgabeAdapter;
 import de.ozgcloud.archive.common.xta.XtaMessageTestFactory;
@@ -32,6 +37,7 @@ import de.ozgcloud.archive.common.xta.XtaService;
 import de.ozgcloud.archive.vorgang.VorgangWithEingangTestFactory;
 import de.ozgcloud.command.CommandExecutedEvent;
 import de.ozgcloud.command.CommandFailedEvent;
+import de.ozgcloud.xta.client.model.XtaFile;
 import de.ozgcloud.xta.client.model.XtaMessage;
 
 class QuittungServiceTest {
@@ -47,6 +53,8 @@ class QuittungServiceTest {
 	private ApplicationEventPublisher eventPublisher;
 	@Mock
 	private XtaFileHelper xtaFileHelper;
+	@Mock
+	private XtaFileParser xtaFileParser;
 
 	@Nested
 	class TestFetchQuittung {
@@ -132,6 +140,30 @@ class QuittungServiceTest {
 		}
 	}
 
+	@Nested
+	class TestIsImportConfirmation {
+
+		private XtaFile xtaFile = XtaFileTestFactory.create();
+
+		@Test
+		void shouldCallXtaFileParser() {
+			service.isImportConfirmation(xtaFile);
+
+			verify(xtaFileParser).isType(xtaFile, XtaFileType.IMPORT_CONFIRMATION);
+		}
+
+		@ParameterizedTest
+		@ValueSource(booleans = { true, false })
+		void shouldReturnIsType(boolean isImportConfirmation) {
+			when(xtaFileParser.isType(any(), any())).thenReturn(isImportConfirmation);
+
+			var returnValue = service.isImportConfirmation(xtaFile);
+
+			assertThat(returnValue).isEqualTo(isImportConfirmation);
+		}
+
+	}
+
 	@DisplayName("Handle abgabe")
 	@Nested
 	class TestHandleAbgabe {