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.