You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2022/12/02 08:08:56 UTC

[camel-kamelets] 24/28: Simplify Json model data type

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

acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-kamelets.git

commit 00ccfe7e4fb16dfe8aa692d9579bbec2e72ca310
Author: Christoph Deppisch <cd...@redhat.com>
AuthorDate: Wed Nov 30 15:56:53 2022 +0100

    Simplify Json model data type
    
    - Remove JacksonDataFormat in favor of using simple ObjectMapper instance
    - Reuse ObjectMapper instance for all exchanges processed by the data type
---
 .../converter/standard/JsonModelDataType.java      | 22 +++++++++++++++++-----
 .../converter/standard/JsonModelDataTypeTest.java  | 14 +++++++++++++-
 2 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/JsonModelDataType.java b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/JsonModelDataType.java
index 0a80ee32..183f1112 100644
--- a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/JsonModelDataType.java
+++ b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/standard/JsonModelDataType.java
@@ -26,7 +26,6 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Exchange;
 import org.apache.camel.InvalidPayloadException;
-import org.apache.camel.component.jackson.JacksonDataFormat;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter;
 import org.apache.camel.kamelets.utils.format.spi.annotations.DataType;
 import org.apache.camel.util.ObjectHelper;
@@ -41,21 +40,30 @@ public class JsonModelDataType implements DataTypeConverter, CamelContextAware {
 
     public static final String DATA_TYPE_MODEL_PROPERTY = "CamelDataTypeModel";
 
+    private String model;
+
     private CamelContext camelContext;
 
     private static final ObjectMapper mapper = new ObjectMapper();
 
     @Override
     public void convert(Exchange exchange) {
-        if (!exchange.hasProperties() || !exchange.getProperties().containsKey(DATA_TYPE_MODEL_PROPERTY)) {
+        String type;
+        if (exchange.hasProperties() && exchange.getProperties().containsKey(DATA_TYPE_MODEL_PROPERTY)) {
+            type = exchange.getProperty(DATA_TYPE_MODEL_PROPERTY, String.class);
+        } else {
+            type = model;
+        }
+
+        if (type == null) {
+            // neither model property nor exchange property defines proper type - do nothing
             return;
         }
 
         ObjectHelper.notNull(camelContext, "camelContext");
 
-        String type = exchange.getProperty(DATA_TYPE_MODEL_PROPERTY, String.class);
-        try (JacksonDataFormat dataFormat = new JacksonDataFormat(mapper, camelContext.getClassResolver().resolveMandatoryClass(type))) {
-            Object unmarshalled = dataFormat.unmarshal(exchange, getBodyAsStream(exchange));
+        try {
+            Object unmarshalled = mapper.reader().forType(camelContext.getClassResolver().resolveMandatoryClass(type)).readValue(getBodyAsStream(exchange));
             exchange.getMessage().setBody(unmarshalled);
         } catch (Exception e) {
             throw new CamelExecutionException(
@@ -78,6 +86,10 @@ public class JsonModelDataType implements DataTypeConverter, CamelContextAware {
         return camelContext;
     }
 
+    public void setModel(String model) {
+        this.model = model;
+    }
+
     @Override
     public void setCamelContext(CamelContext camelContext) {
         this.camelContext = camelContext;
diff --git a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/JsonModelDataTypeTest.java b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/JsonModelDataTypeTest.java
index cb253a16..7785017c 100644
--- a/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/JsonModelDataTypeTest.java
+++ b/library/camel-kamelets-utils/src/test/java/org/apache/camel/kamelets/utils/format/converter/standard/JsonModelDataTypeTest.java
@@ -44,7 +44,19 @@ public class JsonModelDataTypeTest {
     }
 
     @Test
-    void shouldMapFromStringToJsonModel() throws Exception {
+    void shouldMapStringToJsonModelWithModelProperty() throws Exception {
+        Exchange exchange = new DefaultExchange(camelContext);
+
+        exchange.getMessage().setBody("{ \"name\": \"Rajesh\", \"age\": 28}");
+        dataType.setModel(Person.class.getName());
+        dataType.convert(exchange);
+
+        assertEquals(Person.class, exchange.getMessage().getBody().getClass());
+        assertEquals("Rajesh", exchange.getMessage().getBody(Person.class).getName());
+    }
+
+    @Test
+    void shouldMapStringToJsonModelWithExchangeProperty() throws Exception {
         Exchange exchange = new DefaultExchange(camelContext);
 
         exchange.setProperty(JsonModelDataType.DATA_TYPE_MODEL_PROPERTY, Person.class.getName());