Claus Ibsen created CAMEL-25257:
-----------------------------------
Summary: camel-api / camel-jbang - SPI for declarations a feature
adds to route files (dependency detection and DSL conversion), implemented by
camel-semantic
Key: CAMEL-25257
URL: https://issues.apache.org/jira/browse/CAMEL-25257
Project: Camel
Issue Type: Improvement
Components: camel-core-api, camel-jbang, camel-ai
Reporter: Claus Ibsen
Fix For: 4.23.0
Some features add declarations to route files that are not part of the route
model, such as the questions of camel-semantic:
* YAML: a top-level {{- semantic:}} entry
* XML: a {{<semantic>}} element
* Java: {{semanticQuestions(this).question(...)...register()}}
Tooling that reads route files without running them cannot handle these today.
camel-jbang does not know that such a file needs camel-semantic, so the
declarations fail to load before the {{semantic}} language could pull the
dependency in. The route DSL converter ({{camel transform route}}, the source
editor, the {{camel_transform_route}} MCP tool) can only refuse them, because
only the feature itself knows its declarations.
This ticket adds an SPI so the feature carries this knowledge, and camel-jbang
stays free of feature code. It has two halves.
*1. Dependency detection, keyed by name*
A feature registers
{{META-INF/services/org/apache/camel/dsl-declarations/<name>}}, where the name
is the YAML key or XML element ({{semantic}}). The generated
{{camel-factoryfinder-known-dependencies.properties}} of camel-kamelet-main
then maps {{dsl-declarations/semantic}} to camel-semantic.
When camel-jbang ({{camel run}}, {{camel export}}, the converter) meets an
unknown top-level YAML key or XML element {{foo}}, it looks up
{{dsl-declarations/foo}}. That downloads the jar, so the declarations can load.
For Java, the {{org.apache.camel.semantic}} package is added to the known class
dependencies.
*2. The add-on*
An interface in camel-api {{org.apache.camel.spi}} ({{@since 4.23}}), found by
the key above. A feature implements it to:
* detect its declarations in a route source (YAML, XML, Java);
* take them out as plain data, leaving the routes to the regular readers;
* write them in another DSL.
The route DSL converter then carries the declarations over instead of refusing
them. camel-semantic implements it, YAML and XML first. Java needs reading the
{{semanticQuestions(...)}} chain without running it, because the Java DSL
parser deliberately does not replay it.
The add-on must follow the rules for tooling that reads route sources: no class
of the project is loaded, no code of the project runs, and no property
placeholder is resolved (see the security model).
_Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)