Skip to content

Commit

Permalink
Set proper media types
Browse files Browse the repository at this point in the history
  • Loading branch information
christophd committed Nov 24, 2022
1 parent 359b047 commit 856a8e2
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 10 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -19,21 +19,34 @@

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
* mechanisms in order to transform the message body to a given type.
*/
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())) {
Expand All @@ -48,6 +61,16 @@ public String getName() {
return name;
}

@Override
public String getScheme() {
return scheme;
}

@Override
public String getMediaType() {
return mediaType;
}

public Class<?> getType() {
return type;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
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;
Expand Down Expand Up @@ -87,7 +88,7 @@ public Optional<DataTypeConverter> lookup(String scheme, String name) {

Optional<DataTypeConverter> dataTypeConverter = getDataTypeConverter(scheme, name);
if (!dataTypeConverter.isPresent()) {
dataTypeConverter = getDataTypeConverter("camel", name);
dataTypeConverter = getDataTypeConverter(DataType.DEFAULT_SCHEME, name);
}

return dataTypeConverter;
Expand All @@ -101,8 +102,8 @@ protected void doInit() throws Exception {
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());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@
* 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);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
/**
* 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
* 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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
* <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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand All @@ -36,4 +36,28 @@ default String getName() {

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 "";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,11 +31,13 @@
@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.
Expand Down

0 comments on commit 856a8e2

Please sign in to comment.