From 5cd3b5fbeb756a92fd93eff678735ec50d7aeeb2 Mon Sep 17 00:00:00 2001
From: Lukas Malte Monnerjahn <lukasmalte.monnerjahn@dataport.de>
Date: Wed, 2 Apr 2025 11:42:55 +0200
Subject: [PATCH] no implicit type cast when loading yaml

---
 .../extension/XtaMessageExampleLoader.java    | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/src/test/java/de/ozgcloud/xta/client/extension/XtaMessageExampleLoader.java b/src/test/java/de/ozgcloud/xta/client/extension/XtaMessageExampleLoader.java
index 4fbbb72..245f4d0 100644
--- a/src/test/java/de/ozgcloud/xta/client/extension/XtaMessageExampleLoader.java
+++ b/src/test/java/de/ozgcloud/xta/client/extension/XtaMessageExampleLoader.java
@@ -23,7 +23,13 @@ import jakarta.validation.constraints.NotBlank;
 
 import org.apache.commons.codec.Resources;
 import org.apache.commons.io.IOUtils;
+import org.yaml.snakeyaml.DumperOptions;
+import org.yaml.snakeyaml.LoaderOptions;
 import org.yaml.snakeyaml.Yaml;
+import org.yaml.snakeyaml.constructor.Constructor;
+import org.yaml.snakeyaml.nodes.Tag;
+import org.yaml.snakeyaml.representer.Representer;
+import org.yaml.snakeyaml.resolver.Resolver;
 
 import de.ozgcloud.xta.client.model.XtaFile;
 import de.ozgcloud.xta.client.model.XtaIdentifier;
@@ -33,7 +39,8 @@ import lombok.Builder;
 
 public class XtaMessageExampleLoader {
 
-	static Yaml yaml = new Yaml();
+	static Yaml yaml = new Yaml(new Constructor(new LoaderOptions()), new Representer(new DumperOptions()),
+			new DumperOptions(), new StringYamlResolver());
 
 	@SuppressWarnings("unchecked")
 	public static XtaMessage load(MessageExampleConfig config) {
@@ -137,7 +144,7 @@ public class XtaMessageExampleLoader {
 		return Optional.ofNullable(map.get(key))
 				.filter(String.class::isInstance)
 				.map(String.class::cast)
-				.orElseThrow(() -> new IllegalArgumentException("Missing key: %s".formatted(key)));
+				.orElse(null);
 	}
 
 	private static XtaMessageMetaData mapXtaMessageMetadata(Map<String, Object> metaData, MessageExampleConfig config) {
@@ -221,4 +228,12 @@ public class XtaMessageExampleLoader {
 		));
 	}
 
+	/** Custom YAML resolver to treat every scalar as string, instead of using implicit type casting */
+	public static class StringYamlResolver extends Resolver {
+		@Override
+		protected void addImplicitResolvers() {
+			addImplicitResolver(Tag.NULL, EMPTY, null);
+		}
+	}
+
 }
-- 
GitLab