From bfeebfeb693f1f2ef0d2f6abb34bdf0aeffa3af4 Mon Sep 17 00:00:00 2001
From: Thomas <>
Date: Mon, 15 May 2023 08:34:22 +0200
Subject: feat(utils): add custom Jackson (de)serialization for polymorph class
structures
---
.../core/impl/json/EscapedJsonDeserializer.java | 97 ++++++++++++++++++++++
.../eaaf/core/impl/json/EscapedJsonSerializer.java | 73 ++++++++++++++++
2 files changed, 170 insertions(+)
create mode 100644 eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/json/EscapedJsonDeserializer.java
create mode 100644 eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/json/EscapedJsonSerializer.java
(limited to 'eaaf_core_utils/src/main/java')
diff --git a/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/json/EscapedJsonDeserializer.java b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/json/EscapedJsonDeserializer.java
new file mode 100644
index 00000000..5a081ec5
--- /dev/null
+++ b/eaaf_core_utils/src/main/java/at/gv/egiz/eaaf/core/impl/json/EscapedJsonDeserializer.java
@@ -0,0 +1,97 @@
+package at.gv.egiz.eaaf.core.impl.json;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.fasterxml.jackson.core.JsonParser;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.TreeNode;
+import com.fasterxml.jackson.databind.BeanProperty;
+import com.fasterxml.jackson.databind.DeserializationContext;
+import com.fasterxml.jackson.databind.JavaType;
+import com.fasterxml.jackson.databind.JsonDeserializer;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.deser.ContextualDeserializer;
+import com.fasterxml.jackson.databind.jsontype.TypeDeserializer;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+import com.fasterxml.jackson.databind.node.TextNode;
+
+/**
+ * Custom Jackson Deserializer to support generic types serialized as escaped
+ * Strings.
+ *
+ *
+ * Code was an example from stack-overflow.
+ *
+ * This implementation checks if the generic class type is compatible to
+ * original interface, by using Class.isAssignableFrom(...).
+ *