Skip to content

CAMEL-25538: fix configuration-validate to accept all camel.* groups and report accepted=false as valid=false - #27841

Merged
davsclaus merged 18 commits into
apache:mainfrom
gnodet:fix/camel-25538-fix-configuration-validate
Oct 16, 2026
Merged

davsclaus merged 18 commits into
apache:mainfrom
gnodet:fix/camel-25538-fix-configuration-validate

Conversation

@gnodet

@gnodet gnodet commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Fixes bugs in camel_configuration_validate (MCP tool) and AbstractCamelCatalog.validateConfigurationProperty() that caused all camel.* groups not in the original 10 hardcoded prefixes (camel.server.*, camel.management.*, camel.vault.*, etc.) to be ignored or mis-reported.

Root Cause

Bug 1 — AbstractCamelCatalog.acceptConfigurationPropertyKey() hardcoded only 10 of the 36 camel.* groups defined in camel-main-configuration-metadata.json:

camel.component.  camel.dataformat.  camel.language.  camel.main.
camel.resilience4j.  camel.faulttolerance.  camel.threadpool.
camel.health.  camel.lra.  camel.rest.

Missing: camel.server.*, camel.management.*, camel.ssl.*, camel.debug.*, camel.trace.*, camel.vault.*, camel.opentelemetry.*, camel.metrics.*, camel.cluster.*, camel.routecontroller.*, and others (≈29 groups total).

When a key wasn't accepted, validateConfigurationProperty() returned immediately. Since isSuccess() returns true when there are no recorded errors, this produced the contradictory {accepted:false, valid:true} result.

Bug 2 — ConfigurationValidateTools.toPropertyValidationInfo() at the MCP layer computed valid = result.isSuccess(), ignoring the accepted flag.

Fix

AbstractCamelCatalog:

  • acceptConfigurationPropertyKey() is now an instance method that reads mainModel().getGroups() dynamically. Any group in camel-main-configuration-metadata.json is automatically accepted without a code change.
  • Group matching is case- and dash-insensitive to mirror how camel-main binds keys at runtime (MainHelper.optionKey / startsWithIgnoreCase), so camel.error-registry.* matches the camel.errorRegistry group.
  • The main model is loaded once per validateConfigurationProperty() call (not once per helper call), and only for keys that actually need it (keys starting with camel.* other than camel.component.* / camel.dataformat.* / camel.language.*).
  • Both private helpers (acceptConfigurationPropertyKey, matchMainModelGroup) use the passed-in model directly — no redundant re-load fallback.
  • matchMainModelGroup() correctly locates the option-name offset for nested groups like camel.vault.aws.* (3-segment group name).

ConfigurationValidateTools:

  • checked is now set from result.isAccepted().
  • valid = checked && result.isSuccess(), so an unchecked line is neither valid nor invalid.
  • Lines not recognised as Camel properties are reported with checked=false and counted in summary.unchecked (not in summary.valid or summary.errors).
  • Spring Boot false positives: camel-main-configuration-metadata.json does not include starter-specific options (e.g. camel.metrics.uriTagEnabled from camel-micrometer-starter — RuntimeProvider has no hook to supply a Spring Boot-specific main schema). For runtime=spring-boot, when the only issues are "unknown option" errors (no type errors) under a newly accepted group (not one of the original 10 hardcoded prefixes), the line is downgraded to checked=false to avoid false positives. Issues/suggestions are still surfaced so the user has context. Keys under the original 10 groups (camel.component.*, camel.dataformat.*, camel.language.*, camel.main.*, etc.) retain full validation — typo detection continues to work for those.
  • The @Tool description explains checked / unchecked semantics and the Spring Boot limitation.

Note: camel-report-maven-plugin:validate is unaffected by the Spring Boot downgrade — ValidateMojo does not pass a runtime, so starter-only options such as camel.metrics.uriTagEnabled will now be reported as "Unknown option". This is documented in the upgrade guide.

CatalogService Spring Boot fallback (commit 7e32ba8, outside CAMEL-25538 scope):

  • When downloading the Spring Boot-specific catalog fails (no network access), CatalogService falls back to the default main catalog silently. This matches the existing fallback for a versioned main catalog, and avoids a hard failure in offline environments. When squashing, this change should be called out in the commit message.

Tests

ConfigurationValidateToolsTest — 18 test cases including new:

  • camelServerPortIsAcceptedAndValid — camel.server.port=9999 → checked=true, valid=true
  • camelServerInventedKeyIsCheckedButNotValid — unknown option under known group → checked=true, valid=false
  • nonCamelKeyMarkedNotChecked — unknown namespace → checked=false, not counted in errors
  • uncheckedKeyImpliesValidFalseAndNotCountedInErrors — summary counts correct
  • camelManagementKeyIsCheckedAndValid — camel.management.enabled=true accepted and valid
  • camelVaultAwsKeyIsCheckedAndValid — nested 3-segment group (camel.vault.aws.*) accepted, issues() empty
  • camelVaultAwsInventedKeyIsCheckedButNotValid — invented option under nested group → valid=false
  • dashedGroupNameIsCheckedAndValid — camel.error-registry.enabled=true accepted (dash-insensitive)
  • springBootStarterOnlyOptionIsUnchecked — camel.metrics.uriTagEnabled with runtime=spring-boot → checked=false, not counted in errors; same key without runtime flag → checked=true, valid=false

CamelCatalogTest — new test methods:

  • testValidateConfigurationPropertyNestedGroup — nested group + invented option
  • testValidateConfigurationPropertyDashedGroupName — dashed-form group name, including camel.ai-observability.*
  • testValidateConfigurationPropertyServerInventedOption — real and invented options under camel.server.*

Not in scope (tracked in CAMEL-25538)

  • camel.jbang.* validation against jbangModel() (item 2)
  • Group typo suggestions (item 3 — unknown group gets no "did you mean X?" hint)
  • Backslash continuation lines

Hermes Agent (Claude Sonnet 4.6) on behalf of Guillaume Nodet

…and report accepted=false as valid=false

AbstractCamelCatalog.acceptConfigurationPropertyKey() hardcoded only ten
camel.* prefixes (component/dataformat/language/main/resilience4j/
faulttolerance/threadpool/health/lra/rest), so keys under the 26 other
groups defined in camel-main-configuration-metadata.json (camel.server.*,
camel.management.*, camel.ssl.*, camel.debug.*, camel.trace.*,
camel.vault.*, camel.cluster.*, camel.routecontroller.*, and others) were
rejected with accepted=false. Because validateConfigurationProperty()
returned immediately after setAccepted(false) without recording any error,
isSuccess() returned true, producing the contradictory response
{accepted:false, valid:true} for every unrecognised camel.* group.

Fix 1 (AbstractCamelCatalog): replace the hardcoded prefix list with a
dynamic lookup against mainModel().getGroups() so that any group declared
in the metadata is automatically accepted without needing a code change.
component/dataformat/language keep their own static prefixes because they
use a different per-artifact model, not mainModel().

Fix 2 (ConfigurationValidateTools): at the MCP layer, guard valid with
"accepted && result.isSuccess()" so that an unaccepted key is never
reported as valid, even when the catalog returned no errors.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
@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 14, 2026 •

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • catalog/camel-catalog
  • core/camel-core-catalog
  • docs
  • 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.


🔬 Scalpel shadow comparison — Scalpel: 494 of 706 tested, 22 compile-only — current: 494 all tested

Maveniverse Scalpel detected 494 affected modules (current approach: 494).

Skip-tests mode would test 494 modules (4 direct + 492 downstream), skip tests for 22 (generated code, meta-modules)

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

Total reactor time: 1m 23s

Module Duration Status
Camel :: JBang :: MCP 28.5s SUCCESS
Camel :: Catalog :: Camel Catalog 28.4s SUCCESS
Camel :: Docs 20.0s SUCCESS
Camel :: Core Catalog 6.0s SUCCESS

Top 20 slowest modules:

  • Camel :: JBang :: MCP (28.5s)
  • Camel :: Catalog :: Camel Catalog (28.4s)
  • Camel :: Docs (20.0s)
  • Camel :: Core Catalog (6.0s)

⚙️ View full build and test results

@gnodet
gnodet marked this pull request as ready for review October 15, 2026 11:45

@davsclaus davsclaus 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.

Thanks @gnodet for picking this up. Building the accepted prefixes from the main metadata groups is the right direction, and camel.server.* / camel.management.* / camel.vault.* typos now get "Unknown option" as they should. A typo in the group (camel.servr.port) is still not accepted, and a typo in the option (camel.server.prot) gets "Unknown option" with suggestions.

What I checked: how validateConfigurationProperty picks the camel.* groups against the 36 groups in camel-main-configuration-metadata.json (including the nested camel.vault.* / camel.cluster.* groups and look-alike names such as opentelemetry/opentelemetry2, kubernetes/kubernetescm), how camel-main binds these keys at runtime (MainHelper.optionKey and startsWithIgnoreCase in BaseMainSupport), the other callers of the catalog API (camel-report-maven-plugin ValidateMojo, camel-jbang PropertiesChecks), the four fix items in CAMEL-25538, and the tests.

Findings:

  1. Unchecked lines now read as rejected (inline). With valid = accepted && isSuccess(), server.port=8080, quarkus.http.port=8080, mail.smtp.host=... and the legal Camel keys without a model (camel.beans.*, camel.variable.*, camel.kamelet.*, camel.jbang.*, the 8 camel.vault.springConfig.* options, which have no group in the metadata) come back valid=false. They are no longer counted as valid, which item 4 asks for, but item 4 also asks that they read as "not checked", not as "rejected": a checked:false flag (or a renamed accepted), a summary.unchecked count, and a sentence in the tool description.
  2. Spring Boot false positives. For runtime=spring-boot the catalog still uses the camel-main metadata, but the starters bind some of the newly accepted groups with their own options. For example camel.metrics.uriTagEnabled, uriTagDynamic and routePolicyExcludePattern exist in camel-micrometer-starter and not in the main metadata, so they now get "Unknown option", in the MCP tool and in camel-report-maven-plugin:validate on Spring Boot projects (which fails the build with failOnError=true). Please either limit the new groups to the main runtime or check against the starter options.
  3. The group match is case- and dash-sensitive, the runtime binding is not (inline). camel-main binds camel.error-registry.enabled, camel.ai-observability.enabled and camel.telemetry-dev.enabled, but the catalog does not accept these keys, so the tool reports them valid=false.
  4. The main metadata is parsed up to 3 times per line on a catalog without cache, such as the one ValidateMojo creates, and now also for every key that does not start with camel. (inline).
  5. Scope. Item 2 (camel.jbang.* against jbangModel()), item 3 (a warning with the closest group for an unknown camel.<x> group, so camel.servr.port still gets no explanation) and @Croway's point about backslash continuation lines are not covered. Fine as follow-ups, but please say so in the PR description.
  6. Tests. camelVaultAwsKeyIsAccepted only asserts accepted (inline). An invented option under a nested group would cover the new dot-offset code. The behaviour change is in camel-core-catalog, but all the tests are in camel-jbang-mcp; a few cases in CamelCatalogTest (nested group, dashed group name, invented option) would also protect the Maven plugin and PropertiesChecks.
  7. Upgrade guide. camel-report-maven-plugin:validate now checks about 26 more camel.* groups, so a build with failOnError=true can fail on keys it ignored before. A short note in camel-4x-upgrade-guide-4_24.adoc would help.

CI is green.

Claude Code on behalf of @davsclaus.

This review was generated by an AI agent and may contain inaccuracies. Please verify all suggestions before applying.

Guillaume Nodet and others added 2 commits October 16, 2026 06:30
@github-actions

github-actions Bot commented Oct 16, 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.

@davsclaus davsclaus 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.

Thanks @gnodet, the new commits fix most of what I raised:

  • Unchecked lines now read as "not checked" instead of "rejected": checked=false, they are left out of summary.valid and summary.errors, summary.unchecked is added, and the tool description explains it.
  • Group matching is now dash- and case-insensitive, so camel.error-registry.enabled reaches the camel.errorRegistry group, the same way camel-main binds it. camel.cluster.jgroups-raft.* still matches.
  • Model loading: a main-group key now parses the model once instead of up to three times, and keys outside camel. return before any model is loaded.
  • Vault tests: the camel.vault.aws tests now assert valid, including an invented option, so they cover the dot-offset logic.

New in this round:

  1. Extra parsing for component lines (inline). The model is now loaded for every camel. key, including camel.component.*, camel.dataformat.* and camel.language.*, which return before they use it. mainModel() parses the JSON on every call (enableCache() caches only the string), so ValidateMojo and the MCP tool now parse the main metadata once per component line, which neither the base code nor the first commit did.
  2. Minor cleanup: the "camel-main not detected" branch is kept, but can no longer be reached, as the new comment itself says. The cachedModel != null ? cachedModel : mainModel() fallbacks in the two private helpers only take effect when the model is missing, and then they look it up again. Passing the model straight through and dropping that branch would be simpler.

Still open from my first review:

  • Spring Boot false positives: with runtime=spring-boot, starter-only options such as camel.metrics.uriTagEnabled still get "Unknown option", both in the MCP tool and in camel-report-maven-plugin:validate.
  • Tests: there is no test for a dashed group name, although that is the main fix of this round (suggested inline), and CamelCatalogTest has no new cases. camel-core-catalog is shared, so those cases would protect ValidateMojo and PropertiesChecks too. CI does not test the dependents of camel-core-catalog (too many), so the test-dependents label would help.
  • Upgrade guide: there is still no note in camel-4x-upgrade-guide-4_24.adoc that validate now checks about 26 more groups and accepts dashed or mixed-case group names.
  • PR description: it still describes the first commit (accepted, valid = accepted && isSuccess(), the old test names).

The spotless commit fixed the "uncommitted changes" failure; CI is running again on the new head.

Claude Code on behalf of Claus Ibsen

@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.

The core fix is solid — dynamic group matching via matchMainModelGroup, clean checked/unchecked semantics, and good test coverage. A few issues remain.

Unaddressed from previous review:

  • Spring Boot false positives (server.port, quarkus.* etc. are now classified as unchecked rather than the previous broken behaviour, but the tool description was the only update — no filtering or caller-side guidance for mixed Spring Boot + Camel property files)
  • Upgrade guide note for the accepted → checked rename was not mentioned

Binary-compat note: PropertyValidationInfo record field rename accepted → checked and new ConfigurationValidateSummary.unchecked field change the JSON wire format of the MCP tool response — worth documenting in the JIRA.

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

@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.

Re-review after latest commits — previous concerns are resolved.

Previously raised, now addressed:

  • ✅ Upgrade guide documents the accepted → checked rename and the new unchecked field (see camel-4x-upgrade-guide-4_24.adoc)
  • ✅ Non-camel keys (server.port, quarkus.*) are correctly classified as checked=false / unchecked and excluded from error/valid counts — test nonCamelKeyMarkedNotChecked covers this
  • ✅ Dashed group names (camel.error-registry.*) are matched case- and dash-insensitively — test dashedGroupNameIsCheckedAndValid covers this
  • ✅ The model == null guard in matchMainModelGroup is intentional (handles mainModel() returning null when camel-main is not on the classpath)

Overall assessment:
The implementation is sound. The caching strategy correctly short-circuits model loading for component/dataformat/language keys. The two-method split (acceptConfigurationPropertyKey with full camel.* prefix, matchMainModelGroup with stripped prefix) is intentional and documented in the Javadoc. Test coverage is comprehensive: nested groups (camel.vault.aws.*), invented options, unchecked non-camel keys, and dashed group names are all exercised.

One minor non-blocking observation: AbstractCamelCatalog itself has no new unit tests for the dynamic group matching (all new tests go through ConfigurationValidateTools). This is acceptable given the end-to-end coverage, but a direct test in CamelCatalogTest would make regressions easier to pinpoint.

LGTM — the changes address the regression and extend coverage cleanly.

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

@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.

Following up on my earlier review — the dead-code concern from the previous round is resolved by this commit.

New commit (ce48265) — assessed:

  • ✅ Dead model fallback removed from acceptConfigurationPropertyKey: cachedModel != null ? cachedModel : mainModel() → cachedModel. Behaviour is identical when mainModel() returns null (classpath absent), and the re-load path is eliminated.
  • ✅ Spring Boot false-positive logic: onlyUnknownOptionErrors check is sound. addUnknown() uses a LinkedHashSet and increments errors only once per unique name, so getNumberOfErrors() == unknownKeys.size() reliably isolates unknown-option errors from syntax/enum/required/invalidReference/invalidMap/invalidArray errors — all of which contribute to the same errors counter and would break the equality if present.

Remaining open:

  1. No Spring Boot test (see inline). The new isSpringBoot downgrade path has no test case.
  2. PR description still mentions CamelCatalogTest new methods (testValidateConfigurationPropertyNestedGroup, testValidateConfigurationPropertyDashedGroupName, testValidateConfigurationPropertyServerInventedOption) — but none appear in the PR diff.

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

@gnodet
gnodet force-pushed the fix/camel-25538-fix-configuration-validate branch 2 times, most recently from 2c10e2d to bb0fea7 Compare October 16, 2026 08:10
…hing

Add three direct tests to CamelCatalogTest that exercise AbstractCamelCatalog's
dynamic group matching logic independently of ConfigurationValidateTools:

- testValidateConfigurationPropertyNestedGroup: validates nested camel.vault.aws.*
  keys and confirms invented options are rejected
- testValidateConfigurationPropertyDashedGroupName: validates dash-insensitive group
  matching (camel.error-registry.* → camel.errorRegistry group)
- testValidateConfigurationPropertyServerInventedOption: validates that camel.server.*
  accepts known options and rejects invented ones

@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.

Following up on my earlier review — both remaining open issues are now addressed.

Previously raised, now addressed:

  • ✅ CamelCatalogTest direct tests for dynamic group matching now present: testValidateConfigurationPropertyNestedGroup, testValidateConfigurationPropertyDashedGroupName, testValidateConfigurationPropertyServerInventedOption — all three fail on the old code (groups camel.vault.aws.*, camel.error-registry.*, camel.server.* absent from the hardcoded prefix list) and pass after the fix.
  • ✅ Spring Boot starter test added: springBootStarterOnlyOptionIsUnchecked.

One concern on the new spring-boot test (see inline): the test passes before the fix for the wrong reason and does not strongly exercise the isSpringBoot downgrade path.

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

@gnodet gnodet left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Following up on my earlier review — the weak spring-boot test concern is now resolved.

Previously raised, now addressed:

  • ✅ springBootStarterOnlyOptionIsUnchecked now includes a counterpart assertion: same key (camel.metrics.uriTagEnabled) without the spring-boot runtime flag returns checked=true (group matched dynamically via the new matchMainModelGroup) but valid=false (option not in camel-main metadata). This assertion fails on the old code (where camel.metrics was not in the hardcoded prefix list), making the test a genuine regression guard for the dynamic matching path.
  • ✅ All three new CamelCatalogTest methods (testValidateConfigurationPropertyNestedGroup, testValidateConfigurationPropertyDashedGroupName, testValidateConfigurationPropertyServerInventedOption) pass locally.

All review threads are resolved. LGTM — the implementation is complete and well-tested.

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

@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.

Following up on my earlier review — the last outstanding concern is now addressed.

Previously raised, now addressed:

  • ✅ Weak spring-boot test — springBootStarterOnlyOptionIsUnchecked now includes the counterpart assertion: camel.metrics.uriTagEnabled without the spring-boot flag must be checked=true (because camel.metrics is a known main-model group) but valid=false (because uriTagEnabled is not in the main schema). This assertion fails on the old code (where camel.metrics.* was not in the hardcoded prefix list), making the test discriminating. The fix is complete.

All prior findings are resolved. LGTM — ready to merge.

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

…ad fails

When runtime=spring-boot with no explicit version or platformBom,
CatalogService.loadCatalog() attempted to download the Spring Boot
catalog provider from Maven Central. In CI environments without network
access this raised a DownloadException, causing ConfigurationValidateTools
tests to fail with a ToolCallException rather than the expected result.

Extend the existing offline-fallback logic (already in place for main
runtime + explicit version) to also cover spring-boot runtime without
a pinned version. The default camel-main catalog is sufficient for
configuration property validation in that case.

Also add a dedicated CatalogServiceTest that reproduces the failure
using a non-existent file: repository, which always triggers the
download error without requiring network access.

@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.

Following up on my earlier review — the last concern (weak spring-boot test) was addressed in the previous commit and all threads are resolved. This re-review covers the new commit 7e32ba8.

⚠️ matchMainModelGroup always returns null — validation is silently skipped for all main-model groups.

The Javadoc states the method "receives the full camel.* key", but the implementation strips "camel." from the group name before the startsWith check:

String groupName = group.getName().substring("camel.".length()); // → "errorRegistry"
String normGroupName = groupName.replace("-", "").toLowerCase();  // → "errorregistry"
if (normKey.startsWith(normGroupName + ".")) {                   // "camel.errorregistry.enabled".startsWith("errorregistry.") → FALSE

normKey is the full key ("camel.errorregistry.enabled") but normGroupName + "." is "errorregistry." — the "camel." prefix has been stripped from the group but not from the key. The startsWith call never matches, matchMainModelGroup always returns null, and the else branch never executes.

Effect: unknown options under accepted groups (e.g. camel.server.inventedOption) are not caught — isSuccess() returns true and valid=true for any key that acceptConfigurationPropertyKey already accepted. Tests like camelServerInventedKeyIsCheckedButNotValid and camelVaultAwsInventedKeyIsCheckedButNotValid are almost certainly failing, which explains the CI failure on the prior commit (24be01b). The new commit (7e32ba8) does not fix this.

Fix — use the same pattern as acceptConfigurationPropertyKey (keep the full group name with "camel.", do not strip):

for (MainModel.MainGroupModel group : model.getGroups()) {
    String normGroup = group.getName().replace("-", "").toLowerCase(Locale.ENGLISH) + ".";
    if (normKey.startsWith(normGroup)) {
        return group;
    }
}

The new commit (7e32ba8 — spring-boot download fallback in CatalogService) is correct: the catch condition !hasBom && (main && hasVersion || springBoot && !hasVersion) is properly parenthesised (the outer parens wrap both clauses so !hasBom applies to both), and the test is discriminating (old code throws, new code returns the default catalog). No issues in that commit.

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

normKey carries the full 'camel.*' key (e.g. 'camel.errorregistry.enabled'),
but the loop was stripping 'camel.' from group.getName() before normalising,
producing normGroupName = 'errorregistry'. The startsWith check then compared
'camel.errorregistry.enabled' against 'errorregistry.' which never matches.

acceptConfigurationPropertyKey avoids the same pitfall by normalising the full
group name ('camel.errorRegistry' -> 'camel.errorregistry') and comparing it
against the full normKey, which is what matchMainModelGroup should do too.

Effect of the bug: matchMainModelGroup always returned null, so the else-branch
in validateConfigurationProperty never executed — unknown options under accepted
main-model groups (e.g. camel.server.inventedOption) were silently validated
with isSuccess()=true, making valid=true when they should be valid=false.

@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.

Following up on my earlier review — the matchMainModelGroup prefix fix is now correctly applied.

Previously raised, now addressed:

  • ✅ matchMainModelGroup now uses group.getName() directly (without stripping camel.), making normGroupName (e.g. camel.errorregistry) correctly match normKey (e.g. camel.errorregistry.enabled) via startsWith — the prefix logic is now consistent between acceptConfigurationPropertyKey and matchMainModelGroup

No further concerns. The fix is solid.


This review was generated by an AI agent, Hermès — it may contain errors.

@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.

Following up on my earlier review — the two final fix commits are correct.

Previously raised, now addressed:

  • ✅ matchMainModelGroup no longer strips "camel." from group.getName() before normalising — normGroupName is now "camel.errorregistry" (full name), matching normKey = "camel.errorregistry.enabled" correctly via startsWith
  • ✅ Caller now passes longKey (the unmodified full camel.* key) to matchMainModelGroup — key had already had "camel." stripped at this point, which would have caused the same prefix mismatch

Both fixes are consistent with how acceptConfigurationPropertyKey already operated. Traced through camel.server.port (simple lookup), camel.server.inventedOption (unknown option detection), and camel.vault.aws.accessKey (nested 3-segment group with dot-offset extraction) — all paths produce correct results. Existing tests (testValidateConfigurationPropertyServerInventedOption, testValidateConfigurationPropertyNestedGroup, testValidateConfigurationPropertyDashedGroupName) exercise the exact scenarios fixed by these commits.

LGTM — ready to merge.

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

@gnodet

gnodet commented Oct 16, 2026

Copy link
Copy Markdown
Contributor Author

All review findings from @davsclaus have been addressed across the subsequent commits:

  • Unchecked lines now read as checked=false / unchecked count (not rejected)
  • Group matching is dash- and case-insensitive (camel.error-registry.* etc.)
  • Spring Boot false positives downgraded to checked=false via onlyUnknownOptionErrors
  • mainModel() is skipped for camel.component.*, camel.dataformat.*, camel.language.* keys
  • Dead code and matchMainModelGroup prefix bug fixed
  • All new tests pass: testValidateConfigurationPropertyNestedGroup, testValidateConfigurationPropertyDashedGroupName, testValidateConfigurationPropertyServerInventedOption, springBootStarterOnlyOptionIsUnchecked

CI is green. All review threads are resolved. PTAL @davsclaus for a re-review when you get a chance.

@davsclaus davsclaus 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.

Thanks @gnodet, most of the last round is in:

  • The main model is no longer parsed for camel.component.*, camel.dataformat.* and camel.language.* keys, and the unreachable "camel-main not detected" branch and the reload fallbacks are gone.
  • CamelCatalogTest now covers nested groups, dashed group names and invented options, and the MCP tests cover the dashed group.
  • There is an upgrade guide entry in the 4.23 to 4.24 section.
  • 494e4cb passes longKey to matchMainModelGroup again. Since 7efd474 the stripped key no longer matched any group, so main-group lines were accepted without being validated. Good that this is fixed (the bot comment that led to 7efd474 was mistaken).

Remaining points:

  1. The Spring Boot downgrade is too broad (inline). Every line whose only errors are unknown options becomes checked=false with no issues. That includes camel.component.*, camel.dataformat.*, camel.language.* and camel.main.*. On main, camel.component.kafka.brokerz=x with runtime=spring-boot was reported with a "did you mean brokers" suggestion. Now it is silently unchecked, which turns off typo detection for Spring Boot.
  2. camel-report-maven-plugin:validate on Spring Boot. ValidateMojo does not know the runtime, so starter-only options such as camel.metrics.uriTagEnabled now fail a build that uses failOnError=true. If that stays out of scope, please mention it in the upgrade guide and the PR description.
  3. Upgrade guide accuracy (inline): the group count, and what the tool returned before.
  4. CatalogService fallback. 7e32ba8 has no JIRA key and changes every MCP catalog tool for runtime=spring-boot: without network access they now answer silently from the main catalog. That matches the existing fallback for main with a version, but it is outside CAMEL-25538, so please mention it in the PR description (and in the commit message when squashing).

CI on the new head is still running.

Claude Code on behalf of Claus Ibsen

Comment thread docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc Outdated
Comment thread docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc Outdated
…urface suggestions on downgrade; fix upgrade guide group count and unchecked description

@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.

Re-reviewing after the latest commits.

One concern with the new isOriginalGroup guard.

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

…ing dashed forms

Spring Boot relaxed-binding writes 'camel.fault-tolerance.*' and
'camel.thread-pool.*' with dashes. The isOriginalGroup prefix checks used
the raw key which would miss these dashed forms (e.g. 'camel.faulttolerance.'
does not match 'camel.fault-tolerance.'). Normalize the key the same way the
catalog does — remove dashes and lowercase — before the startsWith checks.

@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.

Re-review after commit be91daa.

The normalization fix is correct and complete: propertyKey is now normalized to normKey (dashes removed, lowercased) before all startsWith prefix checks in isOriginalGroup. The remaining review questions (CatalogService fallback condition, StringHelper.before(key, ".") for nested groups, acceptConfigurationPropertyKey raw-key handling for static prefixes) are non-issues — the static prefixes contain no dashes, so raw comparison is correct there.

✅ LGTM — the concern from the previous review is fully addressed.

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

@davsclaus davsclaus 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.

Thanks @gnodet, all four points from the last round are addressed:

  1. The Spring Boot downgrade now only applies to the groups this PR newly accepts, and the key is normalised the same way as in the catalog, so camel.fault-tolerance.* keeps full validation too. Downgraded lines still return their issues and suggestions. camel.component.kafka.brokerz=x with runtime=spring-boot is again reported as invalid with a suggestion.
  2. The camel-report-maven-plugin:validate limitation for Spring Boot is in the PR description and the upgrade guide.
  3. The upgrade guide has the corrected count and says what the tool returned before.
  4. The CatalogService fallback is called out in the PR description.

I checked the original-group list against the main metadata: the 7 main groups (main, resilience4j, faulttolerance, threadpool, health, lra, rest) plus component, dataformat and language match the old hardcoded prefixes. CI is green.

A few small nits are inline: a fully qualified java.util.Locale, a test for the narrowed downgrade, and two wording fixes in the upgrade guide. None of them block the merge.

Claude Code on behalf of Claus Ibsen

Comment thread docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc Outdated
Comment thread docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc Outdated
- import java.util.Locale instead of FQCN (CLAUDE.md style)
- springBootStarterOnlyOptionIsUnchecked: assert issues() contains unknown kind
- add springBootKeepsValidationForOriginalGroups test covering component and
  fault-tolerance (dashed form) typos under spring-boot runtime
- upgrade guide: fix group count (7 of 36, not 10), remove approximate qualifier,
  replace dangling 'See below' with concrete consequence sentence

@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.

Following up on my earlier review — the nit commit (e322e883) is clean.

All prior findings resolved. This commit addresses davsclaus's non-blocking nits:

  • ✅ Import java.util.Locale instead of FQCN — correct
  • ✅ Upgrade guide count fixed to "7 of the 36 groups" (main, resilience4j, faulttolerance, threadpool, health, lra, rest) — verified against camel-main-configuration-metadata.json; the 29 additional = 36 − 7 is accurate
  • ✅ "See below" dangling reference replaced with concrete consequence sentence — correct
  • ✅ springBootStarterOnlyOptionIsUnchecked strengthened with issues() assertion — consistent with production code (springBootDowngraded=true path still calls collectIssues())
  • ✅ springBootKeepsValidationForOriginalGroups test: camel.fault-tolerance.* normalises to camel.faulttolerance.* → isOriginalGroup=true → full validation retained — correct

LGTM — ready to merge.

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

@davsclaus davsclaus added this to the 4.24.0 milestone Oct 16, 2026
@davsclaus davsclaus added the bug Something isn't working label Oct 16, 2026
@davsclaus

Copy link
Copy Markdown
Contributor

Approved and ready to merge, but it now conflicts with main in docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_24.adoc: several PRs merged today added entries to the 4.23 → 4.24 section. Could you rebase on main? It can be merged once CI is green again.

Claude Code on behalf of Claus Ibsen

@gnodet

gnodet commented Oct 16, 2026

Copy link
Copy Markdown
Contributor Author

🔄 Backport Bot

This bugfix targets main and may need porting to:

  • camel-4.22.x

Add a port/<branch> label to automatically create a backport PR for that branch.

Backport PRs will be created automatically on merge (once a port label is added). Comment /port to create them immediately.

ℹ️ If you push additional commits after /port, use /port again to update the port PRs.

@davsclaus
davsclaus merged commit d0a1031 into apache:main Oct 16, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants