From 19d3a1f8d7bcc1a4c08d25959c484b33c849ee21 Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Wed, 8 Nov 2023 08:52:05 +0100
Subject: [PATCH] OZG-4456 refactor xml mapper

---
 .../eingang/SemantikAdapterConfiguration.java |  7 -------
 .../enginebased/afm/XmlMapperSupplier.java    | 21 +++++++++++++++++++
 .../afm/ZustaendigeStelleMetadataMapper.java  |  6 ++----
 ...ZustaendigeStelleMetadataMapperITCase.java | 14 -------------
 4 files changed, 23 insertions(+), 25 deletions(-)
 create mode 100644 semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/XmlMapperSupplier.java

diff --git a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/SemantikAdapterConfiguration.java b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/SemantikAdapterConfiguration.java
index 9c63e2d65..7c70b8144 100644
--- a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/SemantikAdapterConfiguration.java
+++ b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/SemantikAdapterConfiguration.java
@@ -25,9 +25,6 @@ package de.ozgcloud.eingang;
 
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
-import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
-
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 
 import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter;
 import de.ozgcloud.eingang.semantik.enginebased.afm.AfmEngineBasedAdapter;
@@ -40,8 +37,4 @@ public class SemantikAdapterConfiguration {
 		return new AfmEngineBasedAdapter();
 	}
 
-	@Bean
-	public XmlMapper xmlMapper(MappingJackson2XmlHttpMessageConverter messageConverter) {
-		return (XmlMapper) messageConverter.getObjectMapper();
-	}
 }
\ No newline at end of file
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/XmlMapperSupplier.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/XmlMapperSupplier.java
new file mode 100644
index 000000000..8a4b166b5
--- /dev/null
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/XmlMapperSupplier.java
@@ -0,0 +1,21 @@
+package de.ozgcloud.eingang.semantik.enginebased.afm;
+
+import org.springframework.stereotype.Component;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
+
+@Component
+public class XmlMapperSupplier {
+
+	private final XmlMapper xmlMapper;
+
+	public XmlMapperSupplier() {
+		xmlMapper = new XmlMapper();
+		xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+	}
+
+	public XmlMapper getMapper() {
+		return xmlMapper;
+	}
+}
diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java
index e8dfb7a42..ace1fd772 100644
--- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java
+++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java
@@ -14,8 +14,6 @@ import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
-
 import de.itvsh.kop.common.errorhandling.TechnicalException;
 import de.ozgcloud.eingang.common.formdata.FormData;
 import de.ozgcloud.eingang.common.formdata.IncomingFile;
@@ -41,7 +39,7 @@ public class ZustaendigeStelleMetadataMapper {
 	static final String KEY_BEHOERDE_TELEFON = "behoerde_telefon";
 
 	@Autowired
-	private XmlMapper xmlMapper;
+	private XmlMapperSupplier xmlMapperSupplier;
 
 	public FormData parseZustaendigeStelleData(FormData formData) {
 		return formData.getRepresentations().stream().filter(IS_BEHOERDE_METADATA).findAny()
@@ -57,7 +55,7 @@ public class ZustaendigeStelleMetadataMapper {
 
 	Optional<ZustaendigeStelleData> readXmlContent(IncomingFile metadata) {
 		try {
-			return Optional.of(xmlMapper.readValue(metadata.getContentStream(), ZustaendigeStelleData.class));
+			return Optional.of(xmlMapperSupplier.getMapper().readValue(metadata.getContentStream(), ZustaendigeStelleData.class));
 		} catch (IOException | TechnicalException e) {
 			LOG.error("Error parsing {}", BEHOERDE_METADATA_FILE_NAME, e);
 		}
diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperITCase.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperITCase.java
index 58ba71eab..d1ff23366 100644
--- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperITCase.java
+++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperITCase.java
@@ -8,11 +8,6 @@ import java.io.File;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
-
-import com.fasterxml.jackson.dataformat.xml.XmlMapper;
 
 import de.itvsh.kop.common.test.ITCase;
 import de.itvsh.kop.common.test.TestUtils;
@@ -52,13 +47,4 @@ class ZustaendigeStelleMetadataMapperITCase {
 
 		assertThat(zustaendigeStelleData).isEmpty();
 	}
-}
-
-@Configuration
-class TestConfiguration {
-
-	@Bean
-	public XmlMapper xmlMapper(MappingJackson2XmlHttpMessageConverter messageConverter) {
-		return (XmlMapper) messageConverter.getObjectMapper();
-	}
 }
\ No newline at end of file
-- 
GitLab