This is an automated email from the ASF dual-hosted git repository.

zehnder pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new 117cf7163b refactor(#4061): all Object Mappers to central Jackson 
instance (#4064)
117cf7163b is described below

commit 117cf7163bb497783cfacca363f003ea7d489e54
Author: Jacqueline Höllig <[email protected]>
AuthorDate: Tue Dec 23 15:03:30 2025 +0100

    refactor(#4061): all Object Mappers to central Jackson instance (#4064)
    
    Co-authored-by: Philipp Zehnder <[email protected]>
---
 .../api/config/IStreamPipesClientConfig.java       |  3 --
 .../streampipes/client/api/AbstractClientApi.java  |  2 +-
 .../streampipes/client/http/HttpRequest.java       |  3 --
 .../client/model/StreamPipesClientConfig.java      | 10 ----
 .../client/serializer/ObjectSerializer.java        |  8 ---
 .../streampipes/client/serializer/Serializer.java  |  9 +---
 .../management/AdapterEventPreviewPipeline.java    |  6 ++-
 .../management/management/GuessManagement.java     |  1 +
 streampipes-connect-shared/pom.xml                 |  6 +++
 .../schema/DeleteTransformationRuleTest.java       |  7 ++-
 .../export/ConfiguredJsonOutputWriter.java         |  8 ++-
 .../dataexplorer/export/TestJsonItemGenerator.java | 10 +++-
 .../dataexplorer/influx/RawFieldSerializer.java    |  4 +-
 .../influx/TestRawFieldSerializer.java             |  1 -
 .../streampipes/export/AssetLinkResolver.java      |  9 +++-
 .../export/dataimport/ImportGenerator.java         | 11 ++--
 .../export/generator/ExportPackageGenerator.java   |  9 +++-
 .../export/resolver/AbstractResolver.java          | 12 +++--
 .../export/resolver/AdapterResolver.java           |  3 +-
 .../streampipes/export/resolver/ChartResolver.java |  9 +++-
 .../export/resolver/DashboardResolver.java         |  3 +-
 .../export/resolver/DataSourceResolver.java        |  3 +-
 .../streampipes/export/resolver/FileResolver.java  |  5 +-
 .../resolver/GenericStorageDocumentResolver.java   | 11 ++--
 .../export/resolver/MeasurementResolver.java       |  3 +-
 .../export/resolver/PipelineResolver.java          |  3 +-
 .../export/utils/SerializationUtils.java           | 38 -------------
 streampipes-dataformat/pom.xml                     |  5 ++
 .../dataformat/JsonDataFormatDefinition.java       |  6 ++-
 .../connect/adapter/parser/json/GeoJsonParser.java |  9 ++--
 .../connect/adapter/parser/json/JsonParser.java    |  7 ++-
 .../connect/adapter/parser/CsvParserTest.java      |  3 ++
 .../connect/adapter/parser/XmlParserTest.java      |  2 +
 .../adapter/parser/json/GeoJsonParserTest.java     |  7 ++-
 .../connect/iiot/adapters/oi4/Oi4Adapter.java      |  6 ++-
 .../model/DataSetMessageDeserializationTest.java   | 14 +++--
 .../pulsar/sink/PulsarPublisherSink.java           |  2 +-
 .../connectors/pulsar/TestPulsarPublisherSink.java |  6 ++-
 .../connectors/ros/adapter/RosBridgeAdapter.java   |  6 ++-
 .../sinks/databases/jvm/redis/Redis.java           |  9 +++-
 .../notifications/jvm/msteams/MSTeamsSink.java     | 11 +++-
 .../integration/adapters/KafkaAdapterTester.java   |  7 ++-
 .../integration/adapters/MQTTPublisherUtils.java   |  9 ++--
 .../integration/adapters/PulsarAdapterTester.java  |  7 ++-
 streampipes-model/pom.xml                          |  5 ++
 .../model/datalake/CustomMapSerializer.java        |  9 ++--
 .../runtime/RateLimitedRuntimeInfoProvider.java    | 10 +++-
 streampipes-rest-shared/pom.xml                    |  5 ++
 .../sdk/builder/adapter/GuessSchemaBuilder.java    |  6 ++-
 streampipes-serializers-json/pom.xml               | 25 ---------
 .../serializers/json/JacksonSerializer.java        | 20 +++++--
 .../serializers/json/TestJacksonSerializer.java    | 63 ----------------------
 ...MergeFilenamesAndRenameDuplicatesMigration.java |  6 ++-
 .../v0980/ModifyAssetLinkTypesMigration.java       | 11 ++--
 .../v0980/ModifyAssetLinksMigration.java           |  7 ++-
 .../migrations/v099/MoveAssetContentMigration.java |  6 ++-
 .../v970/ModifyAssetLinkTypeMigration.java         |  6 ++-
 .../storage/couchdb/impl/GenericStorageImpl.java   |  7 ++-
 .../wrapper/kafka/converter/JsonToMapFormat.java   |  6 ++-
 59 files changed, 262 insertions(+), 243 deletions(-)

diff --git 
a/streampipes-client-api/src/main/java/org/apache/streampipes/client/api/config/IStreamPipesClientConfig.java
 
b/streampipes-client-api/src/main/java/org/apache/streampipes/client/api/config/IStreamPipesClientConfig.java
index 5fef7a6ba4..8f49b487e1 100644
--- 
a/streampipes-client-api/src/main/java/org/apache/streampipes/client/api/config/IStreamPipesClientConfig.java
+++ 
b/streampipes-client-api/src/main/java/org/apache/streampipes/client/api/config/IStreamPipesClientConfig.java
@@ -20,10 +20,7 @@ package org.apache.streampipes.client.api.config;
 
 import org.apache.streampipes.messaging.SpProtocolDefinitionFactory;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
-
 public interface IStreamPipesClientConfig {
-  ObjectMapper getSerializer();
 
   void addTransportProtocol(SpProtocolDefinitionFactory<?> 
protocolDefinitionFactory);
 
diff --git 
a/streampipes-client/src/main/java/org/apache/streampipes/client/api/AbstractClientApi.java
 
b/streampipes-client/src/main/java/org/apache/streampipes/client/api/AbstractClientApi.java
index 9e643d4daf..e1da29f2f5 100644
--- 
a/streampipes-client/src/main/java/org/apache/streampipes/client/api/AbstractClientApi.java
+++ 
b/streampipes-client/src/main/java/org/apache/streampipes/client/api/AbstractClientApi.java
@@ -57,7 +57,7 @@ public class AbstractClientApi {
 
   protected <T> void post(StreamPipesApiPath apiPath, T object) {
 
-    ObjectSerializer <T,Void> serializer = new ObjectSerializer<>(true);
+    ObjectSerializer <T,Void> serializer = new ObjectSerializer<>();
     new PostRequestWithoutPayloadResponse(clientConfig, apiPath, serializer, 
object).executeRequest();
   }
 
diff --git 
a/streampipes-client/src/main/java/org/apache/streampipes/client/http/HttpRequest.java
 
b/streampipes-client/src/main/java/org/apache/streampipes/client/http/HttpRequest.java
index 52399ef96e..75afd01750 100644
--- 
a/streampipes-client/src/main/java/org/apache/streampipes/client/http/HttpRequest.java
+++ 
b/streampipes-client/src/main/java/org/apache/streampipes/client/http/HttpRequest.java
@@ -25,7 +25,6 @@ import org.apache.streampipes.client.util.StreamPipesApiPath;
 import org.apache.streampipes.commons.exceptions.SpHttpErrorStatusCode;
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.http.Header;
 import org.apache.http.HttpEntity;
 import org.apache.http.HttpResponse;
@@ -50,7 +49,6 @@ public abstract class HttpRequest<K, V, T> {
   private final StreamPipesClientConfig clientConfig;
   private final ClientConnectionUrlResolver connectionConfig;
   private final StreamPipesApiPath apiPath;
-  private final ObjectMapper objectMapper;
   private final Serializer<K, V, T> serializer;
 
   public HttpRequest(StreamPipesClientConfig clientConfig,
@@ -58,7 +56,6 @@ public abstract class HttpRequest<K, V, T> {
                      Serializer<K, V, T> serializer) {
     this.clientConfig = clientConfig;
     this.connectionConfig = clientConfig.getConnectionConfig();
-    this.objectMapper = clientConfig.getSerializer();
     this.apiPath = apiPath;
     this.serializer = serializer;
   }
diff --git 
a/streampipes-client/src/main/java/org/apache/streampipes/client/model/StreamPipesClientConfig.java
 
b/streampipes-client/src/main/java/org/apache/streampipes/client/model/StreamPipesClientConfig.java
index 88e22d56b5..92e9426587 100644
--- 
a/streampipes-client/src/main/java/org/apache/streampipes/client/model/StreamPipesClientConfig.java
+++ 
b/streampipes-client/src/main/java/org/apache/streampipes/client/model/StreamPipesClientConfig.java
@@ -21,23 +21,13 @@ import 
org.apache.streampipes.client.api.config.ClientConnectionUrlResolver;
 import org.apache.streampipes.client.api.config.IStreamPipesClientConfig;
 import org.apache.streampipes.messaging.SpProtocolDefinitionFactory;
 import org.apache.streampipes.messaging.SpProtocolManager;
-import org.apache.streampipes.serializers.json.JacksonSerializer;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
 
 public class StreamPipesClientConfig implements IStreamPipesClientConfig {
 
   private final ClientConnectionUrlResolver connectionConfig;
-  private final ObjectMapper serializer;
 
   public StreamPipesClientConfig(ClientConnectionUrlResolver connectionConfig) 
{
     this.connectionConfig = connectionConfig;
-    this.serializer = JacksonSerializer.getObjectMapper();
-  }
-
-  @Override
-  public ObjectMapper getSerializer() {
-    return serializer;
   }
 
   @Override
diff --git 
a/streampipes-client/src/main/java/org/apache/streampipes/client/serializer/ObjectSerializer.java
 
b/streampipes-client/src/main/java/org/apache/streampipes/client/serializer/ObjectSerializer.java
index ba39d0792d..5e1e99e5af 100644
--- 
a/streampipes-client/src/main/java/org/apache/streampipes/client/serializer/ObjectSerializer.java
+++ 
b/streampipes-client/src/main/java/org/apache/streampipes/client/serializer/ObjectSerializer.java
@@ -23,14 +23,6 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 
 public class ObjectSerializer<K, V> extends Serializer<K, V, V> {
 
-    public ObjectSerializer() {
-        super();  
-    }
-
-    public ObjectSerializer(boolean useDefaultTyping) {
-        super(useDefaultTyping);  
-    }
-
   @Override
   public V deserialize(String response, Class<V> targetClass) {
     try {
diff --git 
a/streampipes-client/src/main/java/org/apache/streampipes/client/serializer/Serializer.java
 
b/streampipes-client/src/main/java/org/apache/streampipes/client/serializer/Serializer.java
index 5ed6cac869..f929601adc 100644
--- 
a/streampipes-client/src/main/java/org/apache/streampipes/client/serializer/Serializer.java
+++ 
b/streampipes-client/src/main/java/org/apache/streampipes/client/serializer/Serializer.java
@@ -28,15 +28,8 @@ public abstract class Serializer<K, V, T> {
   protected ObjectMapper objectMapper;
 
   public Serializer() {
-    this(false);
-  }
+    this.objectMapper = JacksonSerializer.getObjectMapper();
 
-  public Serializer(boolean useDefaultTyping) {
-    if (useDefaultTyping) {
-      this.objectMapper = 
JacksonSerializer.getObjectMapper().deactivateDefaultTyping();
-    } else {
-      this.objectMapper = JacksonSerializer.getObjectMapper();
-    }
   }
 
   public String serialize(K object) {
diff --git 
a/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/AdapterEventPreviewPipeline.java
 
b/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/AdapterEventPreviewPipeline.java
index 2e9b0fb241..1f5e200e9b 100644
--- 
a/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/AdapterEventPreviewPipeline.java
+++ 
b/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/AdapterEventPreviewPipeline.java
@@ -24,8 +24,10 @@ import 
org.apache.streampipes.extensions.api.connect.IAdapterPipeline;
 import org.apache.streampipes.extensions.api.connect.IAdapterPipelineElement;
 import org.apache.streampipes.model.connect.guess.AdapterEventPreview;
 import org.apache.streampipes.model.schema.EventSchema;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.util.HashMap;
@@ -40,7 +42,9 @@ public class AdapterEventPreviewPipeline implements 
IAdapterPipeline {
   private ObjectMapper objectMapper;
 
   public AdapterEventPreviewPipeline(AdapterEventPreview previewRequest) {
-    this.objectMapper = new ObjectMapper();
+    this.objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
     this.pipelineElements = new AdapterPipelineGeneratorBase()
         .makeAdapterPipelineElements(previewRequest.getRules(), false);
     this.event = previewRequest.getInputData();
diff --git 
a/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/management/GuessManagement.java
 
b/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/management/GuessManagement.java
index c43be660bb..6ddee4d898 100644
--- 
a/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/management/GuessManagement.java
+++ 
b/streampipes-connect-management/src/main/java/org/apache/streampipes/connect/management/management/GuessManagement.java
@@ -55,6 +55,7 @@ public class GuessManagement {
   public GuessManagement() {
     this.endpointGenerator = new ExtensionsServiceEndpointGenerator();
     this.objectMapper = JacksonSerializer.getObjectMapper();
+
   }
 
   public GuessSchema guessSchema(AdapterDescription adapterDescription)
diff --git a/streampipes-connect-shared/pom.xml 
b/streampipes-connect-shared/pom.xml
index eb371af8f2..ab44c9c993 100644
--- a/streampipes-connect-shared/pom.xml
+++ b/streampipes-connect-shared/pom.xml
@@ -50,6 +50,12 @@
             <version>0.99.0-SNAPSHOT</version>
         </dependency>
 
+        <dependency>
+            <groupId>org.apache.streampipes</groupId>
+            <artifactId>streampipes-serializers-json</artifactId>
+            <version>0.99.0-SNAPSHOT</version>
+        </dependency>
+
         <!-- Test dependencies -->
         <dependency>
             <groupId>org.junit.jupiter</groupId>
diff --git 
a/streampipes-connect-shared/src/test/java/org/apache/streampipes/connect/shared/preprocessing/transform/schema/DeleteTransformationRuleTest.java
 
b/streampipes-connect-shared/src/test/java/org/apache/streampipes/connect/shared/preprocessing/transform/schema/DeleteTransformationRuleTest.java
index 28d8ffb20e..97249e3d35 100644
--- 
a/streampipes-connect-shared/src/test/java/org/apache/streampipes/connect/shared/preprocessing/transform/schema/DeleteTransformationRuleTest.java
+++ 
b/streampipes-connect-shared/src/test/java/org/apache/streampipes/connect/shared/preprocessing/transform/schema/DeleteTransformationRuleTest.java
@@ -18,7 +18,10 @@
 
 package org.apache.streampipes.connect.shared.preprocessing.transform.schema;
 
+import org.apache.streampipes.serializers.json.JacksonSerializer;
+
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.jupiter.api.Test;
 
@@ -32,7 +35,9 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 public class DeleteTransformationRuleTest {
 
 
-  private ObjectMapper objectMapper = new ObjectMapper();
+  private ObjectMapper objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
 
   @Test
   public void transformSimple() {
diff --git 
a/streampipes-data-explorer-export/src/main/java/org/apache/streampipes/dataexplorer/export/ConfiguredJsonOutputWriter.java
 
b/streampipes-data-explorer-export/src/main/java/org/apache/streampipes/dataexplorer/export/ConfiguredJsonOutputWriter.java
index 5bfb631e02..9a5e0686a7 100644
--- 
a/streampipes-data-explorer-export/src/main/java/org/apache/streampipes/dataexplorer/export/ConfiguredJsonOutputWriter.java
+++ 
b/streampipes-data-explorer-export/src/main/java/org/apache/streampipes/dataexplorer/export/ConfiguredJsonOutputWriter.java
@@ -22,12 +22,14 @@ import 
org.apache.streampipes.dataexplorer.export.item.ItemGenerator;
 import org.apache.streampipes.dataexplorer.export.item.JsonItemGenerator;
 import org.apache.streampipes.model.datalake.DataLakeMeasure;
 import org.apache.streampipes.model.datalake.param.ProvidedRestQueryParams;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.List;
+import java.util.Map;
 
 public class ConfiguredJsonOutputWriter extends ConfiguredOutputWriter {
 
@@ -37,7 +39,9 @@ public class ConfiguredJsonOutputWriter extends 
ConfiguredOutputWriter {
   private final ItemGenerator itemGenerator;
 
   public ConfiguredJsonOutputWriter() {
-    this.itemGenerator = new JsonItemGenerator(new ObjectMapper());
+    this.itemGenerator = new 
JsonItemGenerator(JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )));
   }
 
   @Override
diff --git 
a/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestJsonItemGenerator.java
 
b/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestJsonItemGenerator.java
index e6d287816e..95b56284f8 100644
--- 
a/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestJsonItemGenerator.java
+++ 
b/streampipes-data-explorer-export/src/test/java/org/apache/streampipes/dataexplorer/export/TestJsonItemGenerator.java
@@ -19,19 +19,25 @@
 package org.apache.streampipes.dataexplorer.export;
 
 import org.apache.streampipes.dataexplorer.export.item.JsonItemGenerator;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
 import org.junit.jupiter.api.Test;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
+
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
+import java.util.Map;
+
 public class TestJsonItemGenerator extends TestItemGenerator {
 
   private static final String Expected = "{\"time\": 1668578077051,\"string\": 
\"test\",\"number\": 1}";
 
   @Test
   public void testJsonWriter() {
-    var writer = new JsonItemGenerator(new ObjectMapper());
+    var writer = new 
JsonItemGenerator(JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )));
 
     String result = writer.createItem(row, columns);
 
diff --git 
a/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/RawFieldSerializer.java
 
b/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/RawFieldSerializer.java
index 4e6226babc..73dee7c2db 100644
--- 
a/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/RawFieldSerializer.java
+++ 
b/streampipes-data-explorer-influx/src/main/java/org/apache/streampipes/dataexplorer/influx/RawFieldSerializer.java
@@ -19,6 +19,7 @@
 package org.apache.streampipes.dataexplorer.influx;
 
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
@@ -28,7 +29,8 @@ public class RawFieldSerializer {
   protected ObjectMapper objectMapper;
 
   public RawFieldSerializer() {
-    this.objectMapper = new ObjectMapper().activateDefaultTyping(
+    this.objectMapper = JacksonSerializer.getObjectMapper();
+    this.objectMapper.activateDefaultTyping(
         BasicPolymorphicTypeValidator.builder()
             .allowIfBaseType(Object.class)
             .build(),
diff --git 
a/streampipes-data-explorer-influx/src/test/java/org/apache/streampipes/dataexplorer/influx/TestRawFieldSerializer.java
 
b/streampipes-data-explorer-influx/src/test/java/org/apache/streampipes/dataexplorer/influx/TestRawFieldSerializer.java
index 48f6344443..ab5f4c5b98 100644
--- 
a/streampipes-data-explorer-influx/src/test/java/org/apache/streampipes/dataexplorer/influx/TestRawFieldSerializer.java
+++ 
b/streampipes-data-explorer-influx/src/test/java/org/apache/streampipes/dataexplorer/influx/TestRawFieldSerializer.java
@@ -52,7 +52,6 @@ public class TestRawFieldSerializer {
     rawNestedField.put("List", rawListField);
 
     var json = rawFieldSerializer.serialize(rawNestedField);
-
     assertEquals(rawNestedField, rawFieldSerializer.deserialize(json));
   }
 
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/AssetLinkResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/AssetLinkResolver.java
index 4e5df0bf85..ed3c8cd478 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/AssetLinkResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/AssetLinkResolver.java
@@ -26,13 +26,15 @@ import 
org.apache.streampipes.export.resolver.DataSourceResolver;
 import org.apache.streampipes.export.resolver.FileResolver;
 import org.apache.streampipes.export.resolver.MeasurementResolver;
 import org.apache.streampipes.export.resolver.PipelineResolver;
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.assets.AssetLink;
 import org.apache.streampipes.model.assets.SpAssetModel;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -50,7 +52,10 @@ public class AssetLinkResolver {
 
   public AssetLinkResolver(String assetId) {
     this.assetId = assetId;
-    this.mapper = SerializationUtils.getDefaultObjectMapper();
+    this.mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true,
+      SerializationFeature.INDENT_OUTPUT, false 
+    ));
   }
 
   public AssetExportConfiguration resolveResources() {
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/dataimport/ImportGenerator.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/dataimport/ImportGenerator.java
index 8ca45ff1f0..71025092e5 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/dataimport/ImportGenerator.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/dataimport/ImportGenerator.java
@@ -20,11 +20,13 @@ package org.apache.streampipes.export.dataimport;
 
 import org.apache.streampipes.commons.zip.ZipFileExtractor;
 import org.apache.streampipes.export.constants.ExportConstants;
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.export.StreamPipesApplicationPackage;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
 import org.lightcouch.DocumentConflictException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,12 +40,13 @@ public abstract class ImportGenerator<T> {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(ImportGenerator.class);
 
-  protected ObjectMapper spMapper;
   protected ObjectMapper defaultMapper;
 
   public ImportGenerator() {
-    this.spMapper = SerializationUtils.getSpObjectMapper();
-    this.defaultMapper = SerializationUtils.getDefaultObjectMapper();
+    this.defaultMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true,
+      SerializationFeature.INDENT_OUTPUT, false 
+    ));
   }
 
   public T generate(InputStream inputStream) throws IOException {
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/generator/ExportPackageGenerator.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/generator/ExportPackageGenerator.java
index c1672f6d17..0add8dd3a2 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/generator/ExportPackageGenerator.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/generator/ExportPackageGenerator.java
@@ -28,16 +28,18 @@ import org.apache.streampipes.export.resolver.FileResolver;
 import org.apache.streampipes.export.resolver.GenericStorageDocumentResolver;
 import org.apache.streampipes.export.resolver.MeasurementResolver;
 import org.apache.streampipes.export.resolver.PipelineResolver;
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.manager.file.FileManager;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
 import org.apache.streampipes.model.export.ExportConfiguration;
 import org.apache.streampipes.model.export.ExportItem;
 import org.apache.streampipes.model.export.StreamPipesApplicationPackage;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -57,7 +59,10 @@ public class ExportPackageGenerator {
 
   public ExportPackageGenerator(ExportConfiguration exportConfiguration) {
     this.exportConfiguration = exportConfiguration;
-    this.defaultMapper = SerializationUtils.getDefaultObjectMapper();
+    this.defaultMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true,
+      SerializationFeature.INDENT_OUTPUT, false 
+    ));
   }
 
   public byte[] generateExportPackage() throws IOException {
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/AbstractResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/AbstractResolver.java
index 1b59196125..f9be31bab6 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/AbstractResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/AbstractResolver.java
@@ -20,28 +20,32 @@ package org.apache.streampipes.export.resolver;
 
 import org.apache.streampipes.commons.exceptions.ElementNotFoundException;
 import org.apache.streampipes.export.utils.EventGroundingProcessor;
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.assets.AssetLink;
 import org.apache.streampipes.model.export.ExportItem;
 import org.apache.streampipes.model.grounding.EventGrounding;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.storage.api.INoSqlStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
+import java.util.Map;
 import java.util.Objects;
 import java.util.Set;
 import java.util.stream.Collectors;
 
 public abstract class AbstractResolver<T> implements DocumentResolver<T> {
 
-  protected ObjectMapper spMapper;
   protected ObjectMapper defaultMapper;
+  protected ObjectMapper spMapper;
 
   public AbstractResolver() {
-    this.spMapper = SerializationUtils.getSpObjectMapper();
-    this.defaultMapper = SerializationUtils.getDefaultObjectMapper();
+    this.defaultMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
+    this.spMapper = JacksonSerializer.getObjectMapper();
   }
 
   public Set<ExportItem> resolve(Set<AssetLink> assetLinks) {
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/AdapterResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/AdapterResolver.java
index a6913d02a2..a8f902635b 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/AdapterResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/AdapterResolver.java
@@ -22,7 +22,6 @@ package org.apache.streampipes.export.resolver;
 import org.apache.streampipes.commons.exceptions.connect.AdapterException;
 import org.apache.streampipes.commons.prometheus.adapter.AdapterMetricsManager;
 import 
org.apache.streampipes.connect.management.management.AdapterMasterManagement;
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.connect.adapter.AdapterDescription;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
 import org.apache.streampipes.model.export.ExportItem;
@@ -54,7 +53,7 @@ public class AdapterResolver extends 
AbstractResolver<AdapterDescription> {
 
   @Override
   public AdapterDescription readDocument(String serializedDoc) throws 
JsonProcessingException {
-    return SerializationUtils.getSpObjectMapper().readValue(serializedDoc, 
AdapterDescription.class);
+    return this.spMapper.readValue(serializedDoc, AdapterDescription.class);
   }
 
   @Override
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/ChartResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/ChartResolver.java
index 212a3567cc..74e417ac5d 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/ChartResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/ChartResolver.java
@@ -18,12 +18,15 @@
 
 package org.apache.streampipes.export.resolver;
 
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.datalake.DataExplorerWidgetModel;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
 import org.apache.streampipes.model.export.ExportItem;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+
+import java.util.Map;
 
 public class ChartResolver extends AbstractResolver<DataExplorerWidgetModel> {
 
@@ -40,7 +43,9 @@ public class ChartResolver extends 
AbstractResolver<DataExplorerWidgetModel> {
 
   @Override
   public DataExplorerWidgetModel readDocument(String serializedDoc) throws 
JsonProcessingException {
-    return 
SerializationUtils.getDefaultObjectMapper().readValue(serializedDoc, 
DataExplorerWidgetModel.class);
+    return JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).readValue(serializedDoc, DataExplorerWidgetModel.class);
   }
 
   @Override
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/DashboardResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/DashboardResolver.java
index d7cd1c128c..ebcfa02dc8 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/DashboardResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/DashboardResolver.java
@@ -19,7 +19,6 @@
 
 package org.apache.streampipes.export.resolver;
 
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.dashboard.DashboardItem;
 import org.apache.streampipes.model.dashboard.DashboardModel;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
@@ -51,7 +50,7 @@ public class DashboardResolver extends 
AbstractResolver<DashboardModel> {
 
   @Override
   public DashboardModel readDocument(String serializedDoc) throws 
JsonProcessingException {
-    return SerializationUtils.getSpObjectMapper().readValue(serializedDoc, 
DashboardModel.class);
+    return this.defaultMapper.readValue(serializedDoc, DashboardModel.class);
   }
 
   @Override
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/DataSourceResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/DataSourceResolver.java
index 9072dd9682..09f4769579 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/DataSourceResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/DataSourceResolver.java
@@ -18,7 +18,6 @@
 
 package org.apache.streampipes.export.resolver;
 
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.SpDataStream;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
 import org.apache.streampipes.model.export.ExportItem;
@@ -40,7 +39,7 @@ public class DataSourceResolver extends 
AbstractResolver<SpDataStream> {
 
   @Override
   public SpDataStream readDocument(String serializedDoc) throws 
JsonProcessingException {
-    return SerializationUtils.getSpObjectMapper().readValue(serializedDoc, 
SpDataStream.class);
+    return this.defaultMapper.readValue(serializedDoc, SpDataStream.class);
   }
 
   @Override
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/FileResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/FileResolver.java
index f744c73465..ff73d12efd 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/FileResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/FileResolver.java
@@ -18,7 +18,6 @@
 
 package org.apache.streampipes.export.resolver;
 
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
 import org.apache.streampipes.model.export.ExportItem;
 import org.apache.streampipes.model.file.FileMetadata;
@@ -40,7 +39,7 @@ public class FileResolver extends 
AbstractResolver<FileMetadata> {
 
   @Override
   public FileMetadata readDocument(String serializedDoc) throws 
JsonProcessingException {
-    return SerializationUtils.getSpObjectMapper().readValue(serializedDoc, 
FileMetadata.class);
+    return this.defaultMapper.readValue(serializedDoc, FileMetadata.class);
   }
 
   @Override
@@ -55,7 +54,7 @@ public class FileResolver extends 
AbstractResolver<FileMetadata> {
 
   @Override
   public FileMetadata deserializeDocument(String document) throws 
JsonProcessingException {
-    return SerializationUtils.getSpObjectMapper().readValue(document, 
FileMetadata.class);
+    return this.spMapper.readValue(document, FileMetadata.class);
   }
 
   @Override
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/GenericStorageDocumentResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/GenericStorageDocumentResolver.java
index 36853b088e..445cac1869 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/GenericStorageDocumentResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/GenericStorageDocumentResolver.java
@@ -18,12 +18,13 @@
 
 package org.apache.streampipes.export.resolver;
 
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
 import org.apache.streampipes.model.export.ExportItem;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.lightcouch.DocumentConflictException;
 import org.slf4j.Logger;
@@ -53,7 +54,9 @@ public class GenericStorageDocumentResolver extends 
AbstractResolver<Map<String,
 
   @Override
   public Map<String, Object> readDocument(String serializedDocument) throws 
JsonProcessingException {
-    return 
SerializationUtils.getDefaultObjectMapper().readValue(serializedDocument, new 
TypeReference<>() {
+    return JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).readValue(serializedDocument, new TypeReference<>() {
     });
   }
 
@@ -75,7 +78,9 @@ public class GenericStorageDocumentResolver extends 
AbstractResolver<Map<String,
 
   @Override
   public Map<String, Object> deserializeDocument(String document) throws 
JsonProcessingException {
-    return SerializationUtils.getDefaultObjectMapper().readValue(document, new 
TypeReference<>() {
+    return JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).readValue(document, new TypeReference<>() {
     });
   }
 
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/MeasurementResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/MeasurementResolver.java
index 6e1373c073..efa89b728e 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/MeasurementResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/MeasurementResolver.java
@@ -18,7 +18,6 @@
 
 package org.apache.streampipes.export.resolver;
 
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.model.datalake.DataLakeMeasure;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
 import org.apache.streampipes.model.export.ExportItem;
@@ -40,7 +39,7 @@ public class MeasurementResolver extends 
AbstractResolver<DataLakeMeasure> {
 
   @Override
   public DataLakeMeasure readDocument(String serializedDoc) throws 
JsonProcessingException {
-    return SerializationUtils.getSpObjectMapper().readValue(serializedDoc, 
DataLakeMeasure.class);
+    return this.defaultMapper.readValue(serializedDoc, DataLakeMeasure.class);
   }
 
   @Override
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/PipelineResolver.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/PipelineResolver.java
index 73a4404fba..a76d3b1583 100644
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/PipelineResolver.java
+++ 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/resolver/PipelineResolver.java
@@ -18,7 +18,6 @@
 
 package org.apache.streampipes.export.resolver;
 
-import org.apache.streampipes.export.utils.SerializationUtils;
 import org.apache.streampipes.manager.pipeline.PipelineManager;
 import org.apache.streampipes.model.export.AssetExportConfiguration;
 import org.apache.streampipes.model.export.ExportItem;
@@ -51,7 +50,7 @@ public class PipelineResolver extends 
AbstractResolver<Pipeline> {
 
   @Override
   public Pipeline readDocument(String serializedDoc) throws 
JsonProcessingException {
-    return SerializationUtils.getSpObjectMapper().readValue(serializedDoc, 
Pipeline.class);
+    return this.defaultMapper.readValue(serializedDoc, Pipeline.class);
   }
 
   @Override
diff --git 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/utils/SerializationUtils.java
 
b/streampipes-data-export/src/main/java/org/apache/streampipes/export/utils/SerializationUtils.java
deleted file mode 100644
index 5ae1c629b8..0000000000
--- 
a/streampipes-data-export/src/main/java/org/apache/streampipes/export/utils/SerializationUtils.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-
-package org.apache.streampipes.export.utils;
-
-import org.apache.streampipes.serializers.json.JacksonSerializer;
-
-import com.fasterxml.jackson.databind.DeserializationFeature;
-import com.fasterxml.jackson.databind.ObjectMapper;
-
-public class SerializationUtils {
-
-  public static ObjectMapper getSpObjectMapper() {
-    return JacksonSerializer.getObjectMapper();
-  }
-
-  public static ObjectMapper getDefaultObjectMapper() {
-    var mapper = new ObjectMapper();
-    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-
-    return mapper;
-  }
-}
diff --git a/streampipes-dataformat/pom.xml b/streampipes-dataformat/pom.xml
index f8068bee88..d5fa0746dc 100644
--- a/streampipes-dataformat/pom.xml
+++ b/streampipes-dataformat/pom.xml
@@ -42,6 +42,11 @@
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-core</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.streampipes</groupId>
+            <artifactId>streampipes-serializers-json</artifactId>
+            <version>0.99.0-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/streampipes-dataformat/src/main/java/org/apache/streampipes/dataformat/JsonDataFormatDefinition.java
 
b/streampipes-dataformat/src/main/java/org/apache/streampipes/dataformat/JsonDataFormatDefinition.java
index 7433202edb..d162124220 100644
--- 
a/streampipes-dataformat/src/main/java/org/apache/streampipes/dataformat/JsonDataFormatDefinition.java
+++ 
b/streampipes-dataformat/src/main/java/org/apache/streampipes/dataformat/JsonDataFormatDefinition.java
@@ -19,8 +19,10 @@
 package org.apache.streampipes.dataformat;
 
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.io.IOException;
@@ -32,7 +34,9 @@ public class JsonDataFormatDefinition implements 
SpDataFormatDefinition {
   private final ObjectMapper objectMapper;
 
   public JsonDataFormatDefinition() {
-    this.objectMapper = new ObjectMapper();
+    this.objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
   }
 
   @Override
diff --git 
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParser.java
 
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParser.java
index f028ccfd12..244e7c32a4 100644
--- 
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParser.java
+++ 
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParser.java
@@ -24,10 +24,11 @@ import 
org.apache.streampipes.extensions.management.connect.adapter.parser.util.
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.model.schema.EventProperty;
 import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.vocabulary.Geo;
 import org.apache.streampipes.vocabulary.SO;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
+ 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import org.geojson.Feature;
 import org.geojson.LineString;
 import org.geojson.MultiLineString;
@@ -53,7 +54,9 @@ public class GeoJsonParser extends JsonParser {
   public GuessSchema getGuessSchema(InputStream inputStream) {
     Feature geoFeature = null;
     try {
-      geoFeature = new ObjectMapper().readValue(inputStream, Feature.class);
+      geoFeature = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).readValue(inputStream, Feature.class);
 
     } catch (IOException e) {
       throw new ParseException("Could not parse geo json into a feature type", 
e);
diff --git 
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/JsonParser.java
 
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/JsonParser.java
index 3b10c4c551..e8d2d307db 100644
--- 
a/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/JsonParser.java
+++ 
b/streampipes-extensions-management/src/main/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/JsonParser.java
@@ -22,11 +22,14 @@ import 
org.apache.streampipes.commons.exceptions.connect.ParseException;
 import org.apache.streampipes.extensions.api.connect.IParserEventHandler;
 import 
org.apache.streampipes.extensions.management.connect.adapter.parser.ParserUtils;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.Map;
 
 public abstract class JsonParser {
 
@@ -34,7 +37,9 @@ public abstract class JsonParser {
   protected final ParserUtils parserUtils;
 
   public JsonParser() {
-    this.mapper = new ObjectMapper();
+    this.mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
     this.parserUtils = new ParserUtils();
   }
 
diff --git 
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/CsvParserTest.java
 
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/CsvParserTest.java
index e34e350bc1..9b35d32bf4 100644
--- 
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/CsvParserTest.java
+++ 
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/CsvParserTest.java
@@ -28,6 +28,7 @@ import org.apache.streampipes.sdk.utils.Datatypes;
 
 import org.junit.jupiter.api.Test;
 
+
 import java.io.InputStream;
 import java.util.HashMap;
 import java.util.Map;
@@ -68,6 +69,7 @@ public class CsvParserTest extends ParserTest {
     assertEquals(sampleExpected.getFieldStatusInfo(), 
result.getFieldStatusInfo());
 
     String preview = result.getEventPreview().get(0).toString();
+    preview = preview.replaceAll("[\\s\\n\\r]+", "");
     assertTrue(preview.equals("{\"k2\":2.0,\"k1\":\"v1\"}") || 
preview.equals("{\"k1\":\"v1\",\"k2\":2.0}"));
   }
 
@@ -83,6 +85,7 @@ public class CsvParserTest extends ParserTest {
     assertEquals(sampleExpected.getFieldStatusInfo(), 
result.getFieldStatusInfo());
 
     String preview = result.getEventPreview().get(0).toString();
+     preview = preview.replaceAll("[\\s\\n\\r]+", "");
     assertTrue(preview.equals("{\"k2\":2.0,\"k1\":\"v1\"}") || 
preview.equals("{\"k1\":\"v1\",\"k2\":2.0}"));
   }
 
diff --git 
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
 
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
index 069dad76ec..21d82924f7 100644
--- 
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
+++ 
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/XmlParserTest.java
@@ -72,6 +72,7 @@ public class XmlParserTest extends ParserTest {
     assertEquals(expected.getEventSchema(), result.getEventSchema());
 
     var previewJson = result.getEventPreview().get(0).toString();
+    previewJson = previewJson.replaceAll("[\\s\\n\\r]+", "");
     assertTrue(previewJson.contains("\"k1\":\"v1\""));
     assertTrue(previewJson.contains("\"k2\":1.0"));
   }
@@ -89,6 +90,7 @@ public class XmlParserTest extends ParserTest {
     assertEquals(expected.getEventSchema(), result.getEventSchema());
 
     var previewJson = result.getEventPreview().get(0).toString();
+    previewJson = previewJson.replaceAll("[\\s\\n\\r]+", "");
     assertTrue(previewJson.contains("\"k1\":\"v1\""));
     assertTrue(previewJson.contains("\"k2\":1.0"));
   }
diff --git 
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParserTest.java
 
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParserTest.java
index 399e1de02d..2169ed67bb 100644
--- 
a/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParserTest.java
+++ 
b/streampipes-extensions-management/src/test/java/org/apache/streampipes/extensions/management/connect/adapter/parser/json/GeoJsonParserTest.java
@@ -23,10 +23,11 @@ import org.apache.streampipes.model.schema.PropertyScope;
 import org.apache.streampipes.sdk.builder.PrimitivePropertyBuilder;
 import org.apache.streampipes.sdk.builder.adapter.GuessSchemaBuilder;
 import org.apache.streampipes.sdk.utils.Datatypes;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.vocabulary.Geo;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import org.apache.commons.io.IOUtils;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -100,7 +101,9 @@ public class GeoJsonParserTest {
 
   private InputStream toEvent(Map<String, Object> event) {
     try {
-      var s = new ObjectMapper().writeValueAsString(event);
+      var s = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).writeValueAsString(event);
       return IOUtils.toInputStream(s, StandardCharsets.UTF_8);
     } catch (JsonProcessingException e) {
       Assertions.fail("Could not convert event to string: " + event);
diff --git 
a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/oi4/Oi4Adapter.java
 
b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/oi4/Oi4Adapter.java
index 0a048b8bd4..15014cf230 100644
--- 
a/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/oi4/Oi4Adapter.java
+++ 
b/streampipes-extensions/streampipes-connect-adapters-iiot/src/main/java/org/apache/streampipes/connect/iiot/adapters/oi4/Oi4Adapter.java
@@ -44,7 +44,9 @@ import org.apache.streampipes.sdk.helpers.Alternatives;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
 import org.apache.streampipes.sdk.utils.Datatypes;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
@@ -91,7 +93,9 @@ public class Oi4Adapter implements StreamPipesAdapter {
 
 
   public Oi4Adapter() {
-    mapper = new ObjectMapper();
+    mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
   }
 
   @Override
diff --git 
a/streampipes-extensions/streampipes-connect-adapters-iiot/src/test/java/org/apache/streampipes/connect/iiot/adapters/oi4/model/DataSetMessageDeserializationTest.java
 
b/streampipes-extensions/streampipes-connect-adapters-iiot/src/test/java/org/apache/streampipes/connect/iiot/adapters/oi4/model/DataSetMessageDeserializationTest.java
index d699fd8ad8..6032753c0c 100644
--- 
a/streampipes-extensions/streampipes-connect-adapters-iiot/src/test/java/org/apache/streampipes/connect/iiot/adapters/oi4/model/DataSetMessageDeserializationTest.java
+++ 
b/streampipes-extensions/streampipes-connect-adapters-iiot/src/test/java/org/apache/streampipes/connect/iiot/adapters/oi4/model/DataSetMessageDeserializationTest.java
@@ -18,11 +18,15 @@
 
 package org.apache.streampipes.connect.iiot.adapters.oi4.model;
 
+import org.apache.streampipes.serializers.json.JacksonSerializer;
+
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
+import java.util.Map;
+
 public class DataSetMessageDeserializationTest {
 
   private String datasetMessageObjectPayload = """
@@ -63,14 +67,18 @@ public class DataSetMessageDeserializationTest {
 
   @Test
   public void testObjectDeserialization() throws JsonProcessingException {
-    var mapper = new ObjectMapper();
+    var mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
     var deserialized = mapper.readValue(datasetMessageObjectPayload, 
DataSetMessage.class);
     Assertions.assertEquals(4, deserialized.payload().size());
   }
 
   @Test
   public void testArrayDeserialization() throws JsonProcessingException {
-    var mapper = new ObjectMapper();
+    var mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
     var deserialized = mapper.readValue(datasetMessageArrayPayload, 
DataSetMessage.class);
     Assertions.assertEquals(4, deserialized.payload().size());
   }
diff --git 
a/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarPublisherSink.java
 
b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarPublisherSink.java
index af5d35793a..daf8d9bae4 100644
--- 
a/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarPublisherSink.java
+++ 
b/streampipes-extensions/streampipes-connectors-pulsar/src/main/java/org/apache/streampipes/extensions/connectors/pulsar/sink/PulsarPublisherSink.java
@@ -18,8 +18,8 @@
 package org.apache.streampipes.extensions.connectors.pulsar.sink;
 
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
-import org.apache.streampipes.dataformat.SpDataFormatDefinition;
 import org.apache.streampipes.dataformat.JsonDataFormatDefinition;
+import org.apache.streampipes.dataformat.SpDataFormatDefinition;
 import org.apache.streampipes.extensions.api.pe.IStreamPipesDataSink;
 import org.apache.streampipes.extensions.api.pe.config.IDataSinkConfiguration;
 import 
org.apache.streampipes.extensions.api.pe.context.EventSinkRuntimeContext;
diff --git 
a/streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarPublisherSink.java
 
b/streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarPublisherSink.java
index d2c0212f29..0e6f1dcda9 100644
--- 
a/streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarPublisherSink.java
+++ 
b/streampipes-extensions/streampipes-connectors-pulsar/src/test/java/org/apache/streampipes/extensions/connectors/pulsar/TestPulsarPublisherSink.java
@@ -21,8 +21,10 @@ import 
org.apache.streampipes.extensions.api.pe.param.IDataSinkParameters;
 import 
org.apache.streampipes.extensions.connectors.pulsar.sink.PulsarPublisherSink;
 import org.apache.streampipes.model.runtime.Event;
 import org.apache.streampipes.sdk.extractor.DataSinkParameterExtractor;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.pulsar.client.api.ClientBuilder;
 import org.apache.pulsar.client.api.Producer;
@@ -73,7 +75,9 @@ public class TestPulsarPublisherSink {
     when(producerBuilder.create()).thenReturn(producer);
     when(producer.send(Mockito.any(byte[].class))).thenAnswer(data -> {
       HashMap<String, String> map;
-      ObjectMapper mapper = new ObjectMapper();
+      ObjectMapper mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
       String json = new String((byte[]) data.getArgument(0));
       map = mapper.readValue(json, new TypeReference<>() {
       });
diff --git 
a/streampipes-extensions/streampipes-connectors-ros/src/main/java/org/apache/streampipes/connectors/ros/adapter/RosBridgeAdapter.java
 
b/streampipes-extensions/streampipes-connectors-ros/src/main/java/org/apache/streampipes/connectors/ros/adapter/RosBridgeAdapter.java
index 68458282eb..4d31eba925 100644
--- 
a/streampipes-extensions/streampipes-connectors-ros/src/main/java/org/apache/streampipes/connectors/ros/adapter/RosBridgeAdapter.java
+++ 
b/streampipes-extensions/streampipes-connectors-ros/src/main/java/org/apache/streampipes/connectors/ros/adapter/RosBridgeAdapter.java
@@ -36,8 +36,10 @@ import org.apache.streampipes.model.staticproperty.Option;
 import org.apache.streampipes.sdk.builder.adapter.AdapterConfigurationBuilder;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.gson.JsonArray;
 import com.google.gson.JsonObject;
@@ -68,7 +70,9 @@ public class RosBridgeAdapter implements StreamPipesAdapter, 
ResolvesContainerPr
   private String host;
   private int port;
 
-  private final ObjectMapper mapper = new ObjectMapper();
+  private final ObjectMapper mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
 
   private Ros ros;
 
diff --git 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/redis/Redis.java
 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/redis/Redis.java
index ff4b8ce52f..168938656d 100644
--- 
a/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/redis/Redis.java
+++ 
b/streampipes-extensions/streampipes-sinks-databases-jvm/src/main/java/org/apache/streampipes/sinks/databases/jvm/redis/Redis.java
@@ -20,15 +20,18 @@ package org.apache.streampipes.sinks.databases.jvm.redis;
 
 import org.apache.streampipes.commons.exceptions.SpRuntimeException;
 import org.apache.streampipes.model.runtime.Event;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import org.apache.commons.lang3.StringUtils;
 import redis.clients.jedis.Jedis;
 import redis.clients.jedis.JedisPool;
 import redis.clients.jedis.JedisPoolConfig;
 import redis.clients.jedis.exceptions.JedisException;
 
+import java.util.Map;
+
 public class Redis {
 
   private static final String EVENT_PREFIX = "sp:event:";
@@ -125,7 +128,9 @@ public class Redis {
 
   private String getEventValue(Event event) throws SpRuntimeException {
     try {
-      return new ObjectMapper().writeValueAsString(event.getRaw());
+      return JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).writeValueAsString(event.getRaw());
     } catch (JsonProcessingException e) {
       throw new SpRuntimeException("Could not convert event to JSON", e);
     }
diff --git 
a/streampipes-extensions/streampipes-sinks-notifications-jvm/src/main/java/org/apache/streampipes/sinks/notifications/jvm/msteams/MSTeamsSink.java
 
b/streampipes-extensions/streampipes-sinks-notifications-jvm/src/main/java/org/apache/streampipes/sinks/notifications/jvm/msteams/MSTeamsSink.java
index 4f03b1c6df..10129f3634 100644
--- 
a/streampipes-extensions/streampipes-sinks-notifications-jvm/src/main/java/org/apache/streampipes/sinks/notifications/jvm/msteams/MSTeamsSink.java
+++ 
b/streampipes-extensions/streampipes-sinks-notifications-jvm/src/main/java/org/apache/streampipes/sinks/notifications/jvm/msteams/MSTeamsSink.java
@@ -34,9 +34,11 @@ import org.apache.streampipes.sdk.helpers.Alternatives;
 import org.apache.streampipes.sdk.helpers.EpRequirements;
 import org.apache.streampipes.sdk.helpers.Labels;
 import org.apache.streampipes.sdk.helpers.Locales;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.wrapper.standalone.StreamPipesNotificationSink;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpStatus;
@@ -50,6 +52,7 @@ import org.apache.http.impl.client.HttpClients;
 import java.io.IOException;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.util.Map;
 
 public class MSTeamsSink extends StreamPipesNotificationSink {
 
@@ -76,7 +79,9 @@ public class MSTeamsSink extends StreamPipesNotificationSink {
 
   public MSTeamsSink() {
     super();
-    this.objectMapper = new ObjectMapper();
+    this.objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
   }
 
   @Override
@@ -97,7 +102,9 @@ public class MSTeamsSink extends StreamPipesNotificationSink 
{
   ) {
     super.onPipelineStarted(parameters, runtimeContext);
 
-    this.objectMapper = new ObjectMapper();
+    this.objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
 
     var extractor = parameters.extractor();
     webhookUrl = extractor.secretValue(KEY_WEBHOOK_URL);
diff --git 
a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/KafkaAdapterTester.java
 
b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/KafkaAdapterTester.java
index fd49dc1728..6919877644 100644
--- 
a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/KafkaAdapterTester.java
+++ 
b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/KafkaAdapterTester.java
@@ -32,9 +32,10 @@ import org.apache.streampipes.model.staticproperty.Option;
 import 
org.apache.streampipes.model.staticproperty.RuntimeResolvableOneOfStaticProperty;
 import org.apache.streampipes.model.staticproperty.StaticPropertyAlternatives;
 import org.apache.streampipes.model.template.PipelineElementTemplate;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
@@ -146,7 +147,9 @@ public class KafkaAdapterTester extends AdapterTesterBase {
   @Override
   public void publishEvents(List<Map<String, Object>> events) {
     var publisher = getSpKafkaProducer();
-    var objectMapper = new ObjectMapper();
+    var objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
 
     events.forEach(event -> {
       try {
diff --git 
a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/MQTTPublisherUtils.java
 
b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/MQTTPublisherUtils.java
index 21c1d76d0e..87ce58e814 100644
--- 
a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/MQTTPublisherUtils.java
+++ 
b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/MQTTPublisherUtils.java
@@ -21,9 +21,10 @@ package org.apache.streampipes.integration.adapters;
 import org.apache.streampipes.integration.containers.MosquittoContainer;
 import org.apache.streampipes.messaging.mqtt.MqttPublisher;
 import org.apache.streampipes.model.grounding.MqttTransportProtocol;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.List;
@@ -32,8 +33,10 @@ import java.util.Map;
 public class MQTTPublisherUtils {
 
     public static void publishEvents(MqttPublisher publisher, List<Map<String, 
Object>> events) {
-        var objectMapper = new ObjectMapper();
-
+        var objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
+ 
         events.forEach(event -> {
             try {
                 var serializedEvent = objectMapper.writeValueAsBytes(event);
diff --git 
a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/PulsarAdapterTester.java
 
b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/PulsarAdapterTester.java
index 421e380d30..a89223e734 100644
--- 
a/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/PulsarAdapterTester.java
+++ 
b/streampipes-integration-tests/src/test/java/org/apache/streampipes/integration/adapters/PulsarAdapterTester.java
@@ -27,9 +27,10 @@ import org.apache.streampipes.integration.utils.Utils;
 import org.apache.streampipes.manager.template.AdapterTemplateHandler;
 import org.apache.streampipes.model.staticproperty.StaticPropertyAlternatives;
 import org.apache.streampipes.model.template.PipelineElementTemplate;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import org.apache.pulsar.client.api.Producer;
 import org.apache.pulsar.client.api.PulsarClient;
 import org.apache.pulsar.client.api.PulsarClientException;
@@ -98,7 +99,9 @@ public class PulsarAdapterTester extends AdapterTesterBase {
                 pulsarContainer.getBrokerPort()))
         .build();
          Producer<byte[]> producer = 
client.newProducer().topic(TOPIC).create()) {
-      var objectMapper = new ObjectMapper();
+      var objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
 
       events.forEach(event -> {
         try {
diff --git a/streampipes-model/pom.xml b/streampipes-model/pom.xml
index f70b23a014..884b29c70d 100644
--- a/streampipes-model/pom.xml
+++ b/streampipes-model/pom.xml
@@ -41,6 +41,11 @@
             <groupId>org.apache.streampipes</groupId>
             <artifactId>streampipes-vocabulary</artifactId>
             <version>0.99.0-SNAPSHOT</version>
+        </dependency>
+         <dependency>
+            <groupId>org.apache.streampipes</groupId>
+            <artifactId>streampipes-serializers-json</artifactId>
+            <version>0.99.0-SNAPSHOT</version>
         </dependency>
         <!-- External dependencies -->
         <dependency>
diff --git 
a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/CustomMapSerializer.java
 
b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/CustomMapSerializer.java
index 335eb34605..7021a818e8 100644
--- 
a/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/CustomMapSerializer.java
+++ 
b/streampipes-model/src/main/java/org/apache/streampipes/model/datalake/CustomMapSerializer.java
@@ -17,14 +17,15 @@
  */
 package org.apache.streampipes.model.datalake;
 
+import org.apache.streampipes.serializers.json.JacksonSerializer;
+
 import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JsonSerializer;
-import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializerProvider;
 
 import java.io.IOException;
 import java.util.Map;
-
 /* TODO This is a really ugly hack to properly serialize custom configuration 
maps
     that are only typed in the UI.
  */
@@ -37,6 +38,8 @@ class CustomMapSerializer extends JsonSerializer<Map> {
 
   @Override
   public void serialize(Map s, JsonGenerator jsonGenerator, SerializerProvider 
serializerProvider) throws IOException {
-    jsonGenerator.writeRawValue(new ObjectMapper().writeValueAsString(s));
+    jsonGenerator.writeRawValue(JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).writeValueAsString(s));
   }
 }
diff --git 
a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/runtime/RateLimitedRuntimeInfoProvider.java
 
b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/runtime/RateLimitedRuntimeInfoProvider.java
index 7ef0949521..c40fe8816b 100644
--- 
a/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/runtime/RateLimitedRuntimeInfoProvider.java
+++ 
b/streampipes-pipeline-management/src/main/java/org/apache/streampipes/manager/runtime/RateLimitedRuntimeInfoProvider.java
@@ -18,10 +18,15 @@
 
 package org.apache.streampipes.manager.runtime;
 
+import org.apache.streampipes.serializers.json.JacksonSerializer;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
 
 import java.io.IOException;
 import java.io.OutputStream;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 public class RateLimitedRuntimeInfoProvider {
@@ -37,7 +42,10 @@ public class RateLimitedRuntimeInfoProvider {
   public RateLimitedRuntimeInfoProvider(DataStreamRuntimeInfoProvider 
runtimeInfoProvider,
                                         ClientDisconnectCallback callback) {
     this.runtimeInfoProvider = runtimeInfoProvider;
-    this.objectMapper = new ObjectMapper();
+    this.objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true,
+      SerializationFeature.INDENT_OUTPUT, false
+    ));
     this.callback = callback;
   }
 
diff --git a/streampipes-rest-shared/pom.xml b/streampipes-rest-shared/pom.xml
index 2371a2da79..850f2c588f 100644
--- a/streampipes-rest-shared/pom.xml
+++ b/streampipes-rest-shared/pom.xml
@@ -45,6 +45,11 @@
             <artifactId>streampipes-serializers-json</artifactId>
             <version>0.99.0-SNAPSHOT</version>
         </dependency>
+        <dependency>
+            <groupId>org.apache.streampipes</groupId>
+            <artifactId>streampipes-model</artifactId>
+            <version>0.99.0-SNAPSHOT</version>
+        </dependency>
 
         <!-- External dependencies -->
         <dependency>
diff --git 
a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/builder/adapter/GuessSchemaBuilder.java
 
b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/builder/adapter/GuessSchemaBuilder.java
index 3ed161b7cb..3e9a437cbc 100644
--- 
a/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/builder/adapter/GuessSchemaBuilder.java
+++ 
b/streampipes-sdk/src/main/java/org/apache/streampipes/sdk/builder/adapter/GuessSchemaBuilder.java
@@ -21,8 +21,10 @@ import 
org.apache.streampipes.model.connect.guess.FieldStatusInfo;
 import org.apache.streampipes.model.connect.guess.GuessSchema;
 import org.apache.streampipes.model.schema.EventProperty;
 import org.apache.streampipes.model.schema.EventSchema;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
 import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 
 import java.util.ArrayList;
@@ -41,7 +43,9 @@ public class GuessSchemaBuilder {
   private GuessSchemaBuilder() {
     this.eventProperties = new ArrayList<>();
     this.samples = new HashMap<>();
-    this.objectMapper = new ObjectMapper();
+    this.objectMapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
     this.fieldStatusInfos = new HashMap<>();
   }
 
diff --git a/streampipes-serializers-json/pom.xml 
b/streampipes-serializers-json/pom.xml
index 923f18fb32..b79cfd1483 100644
--- a/streampipes-serializers-json/pom.xml
+++ b/streampipes-serializers-json/pom.xml
@@ -27,36 +27,11 @@
     <artifactId>streampipes-serializers-json</artifactId>
 
     <dependencies>
-        <!-- StreamPipes dependencies -->
-        <dependency>
-            <groupId>org.apache.streampipes</groupId>
-            <artifactId>streampipes-model</artifactId>
-            <version>0.99.0-SNAPSHOT</version>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.streampipes</groupId>
-            <artifactId>streampipes-model-client</artifactId>
-            <version>0.99.0-SNAPSHOT</version>
-        </dependency>
-
         <!-- External dependencies -->
         <dependency>
             <groupId>com.fasterxml.jackson.core</groupId>
             <artifactId>jackson-databind</artifactId>
         </dependency>
-
-        <!-- Test dependencies -->
-        <dependency>
-            <groupId>org.apache.streampipes</groupId>
-            <artifactId>streampipes-test-utils</artifactId>
-            <version>0.99.0-SNAPSHOT</version>
-            <scope>test</scope>
-        </dependency>
-        <dependency>
-            <groupId>org.junit.jupiter</groupId>
-            <artifactId>junit-jupiter-api</artifactId>
-            <scope>test</scope>
-        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git 
a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/JacksonSerializer.java
 
b/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/JacksonSerializer.java
index aaa26a91a2..4e0e7aabcb 100644
--- 
a/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/JacksonSerializer.java
+++ 
b/streampipes-serializers-json/src/main/java/org/apache/streampipes/serializers/json/JacksonSerializer.java
@@ -20,16 +20,30 @@ package org.apache.streampipes.serializers.json;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.SerializationFeature;
+import com.fasterxml.jackson.databind.cfg.ConfigFeature;
+
+import java.util.Map;
 
 public class JacksonSerializer {
 
   public static ObjectMapper getObjectMapper() {
     ObjectMapper mapper = new ObjectMapper();
     mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
-    
mapper.activateDefaultTypingAsProperty(mapper.getPolymorphicTypeValidator(),
-        ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT, "@class");
-    mapper.enable(SerializationFeature.INDENT_OUTPUT);
+    mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+    return mapper;
+  }
 
+  public static ObjectMapper getObjectMapper(Map<ConfigFeature, Boolean> 
settings) {
+    ObjectMapper mapper = new ObjectMapper();
+    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+    mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
+    for (Map.Entry<ConfigFeature, Boolean> entry : settings.entrySet()) {
+      if (entry.getKey() instanceof SerializationFeature) {
+        mapper.configure((SerializationFeature) entry.getKey(), 
entry.getValue());
+      } else if (entry.getKey() instanceof DeserializationFeature) {
+        mapper.configure((DeserializationFeature) entry.getKey(), 
entry.getValue());
+      }
+    }
     return mapper;
   }
 }
diff --git 
a/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestJacksonSerializer.java
 
b/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestJacksonSerializer.java
deleted file mode 100644
index 22cee83f94..0000000000
--- 
a/streampipes-serializers-json/src/test/java/org/apache/streampipes/serializers/json/TestJacksonSerializer.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- */
-package org.apache.streampipes.serializers.json;
-
-import org.apache.streampipes.model.template.PipelineElementTemplate;
-import 
org.apache.streampipes.test.generator.template.PipelineElementTemplateHelpers;
-
-import com.fasterxml.jackson.core.JsonProcessingException;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.Test;
-
-public class TestJacksonSerializer {
-
-  public static void assertions(PipelineElementTemplate template) {
-    Assertions.assertEquals("name", template.getTemplateName());
-    Assertions.assertEquals("description", template.getTemplateDescription());
-    Assertions.assertEquals(2,
-        template.getTemplateConfigs().size());
-    Assertions.assertEquals("test-string",
-        findValue(template, "test-key"));
-  }
-
-  private static Object findValue(PipelineElementTemplate template,
-                                  String key) {
-    return template.getTemplateConfigs()
-        .stream()
-        .filter(t -> t.containsKey(key))
-        .map(t -> t.get(key))
-        .findFirst()
-        .orElseThrow(() -> new AssertionError("test-key not found"));
-  }
-
-  @Test
-  public void testPipelineElementTemplateSerialization() {
-    PipelineElementTemplate template = 
PipelineElementTemplateHelpers.makePipelineElementTemplate();
-
-    try {
-      String json = 
JacksonSerializer.getObjectMapper().writeValueAsString(template);
-      PipelineElementTemplate template2 =
-          JacksonSerializer.getObjectMapper().readValue(json, 
PipelineElementTemplate.class);
-      assertions(template2);
-      Assertions.assertEquals(2,
-          findValue(template2, "test-key-2"));
-    } catch (JsonProcessingException e) {
-      e.printStackTrace();
-    }
-  }
-}
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/MergeFilenamesAndRenameDuplicatesMigration.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/MergeFilenamesAndRenameDuplicatesMigration.java
index d8d2eed10c..0075f0ce8a 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/MergeFilenamesAndRenameDuplicatesMigration.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v095/MergeFilenamesAndRenameDuplicatesMigration.java
@@ -20,11 +20,13 @@ package org.apache.streampipes.service.core.migrations.v095;
 
 import org.apache.streampipes.manager.file.FileHandler;
 import org.apache.streampipes.model.file.FileMetadata;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.service.core.migrations.Migration;
 import org.apache.streampipes.storage.api.CRUDStorage;
 import org.apache.streampipes.storage.couchdb.utils.Utils;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.lightcouch.CouchDbClient;
 import org.slf4j.Logger;
@@ -46,7 +48,9 @@ public class MergeFilenamesAndRenameDuplicatesMigration 
implements Migration {
 
   private CouchDbClient couchDbClient;
 
-  private final ObjectMapper mapper = new ObjectMapper();
+  private final ObjectMapper mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
 
   private final CRUDStorage<FileMetadata> fileMetadataStorage =
       StorageDispatcher.INSTANCE.getNoSqlStore().getFileMetadataStorage();
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/ModifyAssetLinkTypesMigration.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/ModifyAssetLinkTypesMigration.java
index 09446db58d..e4618dcaad 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/ModifyAssetLinkTypesMigration.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/ModifyAssetLinkTypesMigration.java
@@ -19,11 +19,12 @@
 package org.apache.streampipes.service.core.migrations.v0980;
 
 import org.apache.streampipes.commons.constants.GenericDocTypes;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.service.core.migrations.Migration;
 import org.apache.streampipes.storage.api.IGenericStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 
 import java.io.IOException;
 import java.util.List;
@@ -54,10 +55,14 @@ public class ModifyAssetLinkTypesMigration implements 
Migration {
         al.put("navPaths", List.of("dataexplorer", "chart"));
         al.put("linkIcon", "query_stats");
         al.put("linkQueryHint", "chart");
-        storage.update(al.get("_id").toString(), new 
ObjectMapper().writeValueAsString(al));
+        
storage.update(al.get("_id").toString(),JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).writeValueAsString(al));
       } else if (al.get("linkType").equals("dashboard")) {
         al.put("linkIcon", "dashboard");
-        storage.update(al.get("_id").toString(), new 
ObjectMapper().writeValueAsString(al));
+        
storage.update(al.get("_id").toString(),JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).writeValueAsString(al));
       }
     }
   }
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/ModifyAssetLinksMigration.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/ModifyAssetLinksMigration.java
index 012ecad44c..f90d5caaf5 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/ModifyAssetLinksMigration.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v0980/ModifyAssetLinksMigration.java
@@ -19,11 +19,12 @@
 package org.apache.streampipes.service.core.migrations.v0980;
 
 import org.apache.streampipes.commons.constants.GenericDocTypes;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.service.core.migrations.Migration;
 import org.apache.streampipes.storage.api.IGenericStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
-import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.DeserializationFeature;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -52,7 +53,9 @@ public class ModifyAssetLinksMigration implements Migration {
     var assets = storage.findAll(GenericDocTypes.DOC_ASSET_MANGEMENT);
     for (Map<String, Object> asset : assets) {
       updateAssetLink(asset);
-      storage.update(asset.get("_id").toString(), new 
ObjectMapper().writeValueAsString(asset));
+      
storage.update(asset.get("_id").toString(),JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    )).writeValueAsString(asset));
     }
   }
 
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v099/MoveAssetContentMigration.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v099/MoveAssetContentMigration.java
index b90b71fb98..67d9a4e5f1 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v099/MoveAssetContentMigration.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v099/MoveAssetContentMigration.java
@@ -19,10 +19,12 @@
 package org.apache.streampipes.service.core.migrations.v099;
 
 import org.apache.streampipes.model.assets.SpAssetModel;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.service.core.migrations.Migration;
 import org.apache.streampipes.storage.api.IGenericStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -38,7 +40,9 @@ public class MoveAssetContentMigration implements Migration {
   private static final Logger LOG = 
LoggerFactory.getLogger(MoveAssetContentMigration.class);
 
   private IGenericStorage genericStorage;
-  private final ObjectMapper mapper = new ObjectMapper();
+  private final ObjectMapper mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
 
   private static final Set<String> allowedKeys = Set.of(
       "assetId",
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v970/ModifyAssetLinkTypeMigration.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v970/ModifyAssetLinkTypeMigration.java
index 5515e964a4..ac1e2894e7 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v970/ModifyAssetLinkTypeMigration.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/migrations/v970/ModifyAssetLinkTypeMigration.java
@@ -20,10 +20,12 @@ package org.apache.streampipes.service.core.migrations.v970;
 
 import org.apache.streampipes.commons.constants.GenericDocTypes;
 import org.apache.streampipes.model.assets.AssetLinkType;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.service.core.migrations.Migration;
 import org.apache.streampipes.storage.api.IGenericStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.fasterxml.jackson.databind.type.CollectionType;
 import org.slf4j.Logger;
@@ -38,7 +40,9 @@ public class ModifyAssetLinkTypeMigration implements 
Migration {
   private static final Logger LOG = 
LoggerFactory.getLogger(ModifyAssetLinkTypeMigration.class);
 
   private final IGenericStorage genericStorage = 
StorageDispatcher.INSTANCE.getNoSqlStore().getGenericStorage();
-  private final ObjectMapper objectMapper = new ObjectMapper();
+  private final ObjectMapper objectMapper = 
JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
 
   public ModifyAssetLinkTypeMigration() {
 
diff --git 
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/GenericStorageImpl.java
 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/GenericStorageImpl.java
index bc22e227de..45cc6ab310 100644
--- 
a/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/GenericStorageImpl.java
+++ 
b/streampipes-storage-couchdb/src/main/java/org/apache/streampipes/storage/couchdb/impl/GenericStorageImpl.java
@@ -19,6 +19,7 @@
 package org.apache.streampipes.storage.couchdb.impl;
 
 import org.apache.streampipes.model.file.GenericStorageAttachment;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 import org.apache.streampipes.storage.api.IGenericStorage;
 import 
org.apache.streampipes.storage.couchdb.constants.GenericCouchDbConstants;
 import org.apache.streampipes.storage.couchdb.utils.Utils;
@@ -26,7 +27,6 @@ import org.apache.streampipes.storage.couchdb.utils.Utils;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.core.type.TypeReference;
-import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.http.client.fluent.Content;
 import org.apache.http.client.fluent.Request;
@@ -50,10 +50,9 @@ public class GenericStorageImpl implements IGenericStorage {
   private final ObjectMapper mapper;
 
   public GenericStorageImpl() {
-    this.mapper = new ObjectMapper();
+    this.mapper = JacksonSerializer.getObjectMapper();
     this.mapper
-        .setSerializationInclusion(JsonInclude.Include.NON_NULL)
-        .configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+        .setSerializationInclusion(JsonInclude.Include.NON_NULL);
   }
 
   @Override
diff --git 
a/streampipes-wrapper-kafka-streams/src/main/java/org/apache/streampipes/wrapper/kafka/converter/JsonToMapFormat.java
 
b/streampipes-wrapper-kafka-streams/src/main/java/org/apache/streampipes/wrapper/kafka/converter/JsonToMapFormat.java
index 390dc65e40..21312ccfef 100644
--- 
a/streampipes-wrapper-kafka-streams/src/main/java/org/apache/streampipes/wrapper/kafka/converter/JsonToMapFormat.java
+++ 
b/streampipes-wrapper-kafka-streams/src/main/java/org/apache/streampipes/wrapper/kafka/converter/JsonToMapFormat.java
@@ -18,7 +18,9 @@
 package org.apache.streampipes.wrapper.kafka.converter;
 
 import org.apache.streampipes.model.base.InvocableStreamPipesEntity;
+import org.apache.streampipes.serializers.json.JacksonSerializer;
 
+import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.kafka.streams.kstream.ValueMapper;
 
@@ -34,7 +36,9 @@ public class JsonToMapFormat implements ValueMapper<String, 
Iterable<Map<String,
   private InvocableStreamPipesEntity graph;
 
   public JsonToMapFormat(InvocableStreamPipesEntity graph) {
-    this.mapper = new ObjectMapper();
+    this.mapper = JacksonSerializer.getObjectMapper(Map.of(
+      DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, true
+    ));
     this.graph = graph;
   }
 


Reply via email to