diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
index d5a8d537c84074c7a8bd5849fd744b320eeb3820..f8643d2fb5221c5e3585e4436c757a015cb7d3ee 100644
--- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
+++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java
@@ -4,6 +4,7 @@ import static java.util.Collections.*;
 
 import java.util.Collection;
 import java.util.List;
+import java.util.Optional;
 import java.util.Spliterators;
 import java.util.stream.Stream;
 import java.util.stream.StreamSupport;
@@ -44,7 +45,10 @@ class XtaService {
 	private XtaCurrentIdentifierService service;
 
 	public Stream<FormData> getMessages() {
-		return createXtaMessageStream().filter(this::isSupportedMessageType).map(this::getFormData);
+		return createXtaMessageStream()
+				.filter(this::isSupportedMessageType)
+				.map(this::getFormDataIfNoRuntimeException)
+				.flatMap(Optional::stream);
 	}
 
 	Stream<XtaMessageMetaData> createXtaMessageStream() {
@@ -66,7 +70,16 @@ class XtaService {
 		return false;
 	}
 
-	public FormData getFormData(@NonNull XtaMessageMetaData metaData) {
+	Optional<FormData> getFormDataIfNoRuntimeException(@NonNull XtaMessageMetaData metaData) {
+		try {
+			return Optional.of(getFormData(metaData));
+		} catch (RuntimeException exception) {
+			LOG.error("Failed to process xta message (id: %s)".formatted(metaData.getMessageId()), exception);
+			return Optional.empty();
+		}
+	}
+
+	FormData getFormData(@NonNull XtaMessageMetaData metaData) {
 		var msg = remoteService.getMessage(metaData.getMessageId());
 		var incomingFiles = xtaIncomingFilesMapper.toIncomingFiles(msg.getMessageFiles());
 		var representationsAttachmentsPair = getRepresentationsAttachmentsPair(metaData, incomingFiles);
diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
index 374d71632023fb10b42f1698b4b7c44d1e462445..2d73c58212d230db5235b25e502bbb7f5ab08949 100644
--- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
+++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java
@@ -6,6 +6,7 @@ import static org.mockito.ArgumentMatchers.*;
 import static org.mockito.Mockito.*;
 
 import java.util.List;
+import java.util.Optional;
 import java.util.stream.Stream;
 
 import org.junit.jupiter.api.BeforeEach;
@@ -49,52 +50,93 @@ class XtaServiceTest {
 	@Mock
 	private XtaCurrentIdentifierService currentIdentifierService;
 
+	@Mock
+	private FormData formData;
+
+	@Mock
+	private FormData formData2;
+
 	@Nested
 	class TestGetMessagesAsFormData {
 
 		private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create();
 		private final XtaMessage message = XtaMessageTestFactory.create();
 
-		@BeforeEach
-		void setup() {
-			doReturn(Stream.of(messageMetaData)).when(service).createXtaMessageStream();
-		}
+		@DisplayName("with one message")
+		@Nested
+		class TestWithOneMessage {
+			@BeforeEach
+			void setup() {
+				doReturn(Stream.of(messageMetaData)).when(service).createXtaMessageStream();
+			}
 
-		@Test
-		void shouldCallCreateStream() {
-			service.getMessages();
+			@Test
+			void shouldCallCreateStream() {
+				service.getMessages();
 
-			verify(service).createXtaMessageStream();
-		}
+				verify(service).createXtaMessageStream();
+			}
 
-		@Test
-		void shouldCallFilterByMessageType() {
-			setupMocks();
+			@Test
+			void shouldCallFilterByMessageType() {
+				setupMocks();
 
-			service.getMessages().toList();
+				service.getMessages().toList();
 
-			verify(service).isSupportedMessageType(messageMetaData);
-		}
+				verify(service).isSupportedMessageType(messageMetaData);
+			}
 
-		@Test
-		void shouldCallGetFormData() {
-			setupMocks();
-			doReturn(true).when(service).isSupportedMessageType(messageMetaData);
+			@Test
+			void shouldCallGetFormDataIfNoRuntimeException() {
+				setupMocks();
+				doReturn(true).when(service).isSupportedMessageType(messageMetaData);
 
-			service.getMessages().toList();
+				service.getMessages().toList();
 
-			verify(service).getFormData(messageMetaData);
+				verify(service).getFormData(messageMetaData);
+			}
+
+			@Test
+			void shouldNotCallGetFormDataIfNoRuntimeException() {
+				doReturn(false).when(service).isSupportedMessageType(messageMetaData);
+
+				service.getMessages().toList();
+
+				verify(service, never()).getFormDataIfNoRuntimeException(any());
+			}
 		}
 
-		@Test
-		void shouldNotCallGetFormData() {
-			doReturn(false).when(service).isSupportedMessageType(messageMetaData);
+		@DisplayName("with multiple messages")
+		@Nested
+		class TestWithMultipleMessages {
+			private final XtaMessageMetaData messageMetaData2 = XtaMessageMetaDataTestFactory.createBuilder()
+					.messageId(XtaMessageId.from("messageId2"))
+					.build();
+			private final XtaMessageMetaData messageMetaData3 = XtaMessageMetaDataTestFactory.createBuilder()
+					.messageId(XtaMessageId.from("messageId3"))
+					.build();
+
+			@BeforeEach
+			void setup() {
+				doReturn(Stream.of(messageMetaData, messageMetaData2, messageMetaData3)).when(service).createXtaMessageStream();
+			}
 
-			service.getMessages().toList();
+			@DisplayName("should return stream of messages")
+			@Test
+			void shouldReturnStreamOfMessages() {
+				doReturn(true).when(service).isSupportedMessageType(messageMetaData);
+				doReturn(false).when(service).isSupportedMessageType(messageMetaData3);
+				doReturn(true).when(service).isSupportedMessageType(messageMetaData2);
+				doReturn(Optional.of(formData)).when(service).getFormDataIfNoRuntimeException(messageMetaData);
+				doReturn(Optional.of(formData2)).when(service).getFormDataIfNoRuntimeException(messageMetaData2);
 
-			verify(service, never()).getFormData(any());
+				var result = service.getMessages().toList();
+
+				assertThat(result).containsExactly(formData, formData2);
+			}
 		}
 
+
 		private void setupMocks() {
 			var testFormData = FormDataTestFactory.create();
 			when(mapper.toFormData(any(), any(), eq(vorgangNummerSupplier))).thenReturn(testFormData);
@@ -129,6 +171,53 @@ class XtaServiceTest {
 		}
 	}
 
+	@DisplayName("get form data if no runtime exception")
+	@Nested
+	class TestGetFormDataIfNoRuntimeException {
+
+		@Mock
+		XtaMessageMetaData messageMetaData;
+
+		@Mock
+		FormData formData;
+
+		@DisplayName("should call get formdata")
+		@Test
+		void shouldCallGetFormdata() {
+			service.getFormDataIfNoRuntimeException(messageMetaData);
+
+			verify(service).getFormData(messageMetaData);
+		}
+
+		@DisplayName("with exception")
+		@Nested
+		class TestWithException {
+			@DisplayName("should return empty")
+			@Test
+			void shouldReturnEmpty() {
+				doThrow(new RuntimeException("test-error")).when(service).getFormData(any());
+
+				var result = service.getFormDataIfNoRuntimeException(messageMetaData);
+
+				assertThat(result).isEmpty();
+			}
+		}
+
+		@DisplayName("without exception")
+		@Nested
+		class TestWithoutException {
+			@DisplayName("should return")
+			@Test
+			void shouldReturn() {
+				doReturn(formData).when(service).getFormData(any());
+
+				var result = service.getFormDataIfNoRuntimeException(messageMetaData);
+
+				assertThat(result).contains(formData);
+			}
+		}
+	}
+
 	@Nested
 	class TestGetFormData {