From 83e9fc0363ef83dfba54868d3da813320f01e2ca Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Tue, 2 Jan 2024 14:14:23 +0100
Subject: [PATCH] OZG-4375 handle null values when mapping vorgang

---
 .../de/ozgcloud/alfa/common/DateConverter.java    | 11 ++++++++---
 .../de/ozgcloud/alfa/vorgang/FormDataMapper.java  | 10 +++++++---
 .../ozgcloud/alfa/vorgang/FormDataMapperTest.java | 15 +++++++++++++++
 3 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java
index d475428b3c..20e9f11df9 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/common/DateConverter.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.alfa.common;
 
+import static java.util.Objects.*;
+
 import java.time.LocalDate;
 import java.time.ZonedDateTime;
 import java.time.format.DateTimeFormatter;
@@ -26,17 +28,20 @@ public class DateConverter {
 		try {
 			return Optional.of(createDatatypeFactory().newXMLGregorianCalendar(LocalDate.parse(dateStr, DATE_TIME_FORMATTER).toString()));
 		} catch (Exception e) {
-			LOG.error("Date '{}' cannot be converted to ISO format.", dateStr, e);
+			LOG.warn("Date '{}' cannot be converted to ISO format.", dateStr, e);
 			return Optional.empty();
 		}
 	}
 
 	public XMLGregorianCalendar toXmlGregorianCalendar(ZonedDateTime date) {
 		try {
-			return createDatatypeFactory().newXMLGregorianCalendar(GregorianCalendar.from(date));
+			if (nonNull(date)) {
+				return createDatatypeFactory().newXMLGregorianCalendar(GregorianCalendar.from(date));
+			}
 		} catch (Exception e) {
-			throw new TechnicalException("Date '%s' cannot be converted to ISO format.".formatted(date), e);
+			LOG.warn("Date '{}' cannot be converted to ISO format.", date, e);
 		}
+		return null;
 	}
 
 	DatatypeFactory createDatatypeFactory() {
diff --git a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java
index e2aba0f9fd..89cf757115 100644
--- a/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java
+++ b/alfa-xdomea/src/main/java/de/ozgcloud/alfa/vorgang/FormDataMapper.java
@@ -1,5 +1,7 @@
 package de.ozgcloud.alfa.vorgang;
 
+import static java.util.Objects.*;
+
 import java.time.ZonedDateTime;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -77,9 +79,11 @@ class FormDataMapper {
 	AntragsdatenItemType buildSingleValueField(String name, Object value) {
 		var singleValue = new AntragsdatenSingleValueFieldType();
 		singleValue.setName(name);
-		var datatype = datatypeMapper.from(value);
-		singleValue.setType(datatype);
-		singleValue.setValue(formatValue(datatype, value));
+		if (nonNull(value)) {
+			var datatype = datatypeMapper.from(value);
+			singleValue.setType(datatype);
+			singleValue.setValue(formatValue(datatype, value));
+		}
 		return singleValue;
 	}
 
diff --git a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java
index 9cfb13a037..6ffbdbf6b0 100644
--- a/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java
+++ b/alfa-xdomea/src/test/java/de/ozgcloud/alfa/vorgang/FormDataMapperTest.java
@@ -242,6 +242,14 @@ class FormDataMapperTest {
 			assertThat(antragsdatenSingleValueFieldType.getValue()).isEqualTo(FORMDATA_VALUE);
 		}
 
+		@Test
+		void shouldNotSetIfValueIsNull() {
+			formDataMapper.buildSingleValueField(NAME, null);
+
+			verify(formDataMapper, never()).formatValue(DatatypeType.STRING, null);
+		}
+
+
 		@Test
 		void shouldCallFormatValue() {
 			when(datatypeMapper.from(any())).thenReturn(DatatypeType.STRING);
@@ -270,5 +278,12 @@ class FormDataMapperTest {
 
 			verify(dateConverter).toXmlGregorianCalendar(dateTime);
 		}
+
+		@Test
+		void shouldFormatNull() {
+			var value = formDataMapper.formatValue(DatatypeType.STRING, null);
+
+			assertThat(value).isEqualTo("null");
+		}
 	}
 }
\ No newline at end of file
-- 
GitLab