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 5595de757efb9c191c3ec06e6e97abf302252722
Author: Christoph Deppisch <cdeppi...@redhat.com>
AuthorDate: Thu Nov 24 16:49:34 2022 +0100

    Set proper media types
---
 .../utils/format/DefaultDataTypeConverter.java     | 25 ++++++++++++++++++++-
 .../utils/format/DefaultDataTypeRegistry.java      |  7 +++---
 .../converter/aws2/ddb/Ddb2JsonInputType.java      |  2 +-
 .../converter/aws2/s3/AWS2S3BinaryOutputType.java  |  2 +-
 .../aws2/s3/AWS2S3CloudEventOutputType.java        |  2 +-
 .../converter/standard/JsonModelDataType.java      |  2 +-
 .../utils/format/spi/DataTypeConverter.java        | 26 +++++++++++++++++++++-
 .../utils/format/spi/annotations/DataType.java     |  4 +++-
 8 files changed, 60 insertions(+), 10 deletions(-)

diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverter.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverter.java
index 11680b50..9f2c31ce 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverter.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeConverter.java
@@ -19,6 +19,7 @@ package org.apache.camel.kamelets.utils.format;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeConverter;
+import org.apache.camel.kamelets.utils.format.spi.annotations.DataType;
 
 /**
  * Default data type converter receives a name and a target type in order to 
use traditional exchange body conversion
@@ -26,14 +27,26 @@ import 
org.apache.camel.kamelets.utils.format.spi.DataTypeConverter;
  */
 public class DefaultDataTypeConverter implements DataTypeConverter {
 
+    private final String scheme;
     private final String name;
+    private final String mediaType;
     private final Class<?> type;
 
-    public DefaultDataTypeConverter(String name, Class<?> type) {
+    public DefaultDataTypeConverter(String scheme, String name, String 
mediaType, Class<?> type) {
+        this.scheme = scheme;
         this.name = name;
+        this.mediaType = mediaType;
         this.type = type;
     }
 
+    public DefaultDataTypeConverter(String scheme, String name, Class<?> type) 
{
+        this(scheme, name, "", type);
+    }
+
+    public DefaultDataTypeConverter(String name, Class<?> type) {
+        this(DataType.DEFAULT_SCHEME, name, type);
+    }
+
     @Override
     public void convert(Exchange exchange) {
         if (type.isInstance(exchange.getMessage().getBody())) {
@@ -48,6 +61,16 @@ public class DefaultDataTypeConverter implements 
DataTypeConverter {
         return name;
     }
 
+    @Override
+    public String getScheme() {
+        return scheme;
+    }
+
+    @Override
+    public String getMediaType() {
+        return mediaType;
+    }
+
     public Class<?> getType() {
         return type;
     }
diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java
index d393e6c7..3d5b514e 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/DefaultDataTypeRegistry.java
@@ -30,6 +30,7 @@ import 
org.apache.camel.kamelets.utils.format.spi.DataTypeConverter;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeConverterResolver;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeLoader;
 import org.apache.camel.kamelets.utils.format.spi.DataTypeRegistry;
+import org.apache.camel.kamelets.utils.format.spi.annotations.DataType;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.apache.camel.util.ObjectHelper;
@@ -87,7 +88,7 @@ public class DefaultDataTypeRegistry extends ServiceSupport 
implements DataTypeR
 
         Optional<DataTypeConverter> dataTypeConverter = 
getDataTypeConverter(scheme, name);
         if (!dataTypeConverter.isPresent()) {
-            dataTypeConverter = getDataTypeConverter("camel", name);
+            dataTypeConverter = getDataTypeConverter(DataType.DEFAULT_SCHEME, 
name);
         }
 
         return dataTypeConverter;
@@ -101,8 +102,8 @@ public class DefaultDataTypeRegistry extends ServiceSupport 
implements DataTypeR
             dataTypeLoaders.add(new AnnotationDataTypeLoader());
         }
 
-        addDataTypeConverter(new DefaultDataTypeConverter("string", 
String.class));
-        addDataTypeConverter(new DefaultDataTypeConverter("binary", 
byte[].class));
+        addDataTypeConverter(new 
DefaultDataTypeConverter(DataType.DEFAULT_SCHEME, "string", "text/plain", 
String.class));
+        addDataTypeConverter(new 
DefaultDataTypeConverter(DataType.DEFAULT_SCHEME, "binary", 
"application/octet-stream", byte[].class));
 
         for (DataTypeLoader loader : dataTypeLoaders) {
             CamelContextAware.trySetCamelContext(loader, getCamelContext());
diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/ddb/Ddb2JsonInputType.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/ddb/Ddb2JsonInputType.java
index a15ff3a0..471e569f 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/ddb/Ddb2JsonInputType.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/ddb/Ddb2JsonInputType.java
@@ -77,7 +77,7 @@ import 
software.amazon.awssdk.services.dynamodb.model.ReturnValue;
  * In case key and item attribute value maps are identical you can omit the 
special top level properties completely. The
  * converter will map the whole Json body as is then and use it as source for 
the attribute value map.
  */
-@DataType(scheme = "aws2-ddb", name = "json")
+@DataType(scheme = "aws2-ddb", name = "json", mediaType = "application/json")
 public class Ddb2JsonInputType implements DataTypeConverter {
 
     private final JacksonDataFormat dataFormat = new JacksonDataFormat(new 
ObjectMapper(), JsonNode.class);
diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputType.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputType.java
index 6065ebd1..5f1fa0b8 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputType.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3BinaryOutputType.java
@@ -30,7 +30,7 @@ import software.amazon.awssdk.utils.IoUtils;
 /**
  * Binary output type.
  */
-@DataType(scheme = "aws2-s3", name = "binary")
+@DataType(scheme = "aws2-s3", name = "binary", mediaType = 
"application/octet-stream")
 public class AWS2S3BinaryOutputType implements DataTypeConverter {
 
     @Override
diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3CloudEventOutputType.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3CloudEventOutputType.java
index 399e0111..2eb5cb04 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3CloudEventOutputType.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/converter/aws2/s3/AWS2S3CloudEventOutputType.java
@@ -33,7 +33,7 @@ import 
org.apache.camel.kamelets.utils.format.spi.annotations.DataType;
  * Output data type represents AWS S3 get object response as CloudEvent V1. 
The data type sets Camel specific
  * CloudEvent headers on the exchange.
  */
-@DataType(scheme = "aws2-s3", name = "cloudevents")
+@DataType(scheme = "aws2-s3", name = "cloudevents", mediaType = 
"application/octet-stream")
 public class AWS2S3CloudEventOutputType implements DataTypeConverter {
 
     @Override
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 d8d4ca4e..54c67785 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
@@ -33,7 +33,7 @@ import 
org.apache.camel.kamelets.utils.format.spi.annotations.DataType;
  * <p/>
  * Unmarshal type should be given as a fully qualified class name in the 
exchange properties.
  */
-@DataType(name = "jsonObject")
+@DataType(name = "jsonObject", mediaType = "application/json")
 public class JsonModelDataType implements DataTypeConverter {
 
     public static final String DATA_TYPE_MODEL_PROPERTY = "CamelDataTypeModel";
diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/spi/DataTypeConverter.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/spi/DataTypeConverter.java
index d39d30f8..a275b67b 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/spi/DataTypeConverter.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/spi/DataTypeConverter.java
@@ -26,7 +26,7 @@ public interface DataTypeConverter {
     void convert(Exchange exchange);
 
     /**
-     * Gets the data type converter name. Automatically derives the name from 
given type annotation.
+     * Gets the data type converter name. Automatically derives the name from 
given data type annotation.
      * @return
      */
     default String getName() {
@@ -36,4 +36,28 @@ public interface DataTypeConverter {
 
         throw new UnsupportedOperationException("Missing data type converter 
name");
     }
+
+    /**
+     * Gets the data type component scheme. Automatically derived from given 
data type annotation.
+     * @return
+     */
+    default String getScheme() {
+        if (this.getClass().isAnnotationPresent(DataType.class)) {
+            return this.getClass().getAnnotation(DataType.class).scheme();
+        }
+
+        return DataType.DEFAULT_SCHEME;
+    }
+
+    /**
+     * Gets the data type media type. Automatically derived from given data 
type annotation.
+     * @return
+     */
+    default String getMediaType() {
+        if (this.getClass().isAnnotationPresent(DataType.class)) {
+            return this.getClass().getAnnotation(DataType.class).mediaType();
+        }
+
+        return "";
+    }
 }
diff --git 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/spi/annotations/DataType.java
 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/spi/annotations/DataType.java
index b1d4f5a9..40a3030a 100644
--- 
a/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/spi/annotations/DataType.java
+++ 
b/library/camel-kamelets-utils/src/main/java/org/apache/camel/kamelets/utils/format/spi/annotations/DataType.java
@@ -31,11 +31,13 @@ import java.lang.annotation.Target;
 @Target({ ElementType.TYPE })
 public @interface DataType {
 
+    String DEFAULT_SCHEME = "camel";
+
     /**
      * Camel component scheme.
      * @return
      */
-    String scheme() default "camel";
+    String scheme() default DEFAULT_SCHEME;
 
     /**
      * Data type name.

Reply via email to