Skip to content

CAMEL-25771: camel-core - a route checksum and revision, so tools can tell which routes changed between two runs or after a reload - #28213

Open
davsclaus wants to merge 6 commits into
mainfrom
feature/CAMEL-25771-route-checksum
Open

davsclaus wants to merge 6 commits into
mainfrom
feature/CAMEL-25771-route-checksum

Conversation

@davsclaus

@davsclaus davsclaus commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

A tool that watches a running Camel app (the Camel CLI, the MCP tools, an IDE, an AI agent) knows the routes by id and file. After a restart or a reload it cannot tell which routes changed: every route of a file comes back under the same file name, and a generated id such as route3 may now belong to another route. This gives each route two values, shown the same way everywhere (CAMEL-25771).

Checksum: a short hex digest (12 characters of a SHA-256) of the route as written:

  • It covers the route's steps, their options and expressions, with property placeholders as written.
  • It leaves out:
    • the ids Camel generates, including the ones a route template or a Kamelet makes from a counter when it creates a route: the node prefix, the id of a Kamelet route without one of its own, and the routeId of its kamelet:source and kamelet:sink. A templated route created again, such as by a reload, keeps its checksum;
    • the hash that an Endpoint DSL builder adds for options that are objects (an identity hash, different in every run);
    • the source locations, so moving a route in its file or adding a route above it keeps the checksum;
    • the onException, intercept and onCompletion that route configurations add to every route, so one edit to a shared configuration does not mark every route changed. The onException of the route itself is part of it.
  • The secrets in endpoint URIs are masked before they are hashed, so the checksum printed beside masked URIs cannot be used to check a guessed password.
  • The same route gives the same checksum in every run.

Revision: a counter per route id in the running app.

  • It is 1 when the route is added, one more each time it is added again with another checksum, and unchanged when it comes back the same.
  • It survives the route being removed and added again, and starts over when the app restarts. Across restarts, tools compare checksums.
  • It is set before RouteAddedEvent and onRoutesAdd, so listeners and JMX see it. Camel keeps the revisions of the 10000 route ids used last.

How

  • A new SPI, ModelChecksumGenerator (camel-api, @since 4.24), computes the checksum when a route is prepared, before the route configurations are merged in (RouteDefinitionHelper.prepareRoute).
  • It is implemented only in camel-xml-io, where the generated ModelWriter writes every option of the model straight into the digest. That is a single implementation on purpose:
    • camel-xml-io and camel-xml-jaxb both register the XML dumper, so hashing the dumper's output would depend on the classpath order;
    • the dumper also writes source locations while debugging.
  • The checksum is null without camel-xml-io, which comes with camel-core, camel-management and the CLI connector. Wherever the checksum can be seen (JMX, the consoles, the Camel CLI) it is there.
  • LwModelToXMLDumper now shares its writing with the generator: a refactor with no change to the dumps (the camel-xml-io tests and the route dump tests pass).

Where it shows

  • Route.getChecksum() / getRevision() and NamedRoute.getChecksum(), as default methods, @since 4.24.

  • JMX: the Checksum and Revision attributes of a managed route.

  • Developer consoles: checksum and revision per route in the route console. The CLI status file and the MCP camel_runtime_routes tool read that console as is, so they have them with no extra code. The route-structure and route-dump consoles have the checksum of each route.

  • Camel CLI: camel get route and camel top route have both in their JSON, and as columns with --checksum.

  • Camel CLI: camel cmd route-structure <file> gives the checksum of each route of a source file without running it, and it is the checksum the route has when it runs:

    • YAML and XML are loaded as a running app loads them;
    • a Java source read by the Java DSL parser gets the checksum when the parser read all of it.

    The JSON route dump (camel.main.dumpRoutes=json) has the checksum too.

  • The reload summary: Routes reloaded summary (total:3 started:3 changed:2), with (changed) or (new) on each route the reload changed.

  • MCP: the descriptions of camel_runtime_routes and camel_runtime_route_structure say how to use the checksum.

Cost: measured on 1000 routes with a choice, a split and a filter each: about 12 µs a route after warm-up, about 12 ms in all, so it is computed always.

Limits, documented in the routes page:

  • The checksum covers the route, not the code it calls: a Java lambda in .process(...) dumps as a bare process, and a change inside a bean is not seen.
  • A changed property value is configuration, not a changed route; nor is another object given to an Endpoint DSL option, which is a bean.
  • A route with a generated id should be matched by its checksum.

Tests

  • RouteChecksumTest (camel-core):
    • the same route gets the same checksum in two contexts; an edited endpoint or EIP option changes it;
    • generated ids, a route configuration's onException, placeholder values and debugging (with source locations) do not change it, while the route's own onException does;
    • the revision counts only real changes, and listeners of RouteAddedEvent see it;
    • a templated route created again keeps its checksum and revision 1; two literal passwords give the same checksum.
  • KameletRouteChecksumTest (camel-kamelet): Kamelet routes with and without an id of their own keep their checksums in a second run.
  • EndpointDslRouteChecksumTest (camel-endpointdsl): a new ExchangeFormatter instance keeps the checksum. LwModelToXMLDumperRawUriTest (camel-xml-io) covers removing the hash parameter, and the routeId of the route but not one of another value. Both patterns are compiled once.
  • RouteWatcherReloadChangedRoutesTest: the reload summary, its changed and new markers, and changed:0 when a file is saved again as it was.
  • RouteActionJavaSourceTest: a Java route read by camel cmd route-structure without compiling it has the checksum of the same route compiled and added to a CamelContext.
  • ManagedRouteChecksumTest, RouteChecksumDevConsoleTest, and a new case in CamelRouteStatusTest.
  • Test suites, after the review fixes: camel-core 8021, camel-management 574, camel-yaml-dsl 492, camel-xml-io 437, camel-console 259, camel-kamelet 141, camel-endpointdsl 69, all green. The PR has the test-dependents label.
  • Test suites, before the review fixes:
  • Checked live with the Camel CLI on this branch, with orders.camel.yaml:
    • read with camel cmd route-structure and running (camel get route --checksum), it gives the same checksum;
    • after an edit, the dev mode reload gives both the new checksum, and the route is at revision 2.

Next, in follow-ups:

  • the source editor view of CAMEL-25897, which waits for this, can say per route whether the editor has the version that runs;
  • camel validate can use a running integration's body types only for the routes whose checksum did not change.

Claude Code on behalf of davsclaus

🤖 Generated with Claude Code

@davsclaus davsclaus added this to the 4.24.0 milestone Oct 21, 2026
@github-actions

Copy link
Copy Markdown
Contributor

🌟 Thank you for your contribution to the Apache Camel project! 🌟
🤖 CI automation will test this PR automatically.

🐫 Apache Camel Committers, please review the following items:

  • First-time contributors require MANUAL approval for the GitHub Actions to run
  • You can use the command /component-test (camel-)component-name1 (camel-)component-name2.. to request a test from the test bot although they are normally detected and executed by CI.
  • You can label PRs using skip-tests and test-dependents to fine-tune the checks executed by this PR.
  • Build and test logs are available in the summary page. Only Apache Camel committers have access to the summary.

⚠️ Be careful when sharing logs. Review their contents before sharing them publicly.

@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

✅ Generated files are up to date

An earlier CI run reported uncommitted generated changes; the latest run no longer does.

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well-designed feature — the route checksum + revision concept is clean, the SPI is well-placed, and the test coverage is solid.

One minor grammar nit in the description strings.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

davsclaus and others added 4 commits October 21, 2026 10:55
… tell which routes changed between two runs or after a reload

Each route has a checksum of the route as written. It is a short hash of the
route's steps, options and expressions, with property placeholders as written.
It leaves out the ids Camel generates, the source locations, and the parts that
route configurations add to every route. The same route gives the same checksum
in every run.

A new SPI, ModelChecksumGenerator, computes it when the route is prepared,
before the route configurations are merged in. It is implemented in camel-xml-io
with the generated ModelWriter, so one implementation gives every application
the same checksum. Without camel-xml-io the checksum is null.

The revision counts, by route id, the times a route was added again with
another checksum in this run.

Where both show:
- Route, NamedRoute and the managed route (Checksum, Revision);
- the route console; the route-structure and route-dump consoles have the
  checksum;
- camel get route and camel top route, in their JSON and with --checksum;
- the reload summary, which says how many routes changed and marks each one
  (changed) or (new);
- the descriptions of the MCP tools, which say how to use the checksum.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>
…um of the routes of a source file

Routes read from a source file without running them have the checksum they
have when they run. A tool can compare the file with a running integration
(camel get route --checksum).

- The JSON route dump has the checksum of each route.
- The routes of a Java source read by the Java DSL parser get it when the
  parser read the whole source.
- camel cmd route-structure shows it under the source of each route.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>
…descriptions (address review)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>
@github-actions

github-actions Bot commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • catalog/camel-catalog
  • components/camel-kamelet
  • core/camel-api
  • core/camel-base-engine
  • core/camel-console
  • core/camel-core-engine
  • core/camel-core-model
  • core/camel-core
  • core/camel-management-api
  • core/camel-management
  • core/camel-support
  • core/camel-xml-io
  • docs
  • dsl/camel-endpointdsl
  • dsl/camel-jbang/camel-jbang-core
  • dsl/camel-jbang/camel-jbang-mcp

ℹ️ Dependent modules were not tested because the total number of affected modules exceeded the threshold (50). Use the test-dependents label to force testing all dependents.

🔁 7 tests passed only after a retry on JDK 25 (7 retried attempts)

Recovered flaky tests on JDK 25 (7)
Module Test Failed attempts First failure
core/camel-core SplitterParallelAsyncProcessorIssueTest.testSplitParallelProcessingMaxThreads 1 Should not use more than 4 threads, was: 5 ==> expected: <true> but was: <false>
core/camel-core MulticastParallelStreamingTest.testMulticastParallel 1 Caught exception on mock://result due to: expected: <BA> but was: <AB>
core/camel-core ThreadsRejectedExecutionTest.testThreadsRejectedAbortNoRedelivery 1 Expected 0 messages at mock:error but got 3 ==> expected: <0> but was: <3>
core/camel-core ThrottlingExceptionRoutePolicySuspendRouteTest.testSuspendedRouteStaysSuspendedWhenHalfOpen 1 Condition with Lambda expression in org.apache.camel.processor.throttle.ThrottlingExceptionRoutePolicySuspendRouteTest was not fulfilled within 10 seconds.
core/camel-core TotalRequestsThrottlerRateDecreaseTest.testDecreaseWhileExchangesWaitForPermits 1 Condition with Lambda expression in org.apache.camel.processor.throttle.requests.TotalRequestsThrottlerRateDecreaseTest was not fulfilled within 5 seconds.
core/camel-management ManagedAggregateControllerTest.testForceCompletionOfAll 1 expected: <0> but was: <1>
core/camel-management ManagedAggregateControllerTest.testForceCompletionOfGroup 1 expected: <0> but was: <1>

ℹ️ These tests did not fail the build. Surefire retried them and they passed.
Retries are enabled project-wide by surefire.rerunFailingTestsCount in parent/pom.xml.


🔬 Scalpel shadow comparison — Scalpel: 577 of 707 tested, 23 compile-only — current: 578 all tested

Maveniverse Scalpel detected 577 affected modules (current approach: 578).

Skip-tests mode would test 577 modules (16 direct + 565 downstream), skip tests for 23 (generated code, meta-modules)

Modules only in current approach (1)
  • camel-test-infra-core
Modules Scalpel would test (577)
  • archetypes ← downstream of org.apache.camel:camel-support
  • camel-a2a ← downstream of org.apache.camel:camel-core-model
  • camel-activemq ← downstream of org.apache.camel:camel-core-model
  • camel-activemq6 ← downstream of org.apache.camel:camel-core-model
  • camel-ai-observability ← downstream of org.apache.camel:camel-core-model
  • camel-ai-observability-api ← downstream of org.apache.camel:camel-core-model
  • camel-ai-parent ← downstream of org.apache.camel:camel-core-model
  • camel-ai-resource ← downstream of org.apache.camel:camel-core-model
  • camel-ai-tool ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-common ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-eventbridge ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-fc ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-kms ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-mns ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-oss ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-ots ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-parent ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-sls ← downstream of org.apache.camel:camel-core-model
  • camel-alibaba-sms ← downstream of org.apache.camel:camel-core-model
  • camel-amqp ← downstream of org.apache.camel:camel-core-model
  • camel-api ← core/camel-api/src/main/java/org/apache/camel/NamedRoute.java, core/camel-api/src/main/java/org/apache/camel/Route.java, core/camel-api/src/main/java/org/apache/camel/spi/ModelChecksumGenerator.java
  • camel-api-component-maven-plugin ← downstream of org.apache.camel:camel-test-junit6
  • camel-arangodb ← downstream of org.apache.camel:camel-core-model
  • camel-archetype-api-component ← downstream of org.apache.camel:camel-support
  • camel-archetype-component ← downstream of org.apache.camel:camel-support
  • camel-archetype-dataformat ← downstream of org.apache.camel:camel-support
  • camel-archetype-java ← downstream of org.apache.camel:camel-support
  • camel-archetype-main ← downstream of org.apache.camel:camel-support
  • camel-as2 ← downstream of org.apache.camel:camel-core-model
  • camel-as2-api ← downstream of org.apache.camel:camel-api
  • camel-as2-parent ← downstream of org.apache.camel:camel-core-model
  • camel-asn1 ← downstream of org.apache.camel:camel-core-model
  • camel-asterisk ← downstream of org.apache.camel:camel-core-model
  • camel-atmosphere-websocket ← downstream of org.apache.camel:camel-core-model
  • camel-atom ← downstream of org.apache.camel:camel-core-model
  • camel-attachments ← downstream of org.apache.camel:camel-core-model
  • camel-avro ← downstream of org.apache.camel:camel-core-model
  • camel-avro-rpc ← downstream of org.apache.camel:camel-core-model
  • camel-avro-rpc-jetty ← downstream of org.apache.camel:camel-api
  • camel-avro-rpc-parent ← downstream of org.apache.camel:camel-core-model
  • camel-avro-rpc-spi ← downstream of org.apache.camel:camel-core-model
  • camel-aws-bedrock ← downstream of org.apache.camel:camel-core-model
  • camel-aws-cloudtrail ← downstream of org.apache.camel:camel-core-model
  • camel-aws-common ← downstream of org.apache.camel:camel-core-model
  • camel-aws-config ← downstream of org.apache.camel:camel-core-model
  • camel-aws-parameter-store ← downstream of org.apache.camel:camel-core-model
  • camel-aws-parent ← downstream of org.apache.camel:camel-core-model
  • camel-aws-secrets-manager ← downstream of org.apache.camel:camel-core-model
  • camel-aws-security-hub ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-athena ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-comprehend ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-cw ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-ddb ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-ec2 ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-ecs ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-eks ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-eventbridge ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-iam ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-kinesis ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-kms ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-lambda ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-mq ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-msk ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-polly ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-redshift ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-rekognition ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-s3 ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-s3-vectors ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-ses ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-sns ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-sqs ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-step-functions ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-sts ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-textract ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-timestream ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-transcribe ← downstream of org.apache.camel:camel-core-model
  • camel-aws2-translate ← downstream of org.apache.camel:camel-core-model
  • camel-azure-common ← downstream of org.apache.camel:camel-core-model
  • camel-azure-cosmosdb ← downstream of org.apache.camel:camel-core-model
  • camel-azure-eventgrid ← downstream of org.apache.camel:camel-core-model
  • camel-azure-eventhubs ← downstream of org.apache.camel:camel-core-model
  • camel-azure-files ← downstream of org.apache.camel:camel-core-model
  • camel-azure-functions ← downstream of org.apache.camel:camel-core-model
  • camel-azure-key-vault ← downstream of org.apache.camel:camel-core-model
  • camel-azure-parent ← downstream of org.apache.camel:camel-core-model
  • camel-azure-schema-registry ← downstream of org.apache.camel:camel-core-model
  • camel-azure-servicebus ← downstream of org.apache.camel:camel-core-model
  • camel-azure-storage-blob ← downstream of org.apache.camel:camel-core-model
  • camel-azure-storage-datalake ← downstream of org.apache.camel:camel-core-model
  • camel-azure-storage-queue ← downstream of org.apache.camel:camel-core-model
  • camel-barcode ← downstream of org.apache.camel:camel-core-model
  • camel-base ← downstream of org.apache.camel:camel-api
  • camel-base-engine ← core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java, core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java, core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/RouteService.java
  • camel-base64 ← downstream of org.apache.camel:camel-core-model
  • camel-bean ← downstream of org.apache.camel:camel-core-model
  • camel-bean-validator ← downstream of org.apache.camel:camel-core-model
  • camel-beanio ← downstream of org.apache.camel:camel-core-model
  • camel-bindy ← downstream of org.apache.camel:camel-core-model
  • camel-bonita ← downstream of org.apache.camel:camel-core-model
  • camel-box ← downstream of org.apache.camel:camel-core-model
  • camel-box-api ← downstream of org.apache.camel:camel-api
  • camel-box-parent ← downstream of org.apache.camel:camel-core-model
  • camel-braintree ← downstream of org.apache.camel:camel-core-model
  • camel-browse ← downstream of org.apache.camel:camel-core-model
  • camel-caffeine ← downstream of org.apache.camel:camel-core-model
  • camel-camunda ← downstream of org.apache.camel:camel-core-model
  • camel-cassandraql ← downstream of org.apache.camel:camel-core-model
  • camel-catalog-common ← downstream of org.apache.camel:camel-support
  • camel-cbor ← downstream of org.apache.camel:camel-core-model
  • camel-chatscript ← downstream of org.apache.camel:camel-core-model
  • camel-chunk ← downstream of org.apache.camel:camel-core-model
  • camel-cli-connector ← downstream of org.apache.camel:camel-console
  • camel-cli-debug ← downstream of org.apache.camel:camel-cli-connector
  • camel-clickhouse ← downstream of org.apache.camel:camel-core-model
  • camel-clickup ← downstream of org.apache.camel:camel-core-model
  • camel-cloudevents ← downstream of org.apache.camel:camel-core-model
  • camel-cluster ← downstream of org.apache.camel:camel-api
  • camel-cm-sms ← downstream of org.apache.camel:camel-core-model
  • camel-coap ← downstream of org.apache.camel:camel-core-model
  • camel-cometd ← downstream of org.apache.camel:camel-core-model
  • camel-console ← core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-dump.json, core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route-structure.json, core/camel-console/src/generated/resources/META-INF/org/apache/camel/dev-console/route.json, core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDevConsole.java, core/camel-console/src/main/java/org/apache/camel/impl/console/RouteDumpDevConsole.java, core/camel-console/src/main/java/org/apache/camel/impl/console/RouteStructureDevConsole.java, core/camel-console/src/test/java/org/apache/camel/impl/console/RouteChecksumDevConsoleTest.java
  • camel-consul ← downstream of org.apache.camel:camel-core-model
  • camel-controlbus ← downstream of org.apache.camel:camel-core-model
  • camel-core ← core/camel-core/src/test/java/org/apache/camel/impl/RouteChecksumTest.java, core/camel-core/src/test/java/org/apache/camel/support/RouteWatcherReloadChangedRoutesTest.java
  • camel-core-all ← downstream of org.apache.camel:camel-api
  • camel-core-catalog ← downstream of org.apache.camel:camel-api
  • camel-core-engine ← core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultDumpRoutesStrategy.java
  • camel-core-languages ← downstream of org.apache.camel:camel-api
  • camel-core-model ← core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinition.java, core/camel-core-model/src/main/java/org/apache/camel/model/RouteDefinitionHelper.java
  • camel-core-processor ← downstream of org.apache.camel:camel-api
  • camel-core-reifier ← downstream of org.apache.camel:camel-api
  • camel-core-xml ← downstream of org.apache.camel:camel-core-engine
  • camel-couchbase ← downstream of org.apache.camel:camel-core-model
  • camel-couchdb ← downstream of org.apache.camel:camel-core-model
  • camel-cron ← downstream of org.apache.camel:camel-core-model
  • camel-crypto ← downstream of org.apache.camel:camel-core-model
  • camel-crypto-pgp ← downstream of org.apache.camel:camel-core-model
  • camel-csv ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-common ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-parent ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-rest ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-soap ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-spring-common ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-spring-rest ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-spring-soap ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-spring-transport ← downstream of org.apache.camel:camel-core-model
  • camel-cxf-transport ← downstream of org.apache.camel:camel-core-model
  • camel-cyberark-vault ← downstream of org.apache.camel:camel-core-model
  • camel-dapr ← downstream of org.apache.camel:camel-core-model
  • camel-dataformat ← downstream of org.apache.camel:camel-core-model
  • camel-dataset ← downstream of org.apache.camel:camel-core-model
  • camel-datasonnet ← downstream of org.apache.camel:camel-core-model
  • camel-dataweave ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-common ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-common-parent ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-db2 ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-maven-plugin ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-mongodb ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-mysql ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-oracle ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-parent ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-postgres ← downstream of org.apache.camel:camel-core-model
  • camel-debezium-sqlserver ← downstream of org.apache.camel:camel-core-model
  • camel-debug ← downstream of org.apache.camel:camel-core-model
  • camel-dfdl ← downstream of org.apache.camel:camel-core-model
  • camel-dhis2 ← downstream of org.apache.camel:camel-core-model
  • camel-dhis2-api ← downstream of org.apache.camel:camel-core-model
  • camel-dhis2-parent ← downstream of org.apache.camel:camel-core-model
  • camel-diagram ← downstream of org.apache.camel:camel-console
  • camel-direct ← downstream of org.apache.camel:camel-core-model
  • camel-disruptor ← downstream of org.apache.camel:camel-core-model
  • camel-djl ← downstream of org.apache.camel:camel-core-model
  • camel-dns ← downstream of org.apache.camel:camel-core-model
  • camel-docker ← downstream of org.apache.camel:camel-core-model
  • camel-docling ← downstream of org.apache.camel:camel-core-model
  • camel-drill ← downstream of org.apache.camel:camel-core-model
  • camel-dropbox ← downstream of org.apache.camel:camel-core-model
  • camel-dsl-modeline ← downstream of org.apache.camel:camel-support
  • camel-dsl-support ← downstream of org.apache.camel:camel-core-model
  • camel-duckdb ← downstream of org.apache.camel:camel-core-model
  • camel-dynamic-router ← downstream of org.apache.camel:camel-core-model
  • camel-ehcache ← downstream of org.apache.camel:camel-core-model
  • camel-elasticsearch ← downstream of org.apache.camel:camel-core-model
  • camel-elasticsearch-rest-client ← downstream of org.apache.camel:camel-core-model
  • camel-event ← downstream of org.apache.camel:camel-core-model
  • camel-exec ← downstream of org.apache.camel:camel-core-model
  • camel-fastjson ← downstream of org.apache.camel:camel-core-model
  • camel-fhir ← downstream of org.apache.camel:camel-core-model
  • camel-fhir-api ← downstream of org.apache.camel:camel-core-model
  • camel-fhir-parent ← downstream of org.apache.camel:camel-core-model
  • camel-file ← downstream of org.apache.camel:camel-core-engine
  • camel-file-watch ← downstream of org.apache.camel:camel-core-model
  • camel-flatpack ← downstream of org.apache.camel:camel-core-engine
  • camel-flink ← downstream of org.apache.camel:camel-core-model
  • camel-flowable ← downstream of org.apache.camel:camel-core-model
  • camel-fop ← downstream of org.apache.camel:camel-core-model
  • camel-fory ← downstream of org.apache.camel:camel-core-model
  • camel-freemarker ← downstream of org.apache.camel:camel-core-model
  • camel-ftp ← downstream of org.apache.camel:camel-core-model
  • camel-ftp-common ← downstream of org.apache.camel:camel-core-model
  • camel-geocoder ← downstream of org.apache.camel:camel-core-model
  • camel-git ← downstream of org.apache.camel:camel-core-model
  • camel-github2 ← downstream of org.apache.camel:camel-core-model
  • camel-google-bigquery ← downstream of org.apache.camel:camel-core-model
  • camel-google-calendar ← downstream of org.apache.camel:camel-core-model
  • camel-google-common ← downstream of org.apache.camel:camel-core-model
  • camel-google-drive ← downstream of org.apache.camel:camel-core-model
  • camel-google-firestore ← downstream of org.apache.camel:camel-core-model
  • camel-google-functions ← downstream of org.apache.camel:camel-core-model
  • camel-google-mail ← downstream of org.apache.camel:camel-core-model
  • camel-google-parent ← downstream of org.apache.camel:camel-core-model
  • camel-google-pubsub ← downstream of org.apache.camel:camel-core-model
  • camel-google-secret-manager ← downstream of org.apache.camel:camel-core-model
  • camel-google-sheets ← downstream of org.apache.camel:camel-core-model
  • camel-google-speech-to-text ← downstream of org.apache.camel:camel-core-model
  • camel-google-storage ← downstream of org.apache.camel:camel-core-model
  • camel-google-text-to-speech ← downstream of org.apache.camel:camel-core-model
  • camel-google-vertexai ← downstream of org.apache.camel:camel-core-model
  • camel-google-vision ← downstream of org.apache.camel:camel-core-model
  • camel-graphql ← downstream of org.apache.camel:camel-core-model
  • camel-grok ← downstream of org.apache.camel:camel-core-model
  • camel-groovy ← downstream of org.apache.camel:camel-core-model
  • camel-grpc ← downstream of org.apache.camel:camel-core-model
  • camel-gson ← downstream of org.apache.camel:camel-core-model
  • camel-hashicorp-vault ← downstream of org.apache.camel:camel-core-model
  • camel-hazelcast ← downstream of org.apache.camel:camel-core-model
  • camel-health ← downstream of org.apache.camel:camel-api
  • camel-hivemq ← downstream of org.apache.camel:camel-core-model
  • camel-hl7 ← downstream of org.apache.camel:camel-core-engine
  • camel-http ← downstream of org.apache.camel:camel-core-model
  • camel-http-base ← downstream of org.apache.camel:camel-core-model
  • camel-http-common ← downstream of org.apache.camel:camel-core-model
  • camel-huawei-parent ← downstream of org.apache.camel:camel-core-model
  • camel-huaweicloud-common ← downstream of org.apache.camel:camel-core-model
  • camel-huaweicloud-dms ← downstream of org.apache.camel:camel-core-model
  • camel-huaweicloud-frs ← downstream of org.apache.camel:camel-core-model
  • camel-huaweicloud-functiongraph ← downstream of org.apache.camel:camel-core-model
  • camel-huaweicloud-iam ← downstream of org.apache.camel:camel-core-model
  • camel-huaweicloud-imagerecognition ← downstream of org.apache.camel:camel-core-model
  • camel-huaweicloud-obs ← downstream of org.apache.camel:camel-core-model
  • camel-huaweicloud-smn ← downstream of org.apache.camel:camel-core-model
  • camel-huggingface ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-cos ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-parent ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-secrets-manager ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-watson-discovery ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-watson-language ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-watson-speech-to-text ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-watson-text-to-speech ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-watsonx-ai ← downstream of org.apache.camel:camel-core-model
  • camel-ibm-watsonx-data ← downstream of org.apache.camel:camel-core-model
  • camel-ical ← downstream of org.apache.camel:camel-core-model
  • camel-iggy ← downstream of org.apache.camel:camel-core-model
  • camel-ignite ← downstream of org.apache.camel:camel-core-model
  • camel-infinispan ← downstream of org.apache.camel:camel-core-model
  • camel-infinispan-common ← downstream of org.apache.camel:camel-core-model
  • camel-infinispan-embedded ← downstream of org.apache.camel:camel-core-model
  • camel-infinispan-parent ← downstream of org.apache.camel:camel-core-model
  • camel-influxdb ← downstream of org.apache.camel:camel-core-model
  • camel-influxdb2 ← downstream of org.apache.camel:camel-core-model
  • camel-iso8583 ← downstream of org.apache.camel:camel-core-model
  • camel-jackson ← downstream of org.apache.camel:camel-core-engine
  • camel-jackson-avro ← downstream of org.apache.camel:camel-core-model
  • camel-jackson-protobuf ← downstream of org.apache.camel:camel-core-model
  • camel-jackson3 ← downstream of org.apache.camel:camel-core-engine
  • camel-jackson3-avro ← downstream of org.apache.camel:camel-core-model
  • camel-jackson3-protobuf ← downstream of org.apache.camel:camel-core-model
  • camel-jackson3xml ← downstream of org.apache.camel:camel-core-model
  • camel-jacksonxml ← downstream of org.apache.camel:camel-core-model
  • camel-jactl ← downstream of org.apache.camel:camel-core-model
  • camel-jandex ← downstream of org.apache.camel:camel-core-model
  • camel-jasypt ← downstream of org.apache.camel:camel-core-model
  • camel-java-io ← downstream of org.apache.camel:camel-core-engine
  • camel-java-joor-dsl ← downstream of org.apache.camel:camel-core-languages
  • camel-javascript ← downstream of org.apache.camel:camel-core-model
  • camel-jaxb ← downstream of org.apache.camel:camel-core-model
  • camel-jbang-console ← downstream of org.apache.camel:camel-console
  • camel-jbang-mcp ← dsl/camel-jbang/camel-jbang-mcp/src/main/java/org/apache/camel/dsl/jbang/core/commands/mcp/RuntimeTools.java
  • camel-jbang-plugin-mcp ← downstream of org.apache.camel:camel-jbang-core
  • camel-jbang-plugin-tui ← downstream of org.apache.camel:camel-catalog
  • camel-jbang-plugin-validate ← downstream of org.apache.camel:camel-jbang-core
  • camel-jcache ← downstream of org.apache.camel:camel-core-model
  • camel-jcr ← downstream of org.apache.camel:camel-core-model
  • camel-jdbc ← downstream of org.apache.camel:camel-core-model
  • camel-jetty ← downstream of org.apache.camel:camel-core-model
  • camel-jetty-common ← downstream of org.apache.camel:camel-core-model
  • camel-jfr ← downstream of org.apache.camel:camel-core-model
  • camel-jgroups ← downstream of org.apache.camel:camel-core-model
  • camel-jgroups-raft ← downstream of org.apache.camel:camel-core-model
  • camel-jira ← downstream of org.apache.camel:camel-core-model
  • camel-jms ← downstream of org.apache.camel:camel-core-model
  • camel-jmx ← downstream of org.apache.camel:camel-core-model
  • camel-jolt ← downstream of org.apache.camel:camel-core-model
  • camel-jooq ← downstream of org.apache.camel:camel-core-model
  • camel-joor ← downstream of org.apache.camel:camel-core-model
  • camel-jpa ← downstream of org.apache.camel:camel-core-model
  • camel-jq ← downstream of org.apache.camel:camel-core-model
  • camel-jsch ← downstream of org.apache.camel:camel-core-model
  • camel-jslt ← downstream of org.apache.camel:camel-core-model
  • camel-json-validator ← downstream of org.apache.camel:camel-core-model
  • camel-jsonapi ← downstream of org.apache.camel:camel-core-model
  • camel-jsonata ← downstream of org.apache.camel:camel-core-model
  • camel-jsonb ← downstream of org.apache.camel:camel-core-model
  • camel-jsonpath ← downstream of org.apache.camel:camel-core-model
  • camel-jsoup ← downstream of org.apache.camel:camel-core-model
  • camel-jt400 ← downstream of org.apache.camel:camel-core-model
  • camel-jta ← downstream of org.apache.camel:camel-core-engine
  • camel-jte ← downstream of org.apache.camel:camel-core-model
  • camel-kafka ← downstream of org.apache.camel:camel-core-model
  • camel-kafka-common ← downstream of org.apache.camel:camel-core-model
  • camel-kafka-share ← downstream of org.apache.camel:camel-core-model
  • camel-kamelet ← components/camel-kamelet/src/test/java/org/apache/camel/component/kamelet/KameletRouteChecksumTest.java
  • camel-kamelet-main-support ← downstream of org.apache.camel:camel-main
  • camel-keycloak ← downstream of org.apache.camel:camel-core-model
  • camel-knative ← downstream of org.apache.camel:camel-core-model
  • camel-knative-api ← downstream of org.apache.camel:camel-core-model
  • camel-knative-http ← downstream of org.apache.camel:camel-core-model
  • camel-knative-parent ← downstream of org.apache.camel:camel-core-model
  • camel-kserve ← downstream of org.apache.camel:camel-core-model
  • camel-kubernetes ← downstream of org.apache.camel:camel-core-model
  • camel-kudu ← downstream of org.apache.camel:camel-core-model
  • camel-langchain4j-agent ← downstream of org.apache.camel:camel-core-model
  • camel-langchain4j-agent-api ← downstream of org.apache.camel:camel-api
  • camel-langchain4j-chat ← downstream of org.apache.camel:camel-core-model
  • camel-langchain4j-core ← downstream of org.apache.camel:camel-core-model
  • camel-langchain4j-embeddings ← downstream of org.apache.camel:camel-core-model
  • camel-langchain4j-embeddingstore ← downstream of org.apache.camel:camel-core-model
  • camel-langchain4j-embeddingstore-api ← downstream of org.apache.camel:camel-api
  • camel-langchain4j-ingest ← downstream of org.apache.camel:camel-core-model
  • camel-langchain4j-tokenizer ← downstream of org.apache.camel:camel-core-model
  • camel-langchain4j-web-search ← downstream of org.apache.camel:camel-core-model
  • camel-language ← downstream of org.apache.camel:camel-core-model
  • camel-launcher-container ← downstream of org.apache.camel:camel-launcher
  • camel-ldap ← downstream of org.apache.camel:camel-core-model
  • camel-ldif ← downstream of org.apache.camel:camel-core-model
  • camel-log ← downstream of org.apache.camel:camel-core-model
  • camel-lra ← downstream of org.apache.camel:camel-core-engine
  • camel-lucene ← downstream of org.apache.camel:camel-core-model
  • camel-lumberjack ← downstream of org.apache.camel:camel-core-model
  • camel-lzf ← downstream of org.apache.camel:camel-core-model
  • camel-mail ← downstream of org.apache.camel:camel-core-model
  • camel-mail-microsoft-oauth ← downstream of org.apache.camel:camel-core-model
  • camel-main ← downstream of org.apache.camel:camel-api
  • camel-management ← core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java, core/camel-management/src/test/java/org/apache/camel/management/ManagedRouteChecksumTest.java
  • camel-management-api ← core/camel-management-api/src/main/java/org/apache/camel/api/management/mbean/ManagedRouteMBean.java
  • camel-mapstruct ← downstream of org.apache.camel:camel-core-model
  • camel-master ← downstream of org.apache.camel:camel-core-model
  • camel-maven-plugin ← downstream of org.apache.camel:camel-spring-main
  • camel-mcp-server ← downstream of org.apache.camel:camel-core-model
  • camel-mcp-server-api ← downstream of org.apache.camel:camel-core-model
  • camel-mdc ← downstream of org.apache.camel:camel-core-model
  • camel-metrics ← downstream of org.apache.camel:camel-core-model
  • camel-micrometer ← downstream of org.apache.camel:camel-core-model
  • camel-micrometer-observability ← downstream of org.apache.camel:camel-core-model
  • camel-micrometer-prometheus ← downstream of org.apache.camel:camel-core-model
  • camel-microprofile-config ← downstream of org.apache.camel:camel-core-model
  • camel-microprofile-fault-tolerance ← downstream of org.apache.camel:camel-core-model
  • camel-microprofile-health ← downstream of org.apache.camel:camel-core-model
  • camel-microprofile-parent ← downstream of org.apache.camel:camel-core-model
  • camel-milo ← downstream of org.apache.camel:camel-core-model
  • camel-milvus ← downstream of org.apache.camel:camel-core-model
  • camel-mina ← downstream of org.apache.camel:camel-core-model
  • camel-mina-sftp ← downstream of org.apache.camel:camel-core-model
  • camel-minio ← downstream of org.apache.camel:camel-core-model
  • camel-mllp ← downstream of org.apache.camel:camel-core-model
  • camel-mock ← downstream of org.apache.camel:camel-core-model
  • camel-mongodb ← downstream of org.apache.camel:camel-core-model
  • camel-mongodb-gridfs ← downstream of org.apache.camel:camel-core-model
  • camel-mustache ← downstream of org.apache.camel:camel-core-model
  • camel-mvel ← downstream of org.apache.camel:camel-core-model
  • camel-mybatis ← downstream of org.apache.camel:camel-core-model
  • camel-nats ← downstream of org.apache.camel:camel-core-model
  • camel-neo4j ← downstream of org.apache.camel:camel-core-model
  • camel-netty ← downstream of org.apache.camel:camel-core-model
  • camel-netty-http ← downstream of org.apache.camel:camel-core-model
  • camel-oaipmh ← downstream of org.apache.camel:camel-core-model
  • camel-oauth ← downstream of org.apache.camel:camel-core-model
  • camel-observability-services ← downstream of org.apache.camel:camel-core-model
  • camel-observation ← downstream of org.apache.camel:camel-core-model
  • camel-ocsf ← downstream of org.apache.camel:camel-core-model
  • camel-odata ← downstream of org.apache.camel:camel-core-model
  • camel-ognl ← downstream of org.apache.camel:camel-core-model
  • camel-olingo2 ← downstream of org.apache.camel:camel-core-model
  • camel-olingo2-api ← downstream of org.apache.camel:camel-core-model
  • camel-olingo2-parent ← downstream of org.apache.camel:camel-core-model
  • camel-olingo4 ← downstream of org.apache.camel:camel-core-model
  • camel-olingo4-api ← downstream of org.apache.camel:camel-core-model
  • camel-olingo4-parent ← downstream of org.apache.camel:camel-core-model
  • camel-once ← downstream of org.apache.camel:camel-core-model
  • camel-opa ← downstream of org.apache.camel:camel-core-model
  • camel-openai ← downstream of org.apache.camel:camel-core-model
  • camel-openapi-java ← downstream of org.apache.camel:camel-core-engine
  • camel-openapi-rest-dsl-generator ← downstream of org.apache.camel:camel-api
  • camel-openapi-validator ← downstream of org.apache.camel:camel-core-model
  • camel-openfeature ← downstream of org.apache.camel:camel-core-model
  • camel-openfga ← downstream of org.apache.camel:camel-core-model
  • camel-opensearch ← downstream of org.apache.camel:camel-core-model
  • camel-openstack ← downstream of org.apache.camel:camel-core-model
  • camel-opentelemetry ← downstream of org.apache.camel:camel-core-model
  • camel-opentelemetry-metrics ← downstream of org.apache.camel:camel-core-model
  • camel-opentelemetry2 ← downstream of org.apache.camel:camel-core-model
  • camel-optaplanner ← downstream of org.apache.camel:camel-core-model
  • camel-paho ← downstream of org.apache.camel:camel-core-model
  • camel-paho-mqtt5 ← downstream of org.apache.camel:camel-core-model
  • camel-parquet-avro ← downstream of org.apache.camel:camel-core-model
  • camel-pdf ← downstream of org.apache.camel:camel-core-model
  • camel-pg-replication-slot ← downstream of org.apache.camel:camel-core-model
  • camel-pgevent ← downstream of org.apache.camel:camel-core-model
  • camel-pgvector ← downstream of org.apache.camel:camel-core-model
  • camel-pinecone ← downstream of org.apache.camel:camel-core-model
  • camel-platform-http ← downstream of org.apache.camel:camel-core-model
  • camel-platform-http-jolokia ← downstream of org.apache.camel:camel-core-model
  • camel-platform-http-main ← downstream of org.apache.camel:camel-console
  • camel-platform-http-vertx ← downstream of org.apache.camel:camel-core-model
  • camel-plc4x ← downstream of org.apache.camel:camel-core-model
  • camel-pqc ← downstream of org.apache.camel:camel-core-model
  • camel-printer ← downstream of org.apache.camel:camel-core-model
  • camel-protobuf ← downstream of org.apache.camel:camel-core-model
  • camel-pubnub ← downstream of org.apache.camel:camel-core-model
  • camel-pulsar ← downstream of org.apache.camel:camel-core-model
  • camel-python ← downstream of org.apache.camel:camel-core-model
  • camel-python3 ← downstream of org.apache.camel:camel-core-model
  • camel-qdrant ← downstream of org.apache.camel:camel-core-model
  • camel-quartz ← downstream of org.apache.camel:camel-core-model
  • camel-quickfix ← downstream of org.apache.camel:camel-core-model
  • camel-quickjs ← downstream of org.apache.camel:camel-core-model
  • camel-reactive-streams ← downstream of org.apache.camel:camel-core-engine
  • camel-reactor ← downstream of org.apache.camel:camel-core-model
  • camel-redis ← downstream of org.apache.camel:camel-core-model
  • camel-ref ← downstream of org.apache.camel:camel-core-model
  • camel-resilience4j ← downstream of org.apache.camel:camel-core-model
  • camel-resilience4j-micrometer ← downstream of org.apache.camel:camel-core-model
  • camel-resourceresolver-github ← downstream of org.apache.camel:camel-core-model
  • camel-rest ← downstream of org.apache.camel:camel-core-engine
  • camel-rest-openapi ← downstream of org.apache.camel:camel-core-model
  • camel-rest-postman ← downstream of org.apache.camel:camel-core-model
  • camel-restdsl-openapi-plugin ← downstream of org.apache.camel:camel-core-engine
  • camel-robotframework ← downstream of org.apache.camel:camel-core-model
  • camel-rocketmq ← downstream of org.apache.camel:camel-core-model
  • camel-rss ← downstream of org.apache.camel:camel-core-model
  • camel-rxjava ← downstream of org.apache.camel:camel-core-model
  • camel-saga ← downstream of org.apache.camel:camel-core-model
  • camel-salesforce ← downstream of org.apache.camel:camel-core-engine
  • camel-salesforce-codegen ← downstream of org.apache.camel:camel-core-model
  • camel-salesforce-maven-plugin ← downstream of org.apache.camel:camel-core-model
  • camel-salesforce-parent ← downstream of org.apache.camel:camel-core-model
  • camel-sap-netweaver ← downstream of org.apache.camel:camel-core-model
  • camel-saxon ← downstream of org.apache.camel:camel-core-model
  • camel-scheduler ← downstream of org.apache.camel:camel-core-model
  • camel-schematron ← downstream of org.apache.camel:camel-core-model
  • camel-seda ← downstream of org.apache.camel:camel-core-model
  • camel-semantic ← downstream of org.apache.camel:camel-core-model
  • camel-semantic-openai ← downstream of org.apache.camel:camel-core-model
  • camel-semantic-typesafe-ai ← downstream of org.apache.camel:camel-core-model
  • camel-semantic-wolf-defender ← downstream of org.apache.camel:camel-core-model
  • camel-servicenow ← downstream of org.apache.camel:camel-core-model
  • camel-servicenow-maven-plugin ← downstream of org.apache.camel:camel-core-engine
  • camel-servicenow-parent ← downstream of org.apache.camel:camel-core-model
  • camel-servlet ← downstream of org.apache.camel:camel-core-model
  • camel-shell ← downstream of org.apache.camel:camel-core-model
  • camel-shiro ← downstream of org.apache.camel:camel-core-model
  • camel-sjms ← downstream of org.apache.camel:camel-core-model
  • camel-sjms2 ← downstream of org.apache.camel:camel-core-model
  • camel-slack ← downstream of org.apache.camel:camel-core-model
  • camel-smb ← downstream of org.apache.camel:camel-core-model
  • camel-smooks ← downstream of org.apache.camel:camel-core-model
  • camel-smpp ← downstream of org.apache.camel:camel-core-model
  • camel-snakeyaml ← downstream of org.apache.camel:camel-core-model
  • camel-snmp ← downstream of org.apache.camel:camel-core-model
  • camel-soap ← downstream of org.apache.camel:camel-core-model
  • camel-solr ← downstream of org.apache.camel:camel-core-model
  • camel-spiffe ← downstream of org.apache.camel:camel-core-model
  • camel-splunk-hec ← downstream of org.apache.camel:camel-core-model
  • camel-spring ← downstream of org.apache.camel:camel-core-engine
  • camel-spring-ai-chat ← downstream of org.apache.camel:camel-core-model
  • camel-spring-ai-embeddings ← downstream of org.apache.camel:camel-core-model
  • camel-spring-ai-image ← downstream of org.apache.camel:camel-core-model
  • camel-spring-ai-parent ← downstream of org.apache.camel:camel-core-model
  • camel-spring-ai-vector-store ← downstream of org.apache.camel:camel-core-model
  • camel-spring-batch ← downstream of org.apache.camel:camel-core-model
  • camel-spring-cloud-config ← downstream of org.apache.camel:camel-core-model
  • camel-spring-jdbc ← downstream of org.apache.camel:camel-core-model
  • camel-spring-ldap ← downstream of org.apache.camel:camel-core-model
  • camel-spring-main ← downstream of org.apache.camel:camel-core-model
  • camel-spring-parent ← downstream of org.apache.camel:camel-core-model
  • camel-spring-rabbitmq ← downstream of org.apache.camel:camel-core-model
  • camel-spring-redis ← downstream of org.apache.camel:camel-core-model
  • camel-spring-security ← downstream of org.apache.camel:camel-core-engine
  • camel-spring-ws ← downstream of org.apache.camel:camel-core-model
  • camel-spring-xml ← downstream of org.apache.camel:camel-core-model
  • camel-sql ← downstream of org.apache.camel:camel-core-model
  • camel-ssh ← downstream of org.apache.camel:camel-core-model
  • camel-state-store ← downstream of org.apache.camel:camel-core-model
  • camel-state-store-parent ← downstream of org.apache.camel:camel-core-model
  • camel-stax ← downstream of org.apache.camel:camel-core-model
  • camel-stitch ← downstream of org.apache.camel:camel-core-model
  • camel-stream ← downstream of org.apache.camel:camel-core-model
  • camel-streamcaching-test ← downstream of org.apache.camel:camel-test-junit6
  • camel-stringtemplate ← downstream of org.apache.camel:camel-core-model
  • camel-stripe ← downstream of org.apache.camel:camel-core-model
  • camel-stub ← downstream of org.apache.camel:camel-core-model
  • camel-support ← core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java
  • camel-swift ← downstream of org.apache.camel:camel-core-model
  • camel-syslog ← downstream of org.apache.camel:camel-core-model
  • camel-tahu ← downstream of org.apache.camel:camel-api
  • camel-tarfile ← downstream of org.apache.camel:camel-core-model
  • camel-telegram ← downstream of org.apache.camel:camel-core-model
  • camel-telemetry ← downstream of org.apache.camel:camel-core-model
  • camel-telemetry-dev ← downstream of org.apache.camel:camel-core-model
  • camel-tensorflow-serving ← downstream of org.apache.camel:camel-core-model
  • camel-test-citrus ← downstream of org.apache.camel:camel-core-model
  • camel-test-dst ← downstream of org.apache.camel:camel-core-engine
  • camel-test-infra-all ← downstream of org.apache.camel:camel-test-infra-artemis
  • camel-test-infra-artemis ← downstream of org.apache.camel:camel-test-junit6
  • camel-test-infra-cli ← downstream of org.apache.camel:camel-support
  • camel-test-infra-smb ← downstream of org.apache.camel:camel-test-junit6
  • camel-test-junit5 ← downstream of org.apache.camel:camel-core-engine
  • camel-test-junit6 ← downstream of org.apache.camel:camel-core-engine
  • camel-test-main-junit5 ← downstream of org.apache.camel:camel-core-model
  • camel-test-main-junit6 ← downstream of org.apache.camel:camel-core-model
  • camel-test-parent ← downstream of org.apache.camel:camel-core-model
  • camel-test-spring-junit5 ← downstream of org.apache.camel:camel-core-model
  • camel-test-spring-junit6 ← downstream of org.apache.camel:camel-core-model
  • camel-thrift ← downstream of org.apache.camel:camel-core-model
  • camel-thymeleaf ← downstream of org.apache.camel:camel-core-model
  • camel-tika ← downstream of org.apache.camel:camel-core-model
  • camel-timer ← downstream of org.apache.camel:camel-core-model
  • camel-tooling-maven ← downstream of org.apache.camel:camel-support
  • camel-toon ← downstream of org.apache.camel:camel-core-model
  • camel-tracing ← downstream of org.apache.camel:camel-core-model
  • camel-twilio ← downstream of org.apache.camel:camel-core-model
  • camel-twitter ← downstream of org.apache.camel:camel-core-model
  • camel-typesafe-ai ← downstream of org.apache.camel:camel-core-model
  • camel-ubl ← downstream of org.apache.camel:camel-core-model
  • camel-undertow ← downstream of org.apache.camel:camel-core-model
  • camel-undertow-spring-security ← downstream of org.apache.camel:camel-core-model
  • camel-univocity-parsers ← downstream of org.apache.camel:camel-core-model
  • camel-validator ← downstream of org.apache.camel:camel-core-model
  • camel-velocity ← downstream of org.apache.camel:camel-core-model
  • camel-vertx ← downstream of org.apache.camel:camel-core-model
  • camel-vertx-common ← downstream of org.apache.camel:camel-core-model
  • camel-vertx-http ← downstream of org.apache.camel:camel-core-model
  • camel-vertx-parent ← downstream of org.apache.camel:camel-core-model
  • camel-vertx-websocket ← downstream of org.apache.camel:camel-core-model
  • camel-wal ← downstream of org.apache.camel:camel-core-model
  • camel-wasm ← downstream of org.apache.camel:camel-core-model
  • camel-weather ← downstream of org.apache.camel:camel-core-model
  • camel-weaviate ← downstream of org.apache.camel:camel-core-model
  • camel-web3j ← downstream of org.apache.camel:camel-core-model
  • camel-webhook ← downstream of org.apache.camel:camel-core-model
  • camel-whatsapp ← downstream of org.apache.camel:camel-core-model
  • camel-wordpress ← downstream of org.apache.camel:camel-core-model
  • camel-workday ← downstream of org.apache.camel:camel-core-model
  • camel-xchange ← downstream of org.apache.camel:camel-core-model
  • camel-xj ← downstream of org.apache.camel:camel-core-model
  • camel-xml-io ← core/camel-xml-io/src/generated/resources/META-INF/services/org/apache/camel/model-checksum-generator, core/camel-xml-io/src/main/java/org/apache/camel/xml/LwModelChecksumGenerator.java, core/camel-xml-io/src/main/java/org/apache/camel/xml/LwModelToXMLDumper.java, core/camel-xml-io/src/test/java/org/apache/camel/xml/LwModelToXMLDumperRawUriTest.java
  • camel-xml-io-dsl ← downstream of org.apache.camel:camel-core-engine
  • camel-xml-jaxb ← downstream of org.apache.camel:camel-api
  • camel-xml-jaxb-dsl ← downstream of org.apache.camel:camel-core-languages
  • camel-xml-jaxb-dsl-test-definition ← downstream of org.apache.camel:camel-core-model
  • camel-xml-jaxb-dsl-test-spring ← downstream of org.apache.camel:camel-management
  • camel-xml-jaxp ← downstream of org.apache.camel:camel-api
  • camel-xmlsecurity ← downstream of org.apache.camel:camel-core-model
  • camel-xmpp ← downstream of org.apache.camel:camel-core-model
  • camel-xpath ← downstream of org.apache.camel:camel-core-model
  • camel-xslt ← downstream of org.apache.camel:camel-core-model
  • camel-xslt-saxon ← downstream of org.apache.camel:camel-core-model
  • camel-yaml-dsl-common ← downstream of org.apache.camel:camel-core-engine
  • camel-yaml-dsl-validator ← downstream of org.apache.camel:camel-catalog
  • camel-yaml-dsl-validator-maven-plugin ← downstream of org.apache.camel:camel-yaml-dsl-validator
  • camel-yaml-io ← downstream of org.apache.camel:camel-api
  • camel-zendesk ← downstream of org.apache.camel:camel-core-model
  • camel-zip-deflater ← downstream of org.apache.camel:camel-core-model
  • camel-zipfile ← downstream of org.apache.camel:camel-core-model
  • camel-zookeeper ← downstream of org.apache.camel:camel-core-model
  • camel-zookeeper-master ← downstream of org.apache.camel:camel-core-model
  • components ← downstream of org.apache.camel:camel-core-model
Modules with tests skipped (23)
  • apache-camel
  • camel-allcomponents
  • camel-catalog-console
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-componentdsl
  • camel-endpointdsl-support
  • camel-itest
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-test
  • camel-kamelet-main
  • camel-launcher
  • camel-report-maven-plugin
  • camel-route-parser
  • camel-yaml-dsl
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • coverage
  • dummy-component

ℹ️ Shadow mode — Scalpel observes but does not affect test execution. Learn more

⚠️ Some tests are disabled on GitHub Actions (@DisabledIfSystemProperty(named = "ci.env.name")) and require manual verification:

  • dsl/camel-jbang/camel-jbang-core: 2 test(s) disabled on GitHub Actions
  • dsl/camel-jbang/camel-jbang-mcp: 2 test(s) disabled on GitHub Actions
  • core/camel-core: 4 test(s) disabled on GitHub Actions

💡 Manual integration tests recommended:

You modified dsl/camel-jbang/camel-jbang-core. The related integration tests in dsl/camel-jbang/camel-jbang-it are excluded from CI. Consider running them manually:

mvn verify -f dsl/camel-jbang/camel-jbang-it -Djbang-it-test
Build reactor — dependencies compiled but only changed modules were tested (16 modules, 2m 53s total)

Total reactor time: 2m 53s

Module Duration Status
Camel :: Management 56.8s SUCCESS
Camel :: Console 21.9s SUCCESS
Camel :: Kamelet 21.7s SUCCESS
Camel :: Catalog :: Camel Catalog 15.6s SUCCESS
Camel :: JBang :: MCP 15.2s SUCCESS
Camel :: Docs 11.6s SUCCESS
Camel :: XML IO 7.8s SUCCESS
Camel :: API 6.9s SUCCESS
Camel :: Support 6.5s SUCCESS
Camel :: Core Model 5.0s SUCCESS
Camel :: Base Engine 2.0s SUCCESS
Camel :: Core Engine 0.9s SUCCESS
Camel :: Management API 0.8s SUCCESS
Camel :: Core n/a
Camel :: Endpoint DSL n/a
Camel :: JBang :: Core n/a

Top 20 slowest modules:

  • Camel :: Management (56.8s)
  • Camel :: Console (21.9s)
  • Camel :: Kamelet (21.7s)
  • Camel :: Catalog :: Camel Catalog (15.6s)
  • Camel :: JBang :: MCP (15.2s)
  • Camel :: Docs (11.6s)
  • Camel :: XML IO (7.8s)
  • Camel :: API (6.9s)
  • Camel :: Support (6.5s)
  • Camel :: Core Model (5.0s)
  • Camel :: Base Engine (2.0s)
  • Camel :: Core Engine (0.9s)
  • Camel :: Management API (0.8s)

⚙️ View full build and test results

oscerd
oscerd previously requested changes Oct 21, 2026

@oscerd oscerd left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

TL;DR

The design is good: one generator in camel-xml-io, placeholders hashed as written, computed once when the route is prepared, and the revision kept under routesLock. But a route created from a route template or a Kamelet includes a node prefix in its checksum that Camel generates from a JVM-wide counter, so its checksum changes every time the route is created again. Could we fix that before merge?

Blockers

  • RouteDefinitionHelper.java:427 / LwModelChecksumGenerator.java:54: the generated nodePrefixId of templated and Kamelet routes is part of the checksum (see 1).

Other findings: 6 (2 non-blocking, 4 suggestions)

1. Templated and Kamelet routes (blocking)

RouteTemplateDefinition.asRouteDefinition() sets nodePrefixId to <prefix>-<COUNTER.incrementAndGet()> (RouteTemplateDefinition.java:446, with a static COUNTER at :53). Kamelet.templateToRoute sets it to a SimpleUuidGenerator counter (Kamelet.java:463, :72). DefaultModel.java:651 builds that copy, :713 prepares it, and ModelWriter.java:1643 writes nodePrefixId. A reload re-creates templated routes (DefaultRoutesLoader.java:325 → RouteBuilder.java:847), so a templatedRoute with its own route id, saved again unchanged, gets a new checksum: reviseRoute increments its revision and the summary marks it (changed). The same happens to a Kamelet route with its own id when its parent route reloads. Across two runs the checksums only match if the templates are created in the same order. This prefix is an id Camel generates, which the PR intends to leave out. One option is a checksum flag on LwModelToXMLDumper.write that reuses the existing restorers in the extractor:

if (checksum && Boolean.TRUE.equals(route.isTemplate())) {
    String prefix = route.getNodePrefixId(); // from a counter (template, Kamelet), not as written
    route.setNodePrefixId(null);
    restorers.add(() -> route.setNodePrefixId(prefix));
}

It would also help to add a RouteChecksumTest case that creates the same templated route twice (stop and remove in between) and expects the same checksum and revision 1.

2. Endpoint DSL options that are objects (non-blocking)

resolveEndpointDslUris writes builder.getRawUri() (LwModelToXMLDumper.java:346/353/361). With no context, any option that is not a String, Number, Boolean or Enum (a DataSource, SSLContextParameters, an SDK client) goes into remaining (AbstractEndpointBuilder.java:125), and the URI gets hash= + remaining.hashCode() (:78). That is an identity hash, new in every run and for every new instance when a Java route reloads. With the same checksum flag we could drop the hash parameter; the docs already say beans are outside the checksum.

3. Literal secrets go into the digest (hardening, non-blocking)

Placeholders and vault references are hashed as written, and nothing loads a class or reaches the network, also from camel cmd route-structure. That part is good. A password written literally in a URI is hashed unmasked, though. route-dump and JMX dumpRouteAsXml already show it, but camel.main.dumpRoutes=json masks to URIs (SendDefinition.java:117) and now prints the checksum beside them. That gives anyone reading the logs a 48-bit offline check for a weak literal password. Running uri values through URISupport.sanitizeUri in the checksum input would close it, and it fits "a changed property value is configuration".

4. Smaller points

  • routeRevisions (AbstractCamelContext.java:256) is never pruned. An app that adds and removes routes with unique ids keeps growing it for the life of the JVM (Kamelet routes get <template>-<counter> ids by default). Could we add a cap, or a note in the Javadoc?
  • RouteAddedEvent and onRoutesAdd fire (RouteService.java:228/233) before addRoute (:237) sets the revision. Listeners see revision 0 next to a checksum, but the Javadoc says 0 means the checksum is not known.
  • CI tested only the 14 changed modules (dependents are over the threshold). Every route preparation now runs the XML writer, so a test-dependents run, or at least camel-endpointdsl, camel-kamelet and camel-yaml-dsl, would add confidence.
  • The new test classes and methods are public; package-private is preferred for new tests.

Reviewed with Claude Code on behalf of oscerd. This review was generated by an AI agent and may contain inaccuracies; please verify all suggestions before applying.

… endpoint DSL make from counters, masks URI secrets, and the revision is set before the route is announced (address review)

- a route from a route template or a Kamelet: the node prefix, the id of a Kamelet route without one of its own, and
  the routeId of its kamelet:source and kamelet:sink, all made from a counter, are no part of the checksum
- the hash an endpoint DSL builder adds for its options that are objects (an identity hash) is no part of it
- the secrets in endpoint URIs are masked before they are hashed
- the revision is set before RouteAddedEvent and onRoutesAdd, and the revisions of the 10000 route ids used last are kept
- the new test classes are package-private

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>
@davsclaus

Copy link
Copy Markdown
Contributor Author

Thanks @oscerd, all points are addressed in 1102549.

1. Templated and Kamelet routes (blocker): fixed. LwModelToXMLDumper.write has a checksum flag, which LwModelChecksumGenerator sets. For a route with isTemplate(), the flag leaves nodePrefixId out and restores it afterwards, using the extractor's restorers as you suggested. A Kamelet route without an id of its own (<template>-<uuid>, where the uuid is its node prefix) also gets two more things left out: its id, and the routeId=<that id> parameter of its kamelet:source and kamelet:sink URIs. I only found that parameter when the new Kamelet test failed. New tests:

  • RouteChecksumTest.testTemplatedRouteSameChecksumWhenCreatedAgain creates the same templated route twice, with a stop and remove in between, and expects the same checksum and revision 1.
  • KameletRouteChecksumTest (camel-kamelet) creates a Kamelet route with an id of its own and one without, in two runs, and expects the same checksums.

2. Endpoint DSL options that are objects: fixed. In checksum mode the hash= parameter is removed from getRawUri(). EndpointDslRouteChecksumTest (camel-endpointdsl) builds the same route twice with a new ExchangeFormatter instance each time, and LwModelToXMLDumperRawUriTest covers the separators. The docs now say that an object given to an endpoint DSL option is a bean and is not part of the checksum.

3. Literal secrets: fixed. In checksum mode each uri attribute goes through URISupport.sanitizeUri before it is hashed. RouteChecksumTest.testSecretsInUrisMasked checks that two passwords give the same checksum while another path does not. routes.adoc and the Route#getChecksum Javadoc mention it.

4. Smaller points

  • routeRevisions is now an access-ordered map that keeps the 10000 route ids used last (MAX_ROUTE_REVISIONS). The Route#getRevision Javadoc and routes.adoc say so.
  • The revision is now set in RouteService.doWarmUp before RouteAddedEvent and onRoutesAdd. Revising a route again with the same checksum keeps its revision, so addRoute still calls it for a route added another way. RouteChecksumTest.testRevisionKnownWhenTheRouteIsAnnounced checks that listeners see revisions 1 and 2.
  • Dependents: I ran the full test suites locally. camel-core: 8021, camel-console: 259, camel-management: 574, camel-endpointdsl: 69, camel-kamelet: 141, camel-yaml-dsl: 492, camel-xml-io: 436, all green. I also added the test-dependents label.
  • The new test classes and methods are package-private now. The setUp override stays public.

Claude Code on behalf of davsclaus

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All existing review comments appear to have been addressed. One minor observation on the new code:

This review was generated by an AI agent, Hermès on behalf of @gnodet.

Comment thread core/camel-xml-io/src/main/java/org/apache/camel/xml/LwModelToXMLDumper.java Outdated
The routeId pattern captures the value, which is compared to the id, and the & after a parameter is no part of the
match, so a routeId of another value does not hide the one after it.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Signed-off-by: Claus Ibsen <claus.ibsen@gmail.com>

@gnodet-bot gnodet-bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previous findings are all addressed.

  • ✅ Grammar nit: "added again changed" → "added again with another checksum" fixed in all 5 locations (RouteDevConsole, ManagedRouteMBean, route.json schemas).
  • ✅ Pattern caching: HASH_PARAMETER and ROUTE_ID_PARAMETER are now static compiled constants.

No new issues in the latest commits. The leaveOutCounters() logic correctly handles Kamelet routes and non-Kamelet template routes, reviseRoute() is idempotent, the LRU routeRevisions map is safely locked, all new test classes are package-private, and sanitizeUri() covers URI secret masking.

LGTM.

This review was generated by an AI agent, Hermès on behalf of @gnodet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants