This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch 23174 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 5accd1f881635777769a3825724e985398caea5c Author: Andrea Cosentino <[email protected]> AuthorDate: Wed Mar 11 12:13:56 2026 +0100 CAMEL-23174 - Kamelet: transformer in aws-ddb-sink is not executed Signed-off-by: Andrea Cosentino <[email protected]> --- .../camel/dsl/yaml/KameletRoutesBuilderLoader.java | 52 ++++++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java index 22baf4968b7d..50b0aa75c6e6 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/main/java/org/apache/camel/dsl/yaml/KameletRoutesBuilderLoader.java @@ -31,6 +31,7 @@ import org.apache.camel.model.RouteTemplateParameterDefinition; import org.apache.camel.spi.CamelContextCustomizer; import org.apache.camel.spi.DependencyStrategy; import org.apache.camel.spi.annotations.RoutesLoader; +import org.snakeyaml.engine.v2.nodes.MappingNode; import org.snakeyaml.engine.v2.nodes.Node; import org.snakeyaml.engine.v2.nodes.NodeTuple; @@ -67,6 +68,12 @@ public class KameletRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport { final RouteTemplateDefinition rtd = ctx.construct(template, RouteTemplateDefinition.class); rtd.id(asText(nodeAt(root, "/metadata/name"))); + // process data types (inputType/outputType) if defined + Node dataTypesNode = nodeAt(root, "/spec/dataTypes"); + if (dataTypesNode != null) { + configureDataTypes(asMappingNode(dataTypesNode), rtd); + } + Node properties = nodeAt(root, "/spec/definition/properties"); if (properties != null) { rtd.setTemplateParameters(new ArrayList<>()); @@ -101,6 +108,51 @@ public class KameletRoutesBuilderLoader extends YamlRoutesBuilderLoaderSupport { }; } + private void configureDataTypes(MappingNode dataTypes, RouteTemplateDefinition rtd) { + MappingNode in = asMappingNode(nodeAt(dataTypes, "/in")); + if (in != null) { + String dataType = extractKameletDataType(in); + if (dataType != null) { + rtd.route().inputType(dataType); + } + } + MappingNode out = asMappingNode(nodeAt(dataTypes, "/out")); + if (out != null) { + String dataType = extractKameletDataType(out); + if (dataType != null) { + rtd.route().outputType(dataType); + } + } + } + + /** + * Extracts the data type name from a kamelet dataTypes direction node (in or out). The kamelet structure uses a + * default type name referencing a types map entry that contains scheme and format fields. + */ + private String extractKameletDataType(MappingNode directionNode) { + String defaultType = extractTupleValue(directionNode.getValue(), "default"); + if (defaultType == null) { + return null; + } + MappingNode types = asMappingNode(nodeAt(directionNode, "/types")); + if (types == null) { + return null; + } + MappingNode typeNode = asMappingNode(nodeAt(types, "/" + defaultType)); + if (typeNode == null) { + return null; + } + String scheme = extractTupleValue(typeNode.getValue(), "scheme"); + String format = extractTupleValue(typeNode.getValue(), "format"); + if (format == null) { + return null; + } + if (scheme != null) { + return scheme + ":" + format; + } + return format; + } + private CamelContextCustomizer preConfigureDependencies(Node node) { final List<String> dep = YamlDeserializerSupport.asStringList(node); return new CamelContextCustomizer() {
