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;
}