Skip to content

CAMEL-23382: camel-ai-tool - create unified AI tool component#24473

Open
zbendhiba wants to merge 5 commits into
apache:mainfrom
zbendhiba:CAMEL-23382-step1-camel-ai-tool
Open

CAMEL-23382: camel-ai-tool - create unified AI tool component#24473
zbendhiba wants to merge 5 commits into
apache:mainfrom
zbendhiba:CAMEL-23382-step1-camel-ai-tool

Conversation

@zbendhiba

Copy link
Copy Markdown
Contributor

Step 1: Create the new camel-ai-tool module with AiToolSpec, AiToolRegistry, consumer endpoint, and full tests. No changes to existing modules.

Description

Summary

Create the new camel-ai-tool module with the unified AI tool abstraction layer:

  • AiToolSpec — vendor-neutral tool descriptor (name, description, parameters, tags)
  • AiToolRegistry — central registry for discovering and managing AI tools
  • AiToolConsumer — endpoint that registers Camel routes as AI-callable tools
  • Full unit test coverage

No changes to existing modules in this PR.

Roadmap

Technical design details : design/aiTool.adoc file

This work is split into several sequential PRs to keep reviews focused:

  • Step 1 (this PR): Create the new camel-ai-tool module with AiToolSpec, AiToolRegistry, consumer endpoint, and full tests. No changes to existing modules.
  • Step 2: Wire camel-langchain4j-agent producer to read tools from AiToolRegistry instead of the old cache, with upgrade guide entry.
  • Step 3: Wire camel-spring-ai-chat producer to discover tools from AiToolRegistry, with upgrade guide entry.
  • Step 4: Wire camel-langchain4j-tools producer to read from AiToolRegistry, keeping the agentic loop intact.
  • Step 5: Deprecate camel-langchain4j-tools consumer side and remove camel-spring-ai-tools entirely, with upgrade guide entries for both.
  • Step 6: Add tool support to camel-openai. Resolve tools from AiToolRegistry and implement the dispatch loop
    (separate Jira issue).

@github-actions

github-actions Bot commented Jul 6, 2026

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 Jul 6, 2026

Copy link
Copy Markdown
Contributor

🧪 CI tested the following changed modules:

  • bom/camel-bom
  • catalog/camel-allcomponents
  • catalog/camel-catalog
  • components/camel-ai
  • components/camel-ai/camel-ai-tool
  • core/camel-main
  • docs
  • dsl/camel-componentdsl
  • dsl/camel-endpointdsl
  • dsl/camel-kamelet-main
  • parent
  • tooling/maven/camel-package-maven-plugin

ℹ️ 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: 651 tested, 23 compile-only — current: 76 all tested

Maveniverse Scalpel detected 674 affected modules (current approach: 76).

⚠️ Modules only in Scalpel (674)
  • apache-camel
  • archetypes
  • bom-generator
  • bom-generator-maven-plugin
  • bundles-pom
  • camel
  • camel-a2a
  • camel-activemq
  • camel-activemq6
  • camel-ai-parent
  • camel-ai-tool
  • camel-allcomponents
  • camel-amqp
  • camel-api
  • camel-api-component-maven-plugin
  • camel-arangodb
  • camel-archetype-api-component
  • camel-archetype-component
  • camel-archetype-dataformat
  • camel-archetype-java
  • camel-archetype-main
  • camel-archetype-spring
  • camel-as2
  • camel-as2-api
  • camel-as2-parent
  • camel-asn1
  • camel-asterisk
  • camel-atmosphere-websocket
  • camel-atom
  • camel-attachments
  • camel-avro
  • camel-avro-rpc
  • camel-avro-rpc-jetty
  • camel-avro-rpc-parent
  • camel-avro-rpc-spi
  • camel-aws-bedrock
  • camel-aws-cloudtrail
  • camel-aws-common
  • camel-aws-config
  • camel-aws-parameter-store
  • camel-aws-parent
  • camel-aws-secrets-manager
  • camel-aws-security-hub
  • camel-aws2-athena
  • camel-aws2-comprehend
  • camel-aws2-cw
  • camel-aws2-ddb
  • camel-aws2-ec2
  • camel-aws2-ecs
  • camel-aws2-eks
  • camel-aws2-eventbridge
  • camel-aws2-iam
  • camel-aws2-kinesis
  • camel-aws2-kms
  • camel-aws2-lambda
  • camel-aws2-mq
  • camel-aws2-msk
  • camel-aws2-polly
  • camel-aws2-redshift
  • camel-aws2-rekognition
  • camel-aws2-s3
  • camel-aws2-s3-vectors
  • camel-aws2-ses
  • camel-aws2-sns
  • camel-aws2-sqs
  • camel-aws2-step-functions
  • camel-aws2-sts
  • camel-aws2-textract
  • camel-aws2-timestream
  • camel-aws2-transcribe
  • camel-aws2-translate
  • camel-azure-common
  • camel-azure-cosmosdb
  • camel-azure-eventgrid
  • camel-azure-eventhubs
  • camel-azure-files
  • camel-azure-functions
  • camel-azure-key-vault
  • camel-azure-parent
  • camel-azure-schema-registry
  • camel-azure-servicebus
  • camel-azure-storage-blob
  • camel-azure-storage-datalake
  • camel-azure-storage-queue
  • camel-barcode
  • camel-base
  • camel-base-engine
  • camel-base64
  • camel-bean
  • camel-bean-validator
  • camel-beanio
  • camel-bindy
  • camel-bom
  • camel-bonita
  • camel-box
  • camel-box-api
  • camel-box-parent
  • camel-braintree
  • camel-browse
  • camel-buildtools
  • camel-caffeine
  • camel-camunda
  • camel-cassandraql
  • camel-catalog
  • camel-catalog-common
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-cbor
  • camel-chatscript
  • camel-chunk
  • camel-cli-connector
  • camel-cli-debug
  • camel-clickup
  • camel-cloudevents
  • camel-cluster
  • camel-cm-sms
  • camel-coap
  • camel-cometd
  • camel-component-maven-plugin
  • camel-componentdsl
  • camel-console
  • camel-consul
  • camel-controlbus
  • camel-core
  • camel-core-all
  • camel-core-catalog
  • camel-core-engine
  • camel-core-languages
  • camel-core-model
  • camel-core-processor
  • camel-core-reifier
  • camel-core-xml
  • camel-couchbase
  • camel-couchdb
  • camel-cron
  • camel-crypto
  • camel-crypto-pgp
  • camel-csimple-joor
  • camel-csimple-maven-plugin
  • camel-csv
  • camel-cxf-common
  • camel-cxf-parent
  • camel-cxf-rest
  • camel-cxf-soap
  • camel-cxf-spring-common
  • camel-cxf-spring-rest
  • camel-cxf-spring-soap
  • camel-cxf-spring-transport
  • camel-cxf-transport
  • camel-cyberark-vault
  • camel-dapr
  • camel-dataformat
  • camel-dataset
  • camel-datasonnet
  • camel-debezium-common
  • camel-debezium-common-parent
  • camel-debezium-db2
  • camel-debezium-maven-plugin
  • camel-debezium-mongodb
  • camel-debezium-mysql
  • camel-debezium-oracle
  • camel-debezium-parent
  • camel-debezium-postgres
  • camel-debezium-sqlserver
  • camel-debug
  • camel-dependencies
  • camel-dfdl
  • camel-dhis2
  • camel-dhis2-api
  • camel-dhis2-parent
  • camel-diagram
  • camel-digitalocean
  • camel-direct
  • camel-disruptor
  • camel-djl
  • camel-dns
  • camel-docker
  • camel-docling
  • camel-drill
  • camel-dropbox
  • camel-dsl-modeline
  • camel-dsl-support
  • camel-dynamic-router
  • camel-ehcache
  • camel-eip-documentation-enricher-maven-plugin
  • camel-elasticsearch
  • camel-elasticsearch-rest-client
  • camel-endpointdsl
  • camel-endpointdsl-support
  • camel-enforcer-rules
  • camel-etc
  • camel-event
  • camel-exec
  • camel-fastjson
  • camel-fhir
  • camel-fhir-api
  • camel-fhir-parent
  • camel-file
  • camel-file-watch
  • camel-flatpack
  • camel-flink
  • camel-flowable
  • camel-fop
  • camel-fory
  • camel-freemarker
  • camel-ftp
  • camel-ftp-common
  • camel-geocoder
  • camel-git
  • camel-github2
  • camel-google-bigquery
  • camel-google-calendar
  • camel-google-common
  • camel-google-drive
  • camel-google-firestore
  • camel-google-functions
  • camel-google-mail
  • camel-google-parent
  • camel-google-pubsub
  • camel-google-secret-manager
  • camel-google-sheets
  • camel-google-speech-to-text
  • camel-google-storage
  • camel-google-text-to-speech
  • camel-google-vertexai
  • camel-google-vision
  • camel-graphql
  • camel-grok
  • camel-groovy
  • camel-grpc
  • camel-gson
  • camel-hashicorp-vault
  • camel-hazelcast
  • camel-headersmap
  • camel-health
  • camel-hl7
  • camel-http
  • camel-http-base
  • camel-http-common
  • camel-huawei-parent
  • camel-huaweicloud-common
  • camel-huaweicloud-dms
  • camel-huaweicloud-frs
  • camel-huaweicloud-functiongraph
  • camel-huaweicloud-iam
  • camel-huaweicloud-imagerecognition
  • camel-huaweicloud-obs
  • camel-huaweicloud-smn
  • camel-huggingface
  • camel-ibm-cos
  • camel-ibm-parent
  • camel-ibm-secrets-manager
  • camel-ibm-watson-discovery
  • camel-ibm-watson-language
  • camel-ibm-watson-speech-to-text
  • camel-ibm-watson-text-to-speech
  • camel-ibm-watsonx-ai
  • camel-ibm-watsonx-data
  • camel-ical
  • camel-iec60870
  • camel-iggy
  • camel-ignite
  • camel-infinispan
  • camel-infinispan-common
  • camel-infinispan-embedded
  • camel-infinispan-parent
  • camel-influxdb
  • camel-influxdb2
  • camel-irc
  • camel-ironmq
  • camel-iso8583
  • camel-itest
  • camel-jackson
  • camel-jackson-avro
  • camel-jackson-protobuf
  • camel-jackson3
  • camel-jackson3-avro
  • camel-jackson3-protobuf
  • camel-jackson3xml
  • camel-jacksonxml
  • camel-jandex
  • camel-jasypt
  • camel-java-io
  • camel-java-joor-dsl
  • camel-javascript
  • camel-jaxb
  • camel-jbang-console
  • camel-jbang-core
  • camel-jbang-it
  • camel-jbang-main
  • camel-jbang-mcp
  • camel-jbang-parent
  • camel-jbang-plugin-edit
  • camel-jbang-plugin-generate
  • camel-jbang-plugin-kubernetes
  • camel-jbang-plugin-mcp
  • camel-jbang-plugin-route-parser
  • camel-jbang-plugin-test
  • camel-jbang-plugin-tui
  • camel-jbang-plugin-validate
  • camel-jcache
  • camel-jcr
  • camel-jdbc
  • camel-jetty
  • camel-jetty-common
  • camel-jfr
  • camel-jgroups
  • camel-jgroups-raft
  • camel-jira
  • camel-jms
  • camel-jmx
  • camel-jolt
  • camel-jooq
  • camel-joor
  • camel-jpa
  • camel-jq
  • camel-jsch
  • camel-jslt
  • camel-json-patch
  • camel-json-validator
  • camel-jsonapi
  • camel-jsonata
  • camel-jsonb
  • camel-jsonpath
  • camel-jsoup
  • camel-jt400
  • camel-jta
  • camel-jte
  • camel-kafka
  • camel-kamelet
  • camel-kamelet-main
  • camel-kamelet-main-support
  • camel-keycloak
  • camel-knative
  • camel-knative-api
  • camel-knative-http
  • camel-knative-parent
  • camel-kserve
  • camel-kubernetes
  • camel-kudu
  • camel-langchain4j-agent
  • camel-langchain4j-agent-api
  • camel-langchain4j-chat
  • camel-langchain4j-core
  • camel-langchain4j-embeddings
  • camel-langchain4j-embeddingstore
  • camel-langchain4j-embeddingstore-api
  • camel-langchain4j-tokenizer
  • camel-langchain4j-tools
  • camel-langchain4j-web-search
  • camel-language
  • camel-launcher
  • camel-launcher-container
  • camel-ldap
  • camel-ldif
  • camel-leveldb
  • camel-log
  • camel-lra
  • camel-lucene
  • camel-lumberjack
  • camel-lzf
  • camel-mail
  • camel-mail-microsoft-oauth
  • camel-main
  • camel-management
  • camel-management-api
  • camel-mapstruct
  • camel-master
  • camel-maven-plugin
  • camel-mdc
  • camel-metrics
  • camel-micrometer
  • camel-micrometer-observability
  • camel-micrometer-prometheus
  • camel-microprofile-config
  • camel-microprofile-fault-tolerance
  • camel-microprofile-health
  • camel-microprofile-parent
  • camel-milo
  • camel-milvus
  • camel-mina
  • camel-mina-sftp
  • camel-minio
  • camel-mllp
  • camel-mock
  • camel-mongodb
  • camel-mongodb-gridfs
  • camel-mustache
  • camel-mvel
  • camel-mybatis
  • camel-nats
  • camel-neo4j
  • camel-netty
  • camel-netty-http
  • camel-oaipmh
  • camel-oauth
  • camel-observability-services
  • camel-observation
  • camel-ocsf
  • camel-ognl
  • camel-olingo2
  • camel-olingo2-api
  • camel-olingo2-parent
  • camel-olingo4
  • camel-olingo4-api
  • camel-olingo4-parent
  • camel-once
  • camel-openai
  • camel-openapi-java
  • camel-openapi-rest-dsl-generator
  • camel-openapi-validator
  • camel-opensearch
  • camel-openstack
  • camel-opentelemetry
  • camel-opentelemetry-metrics
  • camel-opentelemetry2
  • camel-optaplanner
  • camel-package-maven-plugin
  • camel-paho
  • camel-paho-mqtt5
  • camel-parent
  • camel-parquet-avro
  • camel-pdf
  • camel-pg-replication-slot
  • camel-pgevent
  • camel-pgvector
  • camel-pinecone
  • camel-platform-http
  • camel-platform-http-jolokia
  • camel-platform-http-main
  • camel-platform-http-vertx
  • camel-plc4x
  • camel-pqc
  • camel-printer
  • camel-protobuf
  • camel-pubnub
  • camel-pulsar
  • camel-python
  • camel-qdrant
  • camel-quartz
  • camel-quickfix
  • camel-reactive-executor-tomcat
  • camel-reactive-executor-vertx
  • camel-reactive-streams
  • camel-reactor
  • camel-redis
  • camel-ref
  • camel-repackager-maven-plugin
  • camel-report-maven-plugin
  • camel-resilience4j
  • camel-resilience4j-micrometer
  • camel-resourceresolver-github
  • camel-rest
  • camel-rest-openapi
  • camel-restdsl-openapi-plugin
  • camel-robotframework
  • camel-rocketmq
  • camel-route-parser
  • camel-rss
  • camel-rxjava
  • camel-saga
  • camel-salesforce
  • camel-salesforce-codegen
  • camel-salesforce-maven-plugin
  • camel-salesforce-parent
  • camel-sap-netweaver
  • camel-saxon
  • camel-scheduler
  • camel-schematron
  • camel-seda
  • camel-servicenow
  • camel-servicenow-maven-plugin
  • camel-servicenow-parent
  • camel-servlet
  • camel-shell
  • camel-shiro
  • camel-sjms
  • camel-sjms2
  • camel-slack
  • camel-smb
  • camel-smooks
  • camel-smpp
  • camel-snakeyaml
  • camel-snmp
  • camel-soap
  • camel-solr
  • camel-splunk
  • camel-splunk-hec
  • camel-spring
  • camel-spring-ai-chat
  • camel-spring-ai-embeddings
  • camel-spring-ai-image
  • camel-spring-ai-parent
  • camel-spring-ai-tools
  • camel-spring-ai-vector-store
  • camel-spring-batch
  • camel-spring-cloud-config
  • camel-spring-jdbc
  • camel-spring-ldap
  • camel-spring-main
  • camel-spring-parent
  • camel-spring-rabbitmq
  • camel-spring-redis
  • camel-spring-security
  • camel-spring-ws
  • camel-spring-xml
  • camel-sql
  • camel-ssh
  • camel-stax
  • camel-stitch
  • camel-stream
  • camel-streamcaching-test
  • camel-stringtemplate
  • camel-stripe
  • camel-stub
  • camel-support
  • camel-swift
  • camel-syslog
  • camel-tahu
  • camel-tarfile
  • camel-telegram
  • camel-telemetry
  • camel-telemetry-dev
  • camel-tensorflow-serving
  • camel-test-infra-all
  • camel-test-infra-arangodb
  • camel-test-infra-artemis
  • camel-test-infra-aws-common
  • camel-test-infra-aws-v2
  • camel-test-infra-azure-common
  • camel-test-infra-azure-storage-blob
  • camel-test-infra-azure-storage-datalake
  • camel-test-infra-azure-storage-queue
  • camel-test-infra-cassandra
  • camel-test-infra-chatscript
  • camel-test-infra-cli
  • camel-test-infra-common
  • camel-test-infra-consul
  • camel-test-infra-core
  • camel-test-infra-couchbase
  • camel-test-infra-couchdb
  • camel-test-infra-dispatch-router
  • camel-test-infra-docling
  • camel-test-infra-elasticsearch
  • camel-test-infra-fhir
  • camel-test-infra-ftp
  • camel-test-infra-google-pubsub
  • camel-test-infra-hashicorp-vault
  • camel-test-infra-hazelcast
  • camel-test-infra-hivemq
  • camel-test-infra-ibmmq
  • camel-test-infra-iggy
  • camel-test-infra-ignite
  • camel-test-infra-infinispan
  • camel-test-infra-jaeger
  • camel-test-infra-jdbc
  • camel-test-infra-jetty
  • camel-test-infra-kafka
  • camel-test-infra-keycloak
  • camel-test-infra-mcp-everything
  • camel-test-infra-messaging-common
  • camel-test-infra-microprofile-lra
  • camel-test-infra-milvus
  • camel-test-infra-minio
  • camel-test-infra-mongodb
  • camel-test-infra-mosquitto
  • camel-test-infra-nats
  • camel-test-infra-neo4j
  • camel-test-infra-ollama
  • camel-test-infra-openai-mock
  • camel-test-infra-openldap
  • camel-test-infra-opensearch
  • camel-test-infra-parent
  • camel-test-infra-pinecone
  • camel-test-infra-postgres
  • camel-test-infra-pulsar
  • camel-test-infra-qdrant
  • camel-test-infra-rabbitmq
  • camel-test-infra-redis
  • camel-test-infra-rocketmq
  • camel-test-infra-smb
  • camel-test-infra-solr
  • camel-test-infra-tensorflow-serving
  • camel-test-infra-triton
  • camel-test-infra-weaviate
  • camel-test-infra-xmpp
  • camel-test-infra-zookeeper
  • camel-test-junit5
  • camel-test-junit6
  • camel-test-main-junit5
  • camel-test-main-junit6
  • camel-test-parent
  • camel-test-spring-junit5
  • camel-test-spring-junit6
  • camel-threadpoolfactory-vertx
  • camel-thrift
  • camel-thymeleaf
  • camel-tika
  • camel-timer
  • camel-tooling-maven
  • camel-tooling-model
  • camel-tooling-util
  • camel-tracing
  • camel-twilio
  • camel-twitter
  • camel-undertow
  • camel-undertow-spring-security
  • camel-univocity-parsers
  • camel-util
  • camel-util-json
  • camel-validator
  • camel-validator-test-resources
  • camel-velocity
  • camel-vertx
  • camel-vertx-common
  • camel-vertx-http
  • camel-vertx-parent
  • camel-vertx-websocket
  • camel-wal
  • camel-wasm
  • camel-weather
  • camel-weaviate
  • camel-web3j
  • camel-webhook
  • camel-whatsapp
  • camel-wordpress
  • camel-workday
  • camel-xchange
  • camel-xj
  • camel-xml-io
  • camel-xml-io-dsl
  • camel-xml-io-util
  • camel-xml-jaxb
  • camel-xml-jaxb-dsl
  • camel-xml-jaxb-dsl-test
  • camel-xml-jaxb-dsl-test-definition
  • camel-xml-jaxb-dsl-test-spring
  • camel-xml-jaxp
  • camel-xml-jaxp-util
  • camel-xmlsecurity
  • camel-xmpp
  • camel-xpath
  • camel-xslt
  • camel-xslt-saxon
  • camel-yaml-dsl
  • camel-yaml-dsl-common
  • camel-yaml-dsl-deserializers
  • camel-yaml-dsl-maven-plugin
  • camel-yaml-dsl-parent
  • camel-yaml-dsl-validator
  • camel-yaml-dsl-validator-maven-plugin
  • camel-yaml-io
  • camel-zeebe
  • camel-zendesk
  • camel-zip-deflater
  • camel-zipfile
  • camel-zookeeper
  • camel-zookeeper-master
  • catalog
  • components
  • core
  • coverage
  • docs
  • dsl
  • dummy-component
  • maven-plugins
  • spi-annotations
  • sync-properties-maven-plugin
  • test-infra
  • tests
  • tooling
  • tooling-parent
Modules only in current approach (76)
  • [ERROR]
  • [ERROR]
  • [ERROR] Command execution failed.
  • [ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:3.6.3:exec (default-cli) on project camel-package-maven-plugin: Command execution failed. Process exited with an error: 127 (Exit value: 127) -> [Help 1]
  • [ERROR] For more information about the errors and possible solutions, please read the following articles:
  • [ERROR] Re-run Maven using the -X switch to enable full debug logging.
  • [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
  • [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
  • at com.gradle.maven.cache.extension.c.a.a (SourceFile:46)
  • at com.gradle.maven.cache.extension.c.a.a (SourceFile:46)
  • at com.gradle.maven.cache.extension.c.b.a (SourceFile:62)
  • at com.gradle.maven.cache.extension.c.b.c (SourceFile:118)
  • at com.gradle.maven.cache.extension.c.c.a (SourceFile:26)
  • at com.gradle.maven.cache.extension.c.d.a (SourceFile:27)
  • at com.gradle.maven.cache.extension.c.g.a (SourceFile:27)
  • at com.gradle.maven.cache.extension.c.h$1.run (SourceFile:35)
  • at com.gradle.maven.cache.extension.c.h.a (SourceFile:31)
  • at com.gradle.maven.cache.extension.c.j.a (SourceFile:28)
  • at com.gradle.maven.cache.extension.c.m.a (SourceFile:80)
  • at com.gradle.maven.cache.extension.c.n.a (SourceFile:53)
  • at com.gradle.maven.cache.extension.c.o.a (SourceFile:18)
  • at com.gradle.maven.cache.extension.c.p.a (SourceFile:27)
  • at com.gradle.maven.cache.extension.c.q.a (SourceFile:23)
  • at com.gradle.maven.cache.extension.g.b.lambda$createProxy$0 (SourceFile:77)
  • at com.gradle.maven.scan.extension.internal.e.b.executeMojo (SourceFile:116)
  • at java.lang.reflect.Method.invoke (Method.java:569)
  • at java.lang.reflect.Method.invoke (Method.java:569)
  • at java.lang.reflect.Method.invoke (Method.java:569)
  • at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
  • at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
  • at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
  • at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
  • at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
  • at jdk.internal.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:77)
  • at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
  • at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
  • at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (Native Method)
  • at jdk.proxy5.$Proxy69.execute (Unknown Source)
  • at org.apache.commons.exec.DefaultExecutor.execute (DefaultExecutor.java:306)
  • at org.apache.commons.exec.DefaultExecutor.executeInternal (DefaultExecutor.java:408)
  • at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:173)
  • at org.apache.maven.DefaultMaven.doExecute (DefaultMaven.java:261)
  • at org.apache.maven.DefaultMaven.execute (DefaultMaven.java:101)
  • at org.apache.maven.cli.MavenCli.doMain (MavenCli.java:285)
  • at org.apache.maven.cli.MavenCli.execute (MavenCli.java:919)
  • at org.apache.maven.cli.MavenCli.main (MavenCli.java:207)
  • at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:105)
  • at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject (LifecycleModuleBuilder.java:73)
  • at org.apache.maven.lifecycle.internal.LifecycleStarter.execute (LifecycleStarter.java:118)
  • at org.apache.maven.lifecycle.internal.MojoExecutor$1.run (MojoExecutor.java:162)
  • at org.apache.maven.lifecycle.internal.MojoExecutor.access$000 (MojoExecutor.java:75)
  • at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute (MojoExecutor.java:316)
  • at org.apache.maven.lifecycle.internal.MojoExecutor.doExecute2 (MojoExecutor.java:328)
  • at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:159)
  • at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:174)
  • at org.apache.maven.lifecycle.internal.MojoExecutor.execute (MojoExecutor.java:212)
  • at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build (SingleThreadedBuilder.java:53)
  • at org.apache.maven.plugin.DefaultMojosExecutionStrategy.execute (DefaultMojosExecutionStrategy.java:39)
  • at org.apache.maven.wrapper.BootstrapMainStarter.start (BootstrapMainStarter.java:52)
  • at org.apache.maven.wrapper.MavenWrapperMain.main (MavenWrapperMain.java:73)
  • at org.apache.maven.wrapper.WrapperExecutor.execute (WrapperExecutor.java:161)
  • at org.codehaus.mojo.exec.ExecMojo.execute (ExecMojo.java:464)
  • at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:873)
  • at org.codehaus.mojo.exec.ExecMojo.executeCommandLine (ExecMojo.java:913)
  • at org.codehaus.plexus.classworlds.launcher.Launcher.launch (Launcher.java:201)
  • at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced (Launcher.java:255)
  • at org.codehaus.plexus.classworlds.launcher.Launcher.main (Launcher.java:314)
  • at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode (Launcher.java:362)
  • at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute (SourceFile:27)
  • at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute (SourceFile:30)
  • at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute (SourceFile:60)
  • at org.gradle.internal.operations.DefaultBuildOperationRunner$2.execute (SourceFile:67)
  • at org.gradle.internal.operations.DefaultBuildOperationRunner.execute (SourceFile:167)
  • at org.gradle.internal.operations.DefaultBuildOperationRunner.execute (SourceFile:60)
  • at org.gradle.internal.operations.DefaultBuildOperationRunner.run (SourceFile:48)
  • org.apache.commons.exec.ExecuteException: Process exited with an error: 127 (Exit value: 127)

Changed managed dependencies: org.apache.camel:camel-ai-tool

Skip-tests mode would test 651 modules (11 direct + 640 downstream), skip tests for 23 (generated code, meta-modules)

Modules Scalpel would test (651)
  • archetypes
  • bom-generator
  • bom-generator-maven-plugin
  • bundles-pom
  • camel
  • camel-a2a
  • camel-activemq
  • camel-activemq6
  • camel-ai-parent
  • camel-ai-tool
  • camel-allcomponents
  • camel-amqp
  • camel-api
  • camel-api-component-maven-plugin
  • camel-arangodb
  • camel-archetype-api-component
  • camel-archetype-component
  • camel-archetype-dataformat
  • camel-archetype-java
  • camel-archetype-main
  • camel-archetype-spring
  • camel-as2
  • camel-as2-api
  • camel-as2-parent
  • camel-asn1
  • camel-asterisk
  • camel-atmosphere-websocket
  • camel-atom
  • camel-attachments
  • camel-avro
  • camel-avro-rpc
  • camel-avro-rpc-jetty
  • camel-avro-rpc-parent
  • camel-avro-rpc-spi
  • camel-aws-bedrock
  • camel-aws-cloudtrail
  • camel-aws-common
  • camel-aws-config
  • camel-aws-parameter-store
  • camel-aws-parent
  • camel-aws-secrets-manager
  • camel-aws-security-hub
  • camel-aws2-athena
  • camel-aws2-comprehend
  • camel-aws2-cw
  • camel-aws2-ddb
  • camel-aws2-ec2
  • camel-aws2-ecs
  • camel-aws2-eks
  • camel-aws2-eventbridge
  • camel-aws2-iam
  • camel-aws2-kinesis
  • camel-aws2-kms
  • camel-aws2-lambda
  • camel-aws2-mq
  • camel-aws2-msk
  • camel-aws2-polly
  • camel-aws2-redshift
  • camel-aws2-rekognition
  • camel-aws2-s3
  • camel-aws2-s3-vectors
  • camel-aws2-ses
  • camel-aws2-sns
  • camel-aws2-sqs
  • camel-aws2-step-functions
  • camel-aws2-sts
  • camel-aws2-textract
  • camel-aws2-timestream
  • camel-aws2-transcribe
  • camel-aws2-translate
  • camel-azure-common
  • camel-azure-cosmosdb
  • camel-azure-eventgrid
  • camel-azure-eventhubs
  • camel-azure-files
  • camel-azure-functions
  • camel-azure-key-vault
  • camel-azure-parent
  • camel-azure-schema-registry
  • camel-azure-servicebus
  • camel-azure-storage-blob
  • camel-azure-storage-datalake
  • camel-azure-storage-queue
  • camel-barcode
  • camel-base
  • camel-base-engine
  • camel-base64
  • camel-bean
  • camel-bean-validator
  • camel-beanio
  • camel-bindy
  • camel-bom
  • camel-bonita
  • camel-box
  • camel-box-api
  • camel-box-parent
  • camel-braintree
  • camel-browse
  • camel-buildtools
  • camel-caffeine
  • camel-camunda
  • camel-cassandraql
  • camel-catalog
  • camel-catalog-common
  • camel-cbor
  • camel-chatscript
  • camel-chunk
  • camel-cli-connector
  • camel-cli-debug
  • camel-clickup
  • camel-cloudevents
  • camel-cluster
  • camel-cm-sms
  • camel-coap
  • camel-cometd
  • camel-component-maven-plugin
  • camel-componentdsl
  • camel-console
  • camel-consul
  • camel-controlbus
  • camel-core
  • camel-core-all
  • camel-core-catalog
  • camel-core-engine
  • camel-core-languages
  • camel-core-model
  • camel-core-processor
  • camel-core-reifier
  • camel-core-xml
  • camel-couchbase
  • camel-couchdb
  • camel-cron
  • camel-crypto
  • camel-crypto-pgp
  • camel-csimple-joor
  • camel-csv
  • camel-cxf-common
  • camel-cxf-parent
  • camel-cxf-rest
  • camel-cxf-soap
  • camel-cxf-spring-common
  • camel-cxf-spring-rest
  • camel-cxf-spring-soap
  • camel-cxf-spring-transport
  • camel-cxf-transport
  • camel-cyberark-vault
  • camel-dapr
  • camel-dataformat
  • camel-dataset
  • camel-datasonnet
  • camel-debezium-common
  • camel-debezium-common-parent
  • camel-debezium-db2
  • camel-debezium-maven-plugin
  • camel-debezium-mongodb
  • camel-debezium-mysql
  • camel-debezium-oracle
  • camel-debezium-parent
  • camel-debezium-postgres
  • camel-debezium-sqlserver
  • camel-debug
  • camel-dependencies
  • camel-dfdl
  • camel-dhis2
  • camel-dhis2-api
  • camel-dhis2-parent
  • camel-diagram
  • camel-digitalocean
  • camel-direct
  • camel-disruptor
  • camel-djl
  • camel-dns
  • camel-docker
  • camel-docling
  • camel-drill
  • camel-dropbox
  • camel-dsl-modeline
  • camel-dsl-support
  • camel-dynamic-router
  • camel-ehcache
  • camel-eip-documentation-enricher-maven-plugin
  • camel-elasticsearch
  • camel-elasticsearch-rest-client
  • camel-endpointdsl
  • camel-enforcer-rules
  • camel-etc
  • camel-event
  • camel-exec
  • camel-fastjson
  • camel-fhir
  • camel-fhir-api
  • camel-fhir-parent
  • camel-file
  • camel-file-watch
  • camel-flatpack
  • camel-flink
  • camel-flowable
  • camel-fop
  • camel-fory
  • camel-freemarker
  • camel-ftp
  • camel-ftp-common
  • camel-geocoder
  • camel-git
  • camel-github2
  • camel-google-bigquery
  • camel-google-calendar
  • camel-google-common
  • camel-google-drive
  • camel-google-firestore
  • camel-google-functions
  • camel-google-mail
  • camel-google-parent
  • camel-google-pubsub
  • camel-google-secret-manager
  • camel-google-sheets
  • camel-google-speech-to-text
  • camel-google-storage
  • camel-google-text-to-speech
  • camel-google-vertexai
  • camel-google-vision
  • camel-graphql
  • camel-grok
  • camel-groovy
  • camel-grpc
  • camel-gson
  • camel-hashicorp-vault
  • camel-hazelcast
  • camel-headersmap
  • camel-health
  • camel-hl7
  • camel-http
  • camel-http-base
  • camel-http-common
  • camel-huawei-parent
  • camel-huaweicloud-common
  • camel-huaweicloud-dms
  • camel-huaweicloud-frs
  • camel-huaweicloud-functiongraph
  • camel-huaweicloud-iam
  • camel-huaweicloud-imagerecognition
  • camel-huaweicloud-obs
  • camel-huaweicloud-smn
  • camel-huggingface
  • camel-ibm-cos
  • camel-ibm-parent
  • camel-ibm-secrets-manager
  • camel-ibm-watson-discovery
  • camel-ibm-watson-language
  • camel-ibm-watson-speech-to-text
  • camel-ibm-watson-text-to-speech
  • camel-ibm-watsonx-ai
  • camel-ibm-watsonx-data
  • camel-ical
  • camel-iec60870
  • camel-iggy
  • camel-ignite
  • camel-infinispan
  • camel-infinispan-common
  • camel-infinispan-embedded
  • camel-infinispan-parent
  • camel-influxdb
  • camel-influxdb2
  • camel-irc
  • camel-ironmq
  • camel-iso8583
  • camel-jackson
  • camel-jackson-avro
  • camel-jackson-protobuf
  • camel-jackson3
  • camel-jackson3-avro
  • camel-jackson3-protobuf
  • camel-jackson3xml
  • camel-jacksonxml
  • camel-jandex
  • camel-jasypt
  • camel-java-io
  • camel-java-joor-dsl
  • camel-javascript
  • camel-jaxb
  • camel-jbang-console
  • camel-jbang-mcp
  • camel-jbang-parent
  • camel-jbang-plugin-mcp
  • camel-jbang-plugin-route-parser
  • camel-jbang-plugin-tui
  • camel-jbang-plugin-validate
  • camel-jcache
  • camel-jcr
  • camel-jdbc
  • camel-jetty
  • camel-jetty-common
  • camel-jfr
  • camel-jgroups
  • camel-jgroups-raft
  • camel-jira
  • camel-jms
  • camel-jmx
  • camel-jolt
  • camel-jooq
  • camel-joor
  • camel-jpa
  • camel-jq
  • camel-jsch
  • camel-jslt
  • camel-json-patch
  • camel-json-validator
  • camel-jsonapi
  • camel-jsonata
  • camel-jsonb
  • camel-jsonpath
  • camel-jsoup
  • camel-jt400
  • camel-jta
  • camel-jte
  • camel-kafka
  • camel-kamelet
  • camel-kamelet-main
  • camel-kamelet-main-support
  • camel-keycloak
  • camel-knative
  • camel-knative-api
  • camel-knative-http
  • camel-knative-parent
  • camel-kserve
  • camel-kubernetes
  • camel-kudu
  • camel-langchain4j-agent
  • camel-langchain4j-agent-api
  • camel-langchain4j-chat
  • camel-langchain4j-core
  • camel-langchain4j-embeddings
  • camel-langchain4j-embeddingstore
  • camel-langchain4j-embeddingstore-api
  • camel-langchain4j-tokenizer
  • camel-langchain4j-tools
  • camel-langchain4j-web-search
  • camel-language
  • camel-launcher-container
  • camel-ldap
  • camel-ldif
  • camel-leveldb
  • camel-log
  • camel-lra
  • camel-lucene
  • camel-lumberjack
  • camel-lzf
  • camel-mail
  • camel-mail-microsoft-oauth
  • camel-main
  • camel-management
  • camel-management-api
  • camel-mapstruct
  • camel-master
  • camel-maven-plugin
  • camel-mdc
  • camel-metrics
  • camel-micrometer
  • camel-micrometer-observability
  • camel-micrometer-prometheus
  • camel-microprofile-config
  • camel-microprofile-fault-tolerance
  • camel-microprofile-health
  • camel-microprofile-parent
  • camel-milo
  • camel-milvus
  • camel-mina
  • camel-mina-sftp
  • camel-minio
  • camel-mllp
  • camel-mock
  • camel-mongodb
  • camel-mongodb-gridfs
  • camel-mustache
  • camel-mvel
  • camel-mybatis
  • camel-nats
  • camel-neo4j
  • camel-netty
  • camel-netty-http
  • camel-oaipmh
  • camel-oauth
  • camel-observability-services
  • camel-observation
  • camel-ocsf
  • camel-ognl
  • camel-olingo2
  • camel-olingo2-api
  • camel-olingo2-parent
  • camel-olingo4
  • camel-olingo4-api
  • camel-olingo4-parent
  • camel-once
  • camel-openai
  • camel-openapi-java
  • camel-openapi-rest-dsl-generator
  • camel-openapi-validator
  • camel-opensearch
  • camel-openstack
  • camel-opentelemetry
  • camel-opentelemetry-metrics
  • camel-opentelemetry2
  • camel-optaplanner
  • camel-package-maven-plugin
  • camel-paho
  • camel-paho-mqtt5
  • camel-parent
  • camel-parquet-avro
  • camel-pdf
  • camel-pg-replication-slot
  • camel-pgevent
  • camel-pgvector
  • camel-pinecone
  • camel-platform-http
  • camel-platform-http-jolokia
  • camel-platform-http-main
  • camel-platform-http-vertx
  • camel-plc4x
  • camel-pqc
  • camel-printer
  • camel-protobuf
  • camel-pubnub
  • camel-pulsar
  • camel-python
  • camel-qdrant
  • camel-quartz
  • camel-quickfix
  • camel-reactive-executor-tomcat
  • camel-reactive-executor-vertx
  • camel-reactive-streams
  • camel-reactor
  • camel-redis
  • camel-ref
  • camel-repackager-maven-plugin
  • camel-resilience4j
  • camel-resilience4j-micrometer
  • camel-resourceresolver-github
  • camel-rest
  • camel-rest-openapi
  • camel-restdsl-openapi-plugin
  • camel-robotframework
  • camel-rocketmq
  • camel-rss
  • camel-rxjava
  • camel-saga
  • camel-salesforce
  • camel-salesforce-codegen
  • camel-salesforce-maven-plugin
  • camel-salesforce-parent
  • camel-sap-netweaver
  • camel-saxon
  • camel-scheduler
  • camel-schematron
  • camel-seda
  • camel-servicenow
  • camel-servicenow-maven-plugin
  • camel-servicenow-parent
  • camel-servlet
  • camel-shell
  • camel-shiro
  • camel-sjms
  • camel-sjms2
  • camel-slack
  • camel-smb
  • camel-smooks
  • camel-smpp
  • camel-snakeyaml
  • camel-snmp
  • camel-soap
  • camel-solr
  • camel-splunk
  • camel-splunk-hec
  • camel-spring
  • camel-spring-ai-chat
  • camel-spring-ai-embeddings
  • camel-spring-ai-image
  • camel-spring-ai-parent
  • camel-spring-ai-tools
  • camel-spring-ai-vector-store
  • camel-spring-batch
  • camel-spring-cloud-config
  • camel-spring-jdbc
  • camel-spring-ldap
  • camel-spring-main
  • camel-spring-parent
  • camel-spring-rabbitmq
  • camel-spring-redis
  • camel-spring-security
  • camel-spring-ws
  • camel-spring-xml
  • camel-sql
  • camel-ssh
  • camel-stax
  • camel-stitch
  • camel-stream
  • camel-streamcaching-test
  • camel-stringtemplate
  • camel-stripe
  • camel-stub
  • camel-support
  • camel-swift
  • camel-syslog
  • camel-tahu
  • camel-tarfile
  • camel-telegram
  • camel-telemetry
  • camel-telemetry-dev
  • camel-tensorflow-serving
  • camel-test-infra-all
  • camel-test-infra-arangodb
  • camel-test-infra-artemis
  • camel-test-infra-aws-common
  • camel-test-infra-aws-v2
  • camel-test-infra-azure-common
  • camel-test-infra-azure-storage-blob
  • camel-test-infra-azure-storage-datalake
  • camel-test-infra-azure-storage-queue
  • camel-test-infra-cassandra
  • camel-test-infra-chatscript
  • camel-test-infra-cli
  • camel-test-infra-common
  • camel-test-infra-consul
  • camel-test-infra-core
  • camel-test-infra-couchbase
  • camel-test-infra-couchdb
  • camel-test-infra-dispatch-router
  • camel-test-infra-docling
  • camel-test-infra-elasticsearch
  • camel-test-infra-fhir
  • camel-test-infra-ftp
  • camel-test-infra-google-pubsub
  • camel-test-infra-hashicorp-vault
  • camel-test-infra-hazelcast
  • camel-test-infra-hivemq
  • camel-test-infra-ibmmq
  • camel-test-infra-iggy
  • camel-test-infra-ignite
  • camel-test-infra-infinispan
  • camel-test-infra-jaeger
  • camel-test-infra-jdbc
  • camel-test-infra-jetty
  • camel-test-infra-kafka
  • camel-test-infra-keycloak
  • camel-test-infra-mcp-everything
  • camel-test-infra-messaging-common
  • camel-test-infra-microprofile-lra
  • camel-test-infra-milvus
  • camel-test-infra-minio
  • camel-test-infra-mongodb
  • camel-test-infra-mosquitto
  • camel-test-infra-nats
  • camel-test-infra-neo4j
  • camel-test-infra-ollama
  • camel-test-infra-openai-mock
  • camel-test-infra-openldap
  • camel-test-infra-opensearch
  • camel-test-infra-parent
  • camel-test-infra-pinecone
  • camel-test-infra-postgres
  • camel-test-infra-pulsar
  • camel-test-infra-qdrant
  • camel-test-infra-rabbitmq
  • camel-test-infra-redis
  • camel-test-infra-rocketmq
  • camel-test-infra-smb
  • camel-test-infra-solr
  • camel-test-infra-tensorflow-serving
  • camel-test-infra-triton
  • camel-test-infra-weaviate
  • camel-test-infra-xmpp
  • camel-test-infra-zookeeper
  • camel-test-junit5
  • camel-test-junit6
  • camel-test-main-junit5
  • camel-test-main-junit6
  • camel-test-parent
  • camel-test-spring-junit5
  • camel-test-spring-junit6
  • camel-threadpoolfactory-vertx
  • camel-thrift
  • camel-thymeleaf
  • camel-tika
  • camel-timer
  • camel-tooling-maven
  • camel-tooling-model
  • camel-tooling-util
  • camel-tracing
  • camel-twilio
  • camel-twitter
  • camel-undertow
  • camel-undertow-spring-security
  • camel-univocity-parsers
  • camel-util
  • camel-util-json
  • camel-validator
  • camel-validator-test-resources
  • camel-velocity
  • camel-vertx
  • camel-vertx-common
  • camel-vertx-http
  • camel-vertx-parent
  • camel-vertx-websocket
  • camel-wal
  • camel-wasm
  • camel-weather
  • camel-weaviate
  • camel-web3j
  • camel-webhook
  • camel-whatsapp
  • camel-wordpress
  • camel-workday
  • camel-xchange
  • camel-xj
  • camel-xml-io
  • camel-xml-io-dsl
  • camel-xml-io-util
  • camel-xml-jaxb
  • camel-xml-jaxb-dsl
  • camel-xml-jaxb-dsl-test
  • camel-xml-jaxb-dsl-test-definition
  • camel-xml-jaxb-dsl-test-spring
  • camel-xml-jaxp
  • camel-xml-jaxp-util
  • camel-xmlsecurity
  • camel-xmpp
  • camel-xpath
  • camel-xslt
  • camel-xslt-saxon
  • camel-yaml-dsl-common
  • camel-yaml-dsl-parent
  • camel-yaml-dsl-validator
  • camel-yaml-dsl-validator-maven-plugin
  • camel-yaml-io
  • camel-zeebe
  • camel-zendesk
  • camel-zip-deflater
  • camel-zipfile
  • camel-zookeeper
  • camel-zookeeper-master
  • catalog
  • components
  • core
  • docs
  • dsl
  • maven-plugins
  • spi-annotations
  • sync-properties-maven-plugin
  • test-infra
  • tests
  • tooling
  • tooling-parent
Modules with tests skipped (23)
  • apache-camel
  • camel-catalog-console
  • camel-catalog-lucene
  • camel-catalog-maven
  • camel-catalog-suggest
  • camel-csimple-maven-plugin
  • 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-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:

  • components/camel-ai: 37 test(s) disabled on GitHub Actions
Build reactor — dependencies compiled but only changed modules were tested (671 modules)
  • Camel :: AI :: A2A
  • Camel :: AI :: ChatScript
  • Camel :: AI :: Deep Java Library
  • Camel :: AI :: Docling
  • Camel :: AI :: Hugging Face
  • Camel :: AI :: KServe
  • Camel :: AI :: LangChain4j :: Agent
  • Camel :: AI :: LangChain4j :: Agent :: API
  • Camel :: AI :: LangChain4j :: Chat
  • Camel :: AI :: LangChain4j :: Core
  • Camel :: AI :: LangChain4j :: Embedding
  • Camel :: AI :: LangChain4j :: Embedding Store :: API
  • Camel :: AI :: LangChain4j :: EmbeddingStore
  • Camel :: AI :: LangChain4j :: Tokenizer
  • Camel :: AI :: LangChain4j :: Tools
  • Camel :: AI :: LangChain4j :: Web Search
  • Camel :: AI :: Milvus
  • Camel :: AI :: Neo4j
  • Camel :: AI :: OpenAI
  • Camel :: AI :: PGVector
  • Camel :: AI :: Parent
  • Camel :: AI :: Pinecone
  • Camel :: AI :: Qdrant
  • Camel :: AI :: TensorFlow Serving
  • Camel :: AI :: Tool
  • Camel :: AI :: Weaviate
  • Camel :: AMQP
  • Camel :: API
  • Camel :: AS2 :: API
  • Camel :: AS2 :: Component
  • Camel :: AS2 :: Parent
  • Camel :: ASN.1
  • Camel :: AWS :: Common
  • Camel :: AWS :: Parent
  • Camel :: AWS CloudTrail
  • Camel :: AWS Config
  • Camel :: AWS Redshift Data
  • Camel :: AWS Rekognition
  • Camel :: AWS Security Hub
  • Camel :: AWS Step Functions
  • Camel :: AWS Timestream
  • Camel :: AWS2 :: Transcribe
  • Camel :: AWS2 Athena
  • Camel :: AWS2 Bedrock
  • Camel :: AWS2 CW
  • Camel :: AWS2 Comprehend
  • Camel :: AWS2 DDB
  • Camel :: AWS2 EC2
  • Camel :: AWS2 ECS
  • Camel :: AWS2 EKS
  • Camel :: AWS2 Eventbridge
  • Camel :: AWS2 IAM
  • Camel :: AWS2 KMS
  • Camel :: AWS2 Kinesis
  • Camel :: AWS2 Lambda
  • Camel :: AWS2 MQ
  • Camel :: AWS2 MSK
  • Camel :: AWS2 Parameter Store
  • Camel :: AWS2 Polly
  • Camel :: AWS2 S3
  • Camel :: AWS2 S3 Vectors
  • Camel :: AWS2 SES
  • Camel :: AWS2 SNS
  • Camel :: AWS2 SQS
  • Camel :: AWS2 STS
  • Camel :: AWS2 Secrets Manager
  • Camel :: AWS2 Textract
  • Camel :: AWS2 Translate
  • Camel :: ActiveMQ 5.x
  • Camel :: ActiveMQ 6.x
  • Camel :: All Components Sync point
  • Camel :: All Core Sync point
  • Camel :: ArangoDB
  • Camel :: Archetypes
  • Camel :: Archetypes :: API Component
  • Camel :: Archetypes :: Component
  • Camel :: Archetypes :: Data Format
  • Camel :: Archetypes :: Java Router
  • Camel :: Archetypes :: Main
  • Camel :: Archetypes :: Spring XML Based Router (deprecated)
  • Camel :: Assembly
  • Camel :: Asterisk
  • Camel :: Atmosphere WebSocket Servlet
  • Camel :: Atom
  • Camel :: Attachments
  • Camel :: Avro
  • Camel :: Avro RPC
  • Camel :: Avro RPC :: Jetty
  • Camel :: Avro RPC :: Parent
  • Camel :: Avro RPC :: Spi
  • Camel :: Azure :: Common
  • Camel :: Azure :: CosmosDB
  • Camel :: Azure :: Event Grid
  • Camel :: Azure :: Event Hubs
  • Camel :: Azure :: Files
  • Camel :: Azure :: Functions
  • Camel :: Azure :: Key Vault
  • Camel :: Azure :: Parent
  • Camel :: Azure :: Schema Registry
  • Camel :: Azure :: ServiceBus
  • Camel :: Azure :: Storage Blob
  • Camel :: Azure :: Storage Datalake
  • Camel :: Azure :: Storage Queue
  • Camel :: BOM
  • Camel :: BOM :: Generator
  • Camel :: Barcode
  • Camel :: Base
  • Camel :: Base Engine
  • Camel :: Base64
  • Camel :: Bean
  • Camel :: Bean validator
  • Camel :: BeanIO
  • Camel :: Bindy
  • Camel :: Bonita
  • Camel :: Box :: API
  • Camel :: Box :: Component
  • Camel :: Box :: Parent
  • Camel :: Braintree
  • Camel :: Browse
  • Camel :: Buildtools
  • Camel :: CBOR
  • Camel :: CM SMS
  • Camel :: CSV
  • Camel :: CXF :: Common
  • Camel :: CXF :: Common :: Spring
  • Camel :: CXF :: Parent
  • Camel :: CXF :: REST
  • Camel :: CXF :: REST :: Spring
  • Camel :: CXF :: SOAP
  • Camel :: CXF :: SOAP :: Spring
  • Camel :: CXF :: Transport
  • Camel :: CXF :: Transport :: Spring
  • Camel :: Caffeine
  • Camel :: Camunda
  • Camel :: Cassandra CQL
  • Camel :: Catalog
  • Camel :: Catalog :: CSimple Maven Plugin (deprecated)
  • Camel :: Catalog :: Camel Catalog
  • Camel :: Catalog :: Camel Report Maven Plugin
  • Camel :: Catalog :: Camel Route Parser
  • Camel :: Catalog :: Common
  • Camel :: Catalog :: Console
  • Camel :: Catalog :: Dummy Component
  • Camel :: Catalog :: Lucene (deprecated)
  • Camel :: Catalog :: Maven
  • Camel :: Catalog :: Suggest
  • Camel :: Chunk
  • Camel :: ClickUp
  • Camel :: CloudEvents
  • Camel :: Cluster
  • Camel :: CoAP
  • Camel :: Cometd
  • Camel :: Common Telemetry
  • Camel :: Common Tracing (deprecated)
  • Camel :: Component DSL
  • Camel :: Components
  • Camel :: Console
  • Camel :: Consul
  • Camel :: Controlbus
  • Camel :: Core
  • Camel :: Core Catalog
  • Camel :: Core Engine
  • Camel :: Core Languages
  • Camel :: Core Model
  • Camel :: Core Modules
  • Camel :: Core Processor
  • Camel :: Core Reifier
  • Camel :: Core XML
  • Camel :: CouchDB
  • Camel :: Couchbase
  • Camel :: Coverage
  • Camel :: Cron
  • Camel :: Crypto
  • Camel :: Crypto PGP
  • Camel :: CyberArk Vault
  • Camel :: DFDL
  • Camel :: DHIS2
  • Camel :: DHIS2 :: Parent
  • Camel :: DHIS2 API
  • Camel :: DNS
  • Camel :: DSL :: CLI Connector
  • Camel :: DSL :: CLI Debug
  • Camel :: DSL :: Modeline
  • Camel :: DSL :: Parent
  • Camel :: DSL :: Support
  • Camel :: Dapr
  • Camel :: DataSet
  • Camel :: DataSonnet
  • Camel :: Dataformat
  • Camel :: Debezium :: Common
  • Camel :: Debezium :: Common :: Parent
  • Camel :: Debezium :: DB2
  • Camel :: Debezium :: Maven Plugin
  • Camel :: Debezium :: MongoDB
  • Camel :: Debezium :: MySQL
  • Camel :: Debezium :: Oracle
  • Camel :: Debezium :: Parent
  • Camel :: Debezium :: PostgreSQL
  • Camel :: Debezium :: SQL Server
  • Camel :: Debugging
  • Camel :: Dependencies
  • Camel :: Diagram
  • Camel :: DigitalOcean (deprecated)
  • Camel :: Direct
  • Camel :: Disruptor
  • Camel :: Docker
  • Camel :: Docs
  • Camel :: Drill
  • Camel :: Dropbox
  • Camel :: Dynamic Router
  • Camel :: Ehcache
  • Camel :: ElasticSearch Rest Client
  • Camel :: Elasticsearch Java API Client
  • Camel :: Endpoint DSL
  • Camel :: Endpoint DSL :: Support
  • Camel :: Enforcer rules
  • Camel :: Etc
  • Camel :: Event
  • Camel :: Exec
  • Camel :: FHIR
  • Camel :: FHIR :: API
  • Camel :: FHIR :: Parent
  • Camel :: FOP
  • Camel :: FTP
  • Camel :: FTP Common
  • Camel :: Fastjson
  • Camel :: File
  • Camel :: File Watch
  • Camel :: FlatPack
  • Camel :: Flink
  • Camel :: Flowable
  • Camel :: Fory
  • Camel :: Freemarker
  • Camel :: Geocoder
  • Camel :: Git
  • Camel :: GitHub2
  • Camel :: Google :: BigQuery
  • Camel :: Google :: Calendar
  • Camel :: Google :: Common
  • Camel :: Google :: Drive
  • Camel :: Google :: Firestore
  • Camel :: Google :: Functions
  • Camel :: Google :: Mail
  • Camel :: Google :: Parent
  • Camel :: Google :: PubSub
  • Camel :: Google :: Secret Manager
  • Camel :: Google :: Sheets
  • Camel :: Google :: Speech To Text
  • Camel :: Google :: Storage
  • Camel :: Google :: Text To Speech
  • Camel :: Google :: Vertex AI
  • Camel :: Google :: Vision
  • Camel :: GraphQL
  • Camel :: Grok
  • Camel :: Groovy
  • Camel :: Gson
  • Camel :: HL7
  • Camel :: HTTP
  • Camel :: HTTP :: Base
  • Camel :: HTTP :: Common
  • Camel :: HashiCorp :: Key Vault
  • Camel :: HazelCast
  • Camel :: Headers Map (deprecated)
  • Camel :: Health
  • Camel :: Huawei Cloud :: Common
  • Camel :: Huawei Cloud :: DMS
  • Camel :: Huawei Cloud :: FaceRecognition
  • Camel :: Huawei Cloud :: FunctionGraph
  • Camel :: Huawei Cloud :: IAM
  • Camel :: Huawei Cloud :: ImageRecognition
  • Camel :: Huawei Cloud :: OBS
  • Camel :: Huawei Cloud :: Parent
  • Camel :: Huawei Cloud :: SimpleNotification
  • Camel :: IBM :: Cloud Object Storage
  • Camel :: IBM :: Parent
  • Camel :: IBM :: Secrets Manager
  • Camel :: IBM :: Watson Discovery
  • Camel :: IBM :: Watson Language
  • Camel :: IBM :: Watson Speech to Text
  • Camel :: IBM :: Watson Text to Speech
  • Camel :: IBM :: watsonx.ai
  • Camel :: IBM :: watsonx.data
  • Camel :: IEC 60870 (deprecated)
  • Camel :: IRC (deprecated)
  • Camel :: ISO-8583
  • Camel :: Iggy
  • Camel :: Ignite
  • Camel :: Infinispan :: Common
  • Camel :: Infinispan :: Embedded
  • Camel :: Infinispan :: Parent
  • Camel :: Infinispan :: Remote
  • Camel :: InfluxDB
  • Camel :: InfluxDB2
  • Camel :: Integration Tests
  • Camel :: Integration Tests :: Stream Caching Tests
  • Camel :: Integration Tests :: Test Bundles
  • Camel :: Integration Tests :: Validator Resources
  • Camel :: IronMQ
  • Camel :: JAXB
  • Camel :: JBang :: Console
  • Camel :: JBang :: Core
  • Camel :: JBang :: Integration tests
  • Camel :: JBang :: MCP
  • Camel :: JBang :: Main
  • Camel :: JBang :: Parent
  • Camel :: JBang :: Plugin :: Edit
  • Camel :: JBang :: Plugin :: Generate
  • Camel :: JBang :: Plugin :: Kubernetes
  • Camel :: JBang :: Plugin :: MCP
  • Camel :: JBang :: Plugin :: Route Parser
  • Camel :: JBang :: Plugin :: TUI
  • Camel :: JBang :: Plugin :: Testing
  • Camel :: JBang :: Plugin :: Validate
  • Camel :: JCR
  • Camel :: JCache
  • Camel :: JDBC
  • Camel :: JGroups
  • Camel :: JGroups Raft
  • Camel :: JIRA
  • Camel :: JMS
  • Camel :: JMX
  • Camel :: JOOQ
  • Camel :: JPA
  • Camel :: JQ
  • Camel :: JSON validator
  • Camel :: JSON-B
  • Camel :: JSONATA
  • Camel :: JSon Path
  • Camel :: JSonApi
  • Camel :: JSoup
  • Camel :: JTA
  • Camel :: Jackson
  • Camel :: Jackson 3
  • Camel :: Jackson 3 Avro
  • Camel :: Jackson 3 Protobuf
  • Camel :: Jackson 3 XML
  • Camel :: Jackson Avro
  • Camel :: Jackson Protobuf
  • Camel :: Jackson XML
  • Camel :: Jandex
  • Camel :: Jasypt
  • Camel :: Java DSL IO
  • Camel :: Java DSL with jOOR
  • Camel :: Java Flight Recorder
  • Camel :: Java Template Engine
  • Camel :: Java Toolbox for IBM i
  • Camel :: JavaScript
  • Camel :: Jetty
  • Camel :: Jetty :: Common
  • Camel :: Jolt
  • Camel :: Jsch
  • Camel :: Jslt
  • Camel :: JsonPatch (deprecated)
  • Camel :: Kafka
  • Camel :: Kamelet
  • Camel :: Kamelet Main
  • Camel :: Kamelet Main :: Support
  • Camel :: Keycloak
  • Camel :: Knative :: Parent
  • Camel :: Knative API
  • Camel :: Knative Component
  • Camel :: Knative HTTP
  • Camel :: Kubernetes
  • Camel :: Kudu
  • Camel :: LDAP
  • Camel :: LDIF
  • Camel :: LZF
  • Camel :: Language
  • Camel :: Launcher
  • Camel :: Launcher :: Container
  • Camel :: LevelDB (deprecated)
  • Camel :: Log
  • Camel :: Long-Running-Action
  • Camel :: Lucene
  • Camel :: Lumberjack
  • Camel :: MDC
  • Camel :: MINA
  • Camel :: MINA SFTP
  • Camel :: MLLP
  • Camel :: MVEL
  • Camel :: Mail
  • Camel :: Mail :: Microsoft OAuth
  • Camel :: Main
  • Camel :: Management
  • Camel :: Management API
  • Camel :: MapStruct
  • Camel :: Master
  • Camel :: Maven Plugins
  • Camel :: Maven Plugins :: BOM Generator
  • Camel :: Maven Plugins :: Camel API Component Plugin
  • Camel :: Maven Plugins :: Camel Maven Component
  • Camel :: Maven Plugins :: Camel Maven Package
  • Camel :: Maven Plugins :: Camel Maven Plugin
  • Camel :: Maven Plugins :: OpenApi REST DSL Generator
  • Camel :: Maven Plugins :: Repackager
  • Camel :: Maven Plugins :: Sync Properties
  • Camel :: Maven Plugins :: XML DSL Doc Enricher
  • Camel :: Metrics
  • Camel :: MicroProfile :: Config
  • Camel :: MicroProfile :: Fault Tolerance
  • Camel :: MicroProfile :: Health
  • Camel :: MicroProfile :: Parent
  • Camel :: Micrometer
  • Camel :: Micrometer :: Observability 2
  • Camel :: Micrometer :: Observation (deprecated)
  • Camel :: Micrometer :: Prometheus
  • Camel :: Milo
  • Camel :: MinIO
  • Camel :: Mock
  • Camel :: MongoDB
  • Camel :: MongoDB GridFS
  • Camel :: Mustache
  • Camel :: MyBatis
  • Camel :: Nats
  • Camel :: Netty
  • Camel :: Netty HTTP
  • Camel :: OAIPMH
  • Camel :: OAuth
  • Camel :: OCSF
  • Camel :: OGNL (deprecated)
  • Camel :: Observability Services
  • Camel :: Olingo2 (Deprecated) :: API
  • Camel :: Olingo2 (Deprecated) :: Component
  • Camel :: Olingo2 (Deprecated) :: Parent
  • Camel :: Olingo4 (Deprecated) :: API
  • Camel :: Olingo4 (Deprecated) :: Component
  • Camel :: Olingo4 (Deprecated) :: Parent
  • Camel :: Once
  • Camel :: OpenAPI :: Validator
  • Camel :: OpenApi Java
  • Camel :: OpenSearch Java API Client
  • Camel :: OpenStack
  • Camel :: OpenTelemetry (deprecated)
  • Camel :: Opentelemetry 2
  • Camel :: Opentelemetry Metrics
  • Camel :: OptaPlanner
  • Camel :: PDF
  • Camel :: PLC4X
  • Camel :: PQC
  • Camel :: Paho (deprecated)
  • Camel :: Paho MQTT 5
  • Camel :: Parent
  • Camel :: Parquet Avro
  • Camel :: PgEvent
  • Camel :: PgReplicationSlot
  • Camel :: Platform HTTP
  • Camel :: Platform HTTP :: Jolokia
  • Camel :: Platform HTTP :: Main
  • Camel :: Platform HTTP :: Vert.x
  • Camel :: Printer
  • Camel :: Protobuf
  • Camel :: PubNub
  • Camel :: Pulsar
  • Camel :: Python
  • Camel :: Quartz
  • Camel :: QuickFIX/J
  • Camel :: REST
  • Camel :: REST OpenApi
  • Camel :: RSS
  • Camel :: Reactive Executor :: Tomcat
  • Camel :: Reactive Executor :: Vert.x (deprecated)
  • Camel :: Reactive Streams
  • Camel :: Reactor
  • Camel :: Redis
  • Camel :: Ref
  • Camel :: Resilience4j
  • Camel :: Resilience4j :: Micrometer
  • Camel :: ResourceResolver GitHub
  • Camel :: RobotFramework
  • Camel :: RocketMQ
  • Camel :: RxJava
  • Camel :: SAP NetWeaver
  • Camel :: SMB
  • Camel :: SMPP
  • Camel :: SNMP
  • Camel :: SOAP
  • Camel :: SPI Annotations
  • Camel :: SQL
  • Camel :: SSH
  • Camel :: SWIFT
  • Camel :: Saga
  • Camel :: Salesforce
  • Camel :: Salesforce :: CodeGen
  • Camel :: Salesforce :: Maven Plugin
  • Camel :: Salesforce :: Parent
  • Camel :: Saxon
  • Camel :: Scheduler
  • Camel :: Schematron
  • Camel :: Seda
  • Camel :: ServiceNow :: Component
  • Camel :: ServiceNow :: Maven Plugin
  • Camel :: ServiceNow :: Parent
  • Camel :: Servlet
  • Camel :: Shell
  • Camel :: Shiro
  • Camel :: Simple JMS
  • Camel :: Simple JMS2
  • Camel :: Slack
  • Camel :: Smooks :: Parent
  • Camel :: SnakeYAML
  • Camel :: Solr
  • Camel :: Splunk (deprecated)
  • Camel :: Splunk HEC
  • Camel :: Spring
  • Camel :: Spring :: Parent
  • Camel :: Spring AI :: Chat
  • Camel :: Spring AI :: Embeddings
  • Camel :: Spring AI :: Image
  • Camel :: Spring AI :: Parent
  • Camel :: Spring AI :: Tools
  • Camel :: Spring AI :: Vector Store
  • Camel :: Spring Batch
  • Camel :: Spring Cloud Config
  • Camel :: Spring JDBC
  • Camel :: Spring LDAP
  • Camel :: Spring Main
  • Camel :: Spring RabbitMQ
  • Camel :: Spring Redis
  • Camel :: Spring Security
  • Camel :: Spring Web Services
  • Camel :: Spring XML
  • Camel :: StAX
  • Camel :: Stitch
  • Camel :: Stream
  • Camel :: StringTemplate
  • Camel :: Stripe
  • Camel :: Stub
  • Camel :: Support
  • Camel :: Syslog
  • Camel :: Tahu
  • Camel :: Tar File
  • Camel :: Telegram
  • Camel :: Telemetry :: Dev
  • Camel :: Test :: JUnit5
  • Camel :: Test :: JUnit6
  • Camel :: Test :: Main :: JUnit5
  • Camel :: Test :: Main :: JUnit6
  • Camel :: Test :: Parent
  • Camel :: Test :: Spring :: JUnit5
  • Camel :: Test Infra
  • Camel :: Test Infra :: AWS Common
  • Camel :: Test Infra :: AWS SDK v2
  • Camel :: Test Infra :: All test services
  • Camel :: Test Infra :: ArangoDB
  • Camel :: Test Infra :: Artemis
  • Camel :: Test Infra :: Azure Common
  • Camel :: Test Infra :: Azure Storage Blob
  • Camel :: Test Infra :: Azure Storage Datalake
  • Camel :: Test Infra :: Azure Storage Queue
  • Camel :: Test Infra :: Cassandra
  • Camel :: Test Infra :: ChatScript
  • Camel :: Test Infra :: Cli (Camel CLI)
  • Camel :: Test Infra :: Common
  • Camel :: Test Infra :: Consul
  • Camel :: Test Infra :: Core
  • Camel :: Test Infra :: CouchDb
  • Camel :: Test Infra :: Couchbase
  • Camel :: Test Infra :: Dispatch Router
  • Camel :: Test Infra :: Docling
  • Camel :: Test Infra :: Elasticsearch
  • Camel :: Test Infra :: FHIR
  • Camel :: Test Infra :: Ftp
  • Camel :: Test Infra :: Google Pub/Sub
  • Camel :: Test Infra :: Hashicorp Vault
  • Camel :: Test Infra :: Hazelcast
  • Camel :: Test Infra :: HiveMQ
  • Camel :: Test Infra :: IBM MQ
  • Camel :: Test Infra :: Iggy
  • Camel :: Test Infra :: Ignite
  • Camel :: Test Infra :: Infinispan
  • Camel :: Test Infra :: JDBC
  • Camel :: Test Infra :: Jaeger
  • Camel :: Test Infra :: Jetty
  • Camel :: Test Infra :: Kafka
  • Camel :: Test Infra :: Keycloak
  • Camel :: Test Infra :: MCP Everything
  • Camel :: Test Infra :: Messaging Common
  • Camel :: Test Infra :: Microprofile LRA
  • Camel :: Test Infra :: Milvus
  • Camel :: Test Infra :: Minio
  • Camel :: Test Infra :: MongoDB
  • Camel :: Test Infra :: Mosquitto
  • Camel :: Test Infra :: Nats
  • Camel :: Test Infra :: Neo4j
  • Camel :: Test Infra :: Ollama
  • Camel :: Test Infra :: OpenAI Mock
  • Camel :: Test Infra :: Openladp
  • Camel :: Test Infra :: Parent
  • Camel :: Test Infra :: Pinecone
  • Camel :: Test Infra :: Postgres
  • Camel :: Test Infra :: Pulsar
  • Camel :: Test Infra :: RabbitMQ
  • Camel :: Test Infra :: Redis
  • Camel :: Test Infra :: RocketMQ
  • Camel :: Test Infra :: Server Message Block
  • Camel :: Test Infra :: Solr
  • Camel :: Test Infra :: TensorFlow Serving
  • Camel :: Test Infra :: Triton Inference Server
  • Camel :: Test Infra :: Weaviate
  • Camel :: Test Infra :: Xmpp
  • Camel :: Test Infra :: ZooKeeper
  • Camel :: Test Infra :: opensearch
  • Camel :: Test Infra :: qdrant
  • Camel :: Thread Pool Factory :: Vert.x (deprecated)
  • Camel :: Thrift
  • Camel :: Thymeleaf
  • Camel :: Tika
  • Camel :: Timer
  • Camel :: Tooling
  • Camel :: Tooling :: Maven
  • Camel :: Tooling :: Model
  • Camel :: Tooling :: OpenApi REST DSL Generator
  • Camel :: Tooling :: Util
  • Camel :: Tooling Parent
  • Camel :: Twilio
  • Camel :: Twitter
  • Camel :: Undertow
  • Camel :: Undertow Spring Security
  • Camel :: UniVocity Parsers
  • Camel :: Util
  • Camel :: Util :: JSon
  • Camel :: Validator
  • Camel :: Velocity
  • Camel :: Vert.x :: Common
  • Camel :: Vert.x :: HTTP
  • Camel :: Vert.x :: Parent
  • Camel :: Vert.x :: WebSocket
  • Camel :: Vertx
  • Camel :: WAL
  • Camel :: Wasm
  • Camel :: Weather
  • Camel :: Web3j
  • Camel :: Webhook
  • Camel :: Whatsapp
  • Camel :: Wordpress
  • Camel :: Workday
  • Camel :: XChange
  • Camel :: XJ
  • Camel :: XML DSL Jaxb :: Test :: Definition
  • Camel :: XML DSL Jaxb :: Test :: Spring
  • Camel :: XML DSL Jaxb :: Tests
  • Camel :: XML DSL with camel-xml-io
  • Camel :: XML DSL with camel-xml-jaxb
  • Camel :: XML IO
  • Camel :: XML IO Util
  • Camel :: XML JAXB
  • Camel :: XML JAXP
  • Camel :: XML JAXP Util
  • Camel :: XML Security
  • Camel :: XMPP
  • Camel :: XPath
  • Camel :: XSLT
  • Camel :: XSLT Saxon
  • Camel :: YAML DSL
  • Camel :: YAML DSL :: Common
  • Camel :: YAML DSL :: Deserializers
  • Camel :: YAML DSL :: Maven Plugins
  • Camel :: YAML DSL :: Parent
  • Camel :: YAML DSL :: Validator
  • Camel :: YAML DSL :: Validator Maven Plugin
  • Camel :: YAML IO
  • Camel :: Zeebe (deprecated)
  • Camel :: Zendesk
  • Camel :: Zip Deflater
  • Camel :: Zip File
  • Camel :: Zookeeper
  • Camel :: Zookeeper Master
  • Camel :: csimple jOOR (deprecated)
  • Camel :: gRPC
  • Camel :: iCal
  • Camel :: jOOR

⚙️ View full build and test results

@zbendhiba zbendhiba force-pushed the CAMEL-23382-step1-camel-ai-tool branch 4 times, most recently from 157b333 to 78fab84 Compare July 7, 2026 15:02
Step 1: Create the new camel-ai-tool module with AiToolSpec, AiToolRegistry, consumer endpoint, and full tests. No changes to existing modules.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@zbendhiba zbendhiba force-pushed the CAMEL-23382-step1-camel-ai-tool branch from 78fab84 to 4a45e3e Compare July 8, 2026 11:49
@zbendhiba zbendhiba marked this pull request as ready for review July 8, 2026 11:56
@zbendhiba zbendhiba requested a review from Copilot July 8, 2026 11:56
@zbendhiba zbendhiba requested review from Croway and orpiske July 8, 2026 11:57

Copilot AI 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.

Copilot encountered an error and was unable to review this pull request. You can try again by re-requesting a review.

@Croway

Croway commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Discussion: passing tool arguments as an exchange variable instead of headers

This PR changes how tool arguments reach the route compared to camel-langchain4j-tools: instead of one header per argument, everything is wrapped in a single AiToolArguments object under the AiTool.TOOL_ARGUMENTS exchange variable. We think this is the right call and want to make the reasoning and consequences explicit before steps 2–5 build on it:

Behavioral changes

  1. Behavioral break in steps 2–5: every existing tool route reading ${header.city} or using sql :#param binding will fail at runtime, not at startup. The upgrade guide entries promised in the roadmap need to spell out the migration pattern very explicitly.
  2. Lost binding convenience: the documented replacement patterns should be either simple OGNL (:#${variable.AiToolArguments.parameters[id]}), or a one-line processor extracting arguments into route-author-named headers (safe, since the names are then trusted).

Why variables are safer than headers

  • LLM output is untrusted input under Camel's threat model, and headers are exactly the surface behind the CVE-2025-27636 header-injection family (the allowedParams filter in LangChain4jToolsProducer is a hardening patch over this very risk).
  • Headers propagate downstream: a tool route doing .to("http:...") or .to("jms:...") forwards LLM-controlled values as HTTP headers / JMS properties under default filter strategies. Variables are never auto-propagated and never drive component dispatch.
  • Wrapping all arguments under one constant key means even argument names can't pollute any namespace.

Open question: keep the single wrapper variable (most conservative), or additionally set one variable per declared argument (${variable.city}) for ergonomics? Declared names are route-author-chosen, so per-argument variables would not reopen the injection surface.

Claude Code on behalf of @Croway

@zbendhiba @orpiske @davsclaus @oscerd this is something worth discussing, from a user perspective the header approach is more elegant, ${header.city} or using sql :#param compared to :#${variable.AiToolArguments.parameters[id]}

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

Reviewed the new module in depth — the per-context registry and the security posture around argument passing are solid (see separate discussion comment). A handful of findings below, two of which I'd consider pre-merge: the broken SQL doc example and the executor's uncaught body-conversion path. Also one structural question best settled now: the package is org.apache.camel.component.ai.tools (plural) while the artifact/scheme are ai-tool (singular) — once steps 2–6 wire other modules against these classes, renaming becomes a breaking change.

Claude Code on behalf of @Croway


from("ai-tool:queryUser?tags=users&description=Query database by user ID" +
"&parameter.id=integer&parameter.id.description=The user ID&parameter.id.required=true")
.to("sql:SELECT name FROM users WHERE id = :#id");

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.

This example won't work: :#id binds from headers/body, but tool arguments are in the AiToolArguments exchange variable. Either use :#${variable.AiToolArguments.parameters[id]} or add a processor step that extracts args.getInteger("id") into a header first. Worth fixing since it's the pattern users will copy (the XML and YAML tabs have the same issue).

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.

so I guess your call on headers comes from this. which is a valid thing.

I guess this one should be revised.

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.

Let me review that. I've deleted the headers for security when we move those to the Executor, however this adds issues for execution

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.

exactly!

}

String result = exchange.getMessage().getBody(String.class);
LOG.debug("Tool '{}' execution completed successfully", toolName);

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.

This sits outside the try/catch, so a TypeConversionException (route returns a non-convertible body) propagates to the adapter — contradicting the documented contract that all errors come back as typed AiToolResult variants. Suggest wrapping it and returning an ExecutionError.

"A toolName must be provided: ai-tool:<toolName>?description=<desc>");
}

final String toolName = StringHelper.before(remaining, "/", remaining);

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.

ai-tool:myTool/anything silently drops /anything. Since the syntax is ai-tool:toolName with no path segments, better to fail on a / (or use remaining as-is) so typos surface instead of registering a truncated tool name.

}

@Override
protected void doStop() throws Exception {

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.

Route suspend doesn't deregister the tool (no doSuspend override), so a suspended route stays in the registry and the executor will still dispatch into its processor. Either deregister on suspend or have AiToolExecutor check the consumer's state before dispatching — and document whichever is chosen.

synchronized (set) {
for (AiToolSpec existing : set) {
if (existing.getName().equals(spec.getName()) && existing != spec) {
LOG.warn("Duplicate toolName '{}' under tag '{}' -- the LLM adapter will see both "

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.

Warn-only on duplicate tool names means both specs stay registered, and most LLM APIs (OpenAI included) reject duplicate function names — so the failure surfaces later and far from the cause. Since this registry is the foundation for steps 2–6, consider failing fast at registration, or documenting last-wins semantics.

@UriParam(description = "Comma-separated list of tags used to group tools. "
+ "Producers filter the registry by these tags to select which tools to expose to the LLM. "
+ "When omitted, the tool goes into a default pool available to all producers.")
private String tags;

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.

Missing @Metadata(label = "consumer") — the generated catalog JSON shows "label": "" for tags while description/parameters have "consumer".

*
* @since 4.22
*/
public final class AiToolRegistry {

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.

This class relies on synchronized throughout — synchronized (context) in getOrCreate, Collections.synchronizedSet, and synchronized (set) blocks in put/getToolsByTag/getAllTools/getTools/getDefaultTools. Camel supports virtual threads, and the project has been systematically replacing synchronized with ReentrantLock for virtual-thread compatibility (CAMEL-20199, e.g. #21703) — new code shouldn't reintroduce it. A ReentrantLock-guarded LinkedHashSet keeps the insertion ordering, or CopyOnWriteArraySet would fit this read-heavy registry with no locking at all.

@zbendhiba

Copy link
Copy Markdown
Contributor Author

Discussion: passing tool arguments as an exchange variable instead of headers

This PR changes how tool arguments reach the route compared to camel-langchain4j-tools: instead of one header per argument, everything is wrapped in a single AiToolArguments object under the AiTool.TOOL_ARGUMENTS exchange variable. We think this is the right call and want to make the reasoning and consequences explicit before steps 2–5 build on it:

Behavioral changes

  1. Behavioral break in steps 2–5: every existing tool route reading ${header.city} or using sql :#param binding will fail at runtime, not at startup. The upgrade guide entries promised in the roadmap need to spell out the migration pattern very explicitly.
  2. Lost binding convenience: the documented replacement patterns should be either simple OGNL (:#${variable.AiToolArguments.parameters[id]}), or a one-line processor extracting arguments into route-author-named headers (safe, since the names are then trusted).

Why variables are safer than headers

  • LLM output is untrusted input under Camel's threat model, and headers are exactly the surface behind the CVE-2025-27636 header-injection family (the allowedParams filter in LangChain4jToolsProducer is a hardening patch over this very risk).
  • Headers propagate downstream: a tool route doing .to("http:...") or .to("jms:...") forwards LLM-controlled values as HTTP headers / JMS properties under default filter strategies. Variables are never auto-propagated and never drive component dispatch.
  • Wrapping all arguments under one constant key means even argument names can't pollute any namespace.

Open question: keep the single wrapper variable (most conservative), or additionally set one variable per declared argument (${variable.city}) for ergonomics? Declared names are route-author-chosen, so per-argument variables would not reopen the injection surface.

Claude Code on behalf of @Croway

@zbendhiba @orpiske @davsclaus @oscerd this is something worth discussing, from a user perspective the header approach is more elegant, ${header.city} or using sql :#param compared to :#${variable.AiToolArguments.parameters[id]}

I assume this change. Keep in mind that this is internal to components using the camel ai tool. I've already started implementing for camel langchain4j agent and camel spring ai chat components. There is 0 impact for users. there's no reason to propagate headers as those are the internal LLM calls.

I didn't spent time on langchain4j-tools internal. I marked in the spec this component as to deprecate.

@zbendhiba

Copy link
Copy Markdown
Contributor Author

Discussion: passing tool arguments as an exchange variable instead of headers

This PR changes how tool arguments reach the route compared to camel-langchain4j-tools: instead of one header per argument, everything is wrapped in a single AiToolArguments object under the AiTool.TOOL_ARGUMENTS exchange variable. We think this is the right call and want to make the reasoning and consequences explicit before steps 2–5 build on it:
Behavioral changes

  1. Behavioral break in steps 2–5: every existing tool route reading ${header.city} or using sql :#param binding will fail at runtime, not at startup. The upgrade guide entries promised in the roadmap need to spell out the migration pattern very explicitly.
  2. Lost binding convenience: the documented replacement patterns should be either simple OGNL (:#${variable.AiToolArguments.parameters[id]}), or a one-line processor extracting arguments into route-author-named headers (safe, since the names are then trusted).

Why variables are safer than headers

  • LLM output is untrusted input under Camel's threat model, and headers are exactly the surface behind the CVE-2025-27636 header-injection family (the allowedParams filter in LangChain4jToolsProducer is a hardening patch over this very risk).
  • Headers propagate downstream: a tool route doing .to("http:...") or .to("jms:...") forwards LLM-controlled values as HTTP headers / JMS properties under default filter strategies. Variables are never auto-propagated and never drive component dispatch.
  • Wrapping all arguments under one constant key means even argument names can't pollute any namespace.

Open question: keep the single wrapper variable (most conservative), or additionally set one variable per declared argument (${variable.city}) for ergonomics? Declared names are route-author-chosen, so per-argument variables would not reopen the injection surface.
Claude Code on behalf of @Croway
@zbendhiba @orpiske @davsclaus @oscerd this is something worth discussing, from a user perspective the header approach is more elegant, ${header.city} or using sql :#param compared to :#${variable.AiToolArguments.parameters[id]}

I assume this change. Keep in mind that this is internal to components using the camel ai tool. I've already started implementing for camel langchain4j agent and camel spring ai chat components. There is 0 impact for users. there's no reason to propagate headers as those are the internal LLM calls.

I didn't spent time on langchain4j-tools internal. I marked in the spec this component as to deprecate.

revised, let me look at this again

@orpiske

orpiske commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

ACK ... This one is on my TODO list for tomorrow morning

@zbendhiba zbendhiba marked this pull request as draft July 9, 2026 07:22

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

High level review from the perspective of downstream consumers

Claude Code on behalf of Otavio Rodolfo Piske

Overall Assessment: Approve (Step 1)

This PR introduces a clean, well-scoped abstraction layer. Step 1 is purely additive — no existing modules are modified. The analysis below focuses on how this new module interacts with downstream bean-factory systems like Forage.

Compatibility

The AiToolRegistry and AiToolSpec abstractions operate at a different layer than bean-based agent creation. Agent beans (ChatModel + Memory + RAG + Guardrails) are created and bound to the CamelContext registry via registry.bind(). Tools are registered in the separate AiToolRegistry plugin. These are complementary — the agent is the "brain," the tools are the "hands." The ?bean= URI syntax for agent lookup is unaffected.

Beans still work. No conflicts.

Extension Points (positive)

The module exposes useful hooks for downstream consumers:

  • AiToolRegistry.getOrCreate(CamelContext) — clean programmatic access for registering tools outside of route DSL
  • AiToolSpec constructor is public — third parties can build and register tool descriptors
  • Tag-based discovery maps well to multi-agent configurations

Concerns for Steps 2-5

  1. Argument passing change: The shift from exchange headers (exchange.getMessage().setHeader(name, value)) to exchange variables (AiToolArguments) in Step 2 will be a breaking change for existing tool routes that read parameters via ${header.city}. This deserves a clear upgrade guide entry when it lands.

  2. Missing SPI for third-party tool sources: There is no AiToolProvider SPI for external tool catalogs (e.g., MCP server catalogs, property-driven tool definitions). All tools must come through either AiToolConsumer routes or programmatic AiToolRegistry.put(). Consider whether a provider SPI would be valuable for Step 6 or beyond.

  3. URI migration path: When langchain4j-tools: consumer is deprecated (Step 5), users will need to migrate to ai-tool:. A smooth deprecation period where both work simultaneously would reduce friction.

Summary

Step 1 is safe to merge. The architecture is sound and the separation of concerns is correct. The risks noted above are all in future steps and are flagged early so they can be addressed as the roadmap progresses.

/**
* Exchange variable name under which {@link AiToolArguments} is set by the executor.
*/
public static final String TOOL_ARGUMENTS = "AiToolArguments";

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.

We should probably use CamelXxx format. The proper variable name should be CamelAiToolArguments.

@orpiske

orpiske commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Discussion: passing tool arguments as an exchange variable instead of headers

This PR changes how tool arguments reach the route compared to camel-langchain4j-tools: instead of one header per argument, everything is wrapped in a single AiToolArguments object under the AiTool.TOOL_ARGUMENTS exchange variable. We think this is the right call and want to make the reasoning and consequences explicit before steps 2–5 build on it:

Behavioral changes

1. **Behavioral break in steps 2–5**: every existing tool route reading `${header.city}` or using sql `:#param` binding will fail at runtime, not at startup. The upgrade guide entries promised in the roadmap need to spell out the migration pattern very explicitly.

2. **Lost binding convenience**: the documented replacement patterns should be either simple OGNL (`:#${variable.AiToolArguments.parameters[id]}`), or a one-line processor extracting arguments into route-author-named headers (safe, since the names are then trusted).

Why variables are safer than headers

* LLM output is untrusted input under Camel's threat model, and headers are exactly the surface behind the [CVE-2025-27636](https://github.com/advisories/GHSA-2c2h-2855-mf97) header-injection family (the `allowedParams` filter in `LangChain4jToolsProducer` is a hardening patch over this very risk).

* Headers propagate downstream: a tool route doing `.to("http:...")` or `.to("jms:...")` forwards LLM-controlled values as HTTP headers / JMS properties under default filter strategies. Variables are never auto-propagated and never drive component dispatch.

* Wrapping all arguments under one constant key means even argument _names_ can't pollute any namespace.

Open question: keep the single wrapper variable (most conservative), or additionally set one variable per declared argument (${variable.city}) for ergonomics? Declared names are route-author-chosen, so per-argument variables would not reopen the injection surface.

Claude Code on behalf of @Croway

@zbendhiba @orpiske @davsclaus @oscerd this is something worth discussing, from a user perspective the header approach is more elegant, ${header.city} or using sql :#param compared to :#${variable.AiToolArguments.parameters[id]}

I am OK with this change, although:

  • it does concern me a bit that processing the tool arguments get harder.
  • headers propagating downstream may be a two-edged sword if that leads to situations where integrations inadvertently leak credentials/PII/etc.

Whether to keep a single wrapper or per variable ... I don't have a strong opinion. I think the one variable per argument approach would solve one of my concerns above, but I am unsure how much more complicated it is to implement.

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

Nice work, Zineb — reviewed mainly from a security and integration-correctness angle.

The security posture is the part I want to call out as well-designed: untrusted LLM tool-call arguments are wrapped under a single constant key into an exchange variable (exchange.setVariable(AiTool.TOOL_ARGUMENTS, ...)) rather than spread into Exchange headers. That deliberately avoids the raw-name→header mapping behind the camel-langchain4j-tools header-injection family (CVE-2025-27636 and follow-ons) — argument names can't pollute the header namespace, and variables don't auto-propagate or drive dispatch. AiToolResult also carries the note about not returning raw exception text to the LLM. Good hardening. MojoHelper registration, generated files and conventions all check out, and CI is green.

Concurring with @Croway's two pre-merge items:

  • The executor's body conversion exchange.getMessage().getBody(String.class) sits after the try/catch, so a TypeConversionException would escape the "all errors returned as a typed AiToolResult" contract instead of becoming an ExecutionError.
  • The flagship doc example binds :#id in the SQL, but arguments now live in the AiToolArguments variable, so the copy-paste example won't bind at runtime (functional only — it stays parameterized, so no injection concern).

Thanks for taking the hardened approach here.

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

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

Step 1 review — conventions & quality pass

Really nice groundwork: the design doc (design/aiTool.adoc) plus the sequential-PR plan make this easy to review, and the Step 1 scoping (no changes to existing modules) is exactly right. Checked against the repo conventions:

  • ✅ MojoHelper registration, camel-ai module list, parent/BOM/allcomponents, catalog + component/endpoint DSL regeneration, docs symlinks and nav.adoc — all present and consistent
  • ✅ Only camel-support as runtime dependency; no new external dependencies
  • ✅ Comprehensive unit tests (including a registry concurrency test); no Thread.sleep
  • ✅ Passing tool arguments as a single typed exchange variable instead of per-name headers avoids header-namespace collisions entirely — good call, and in line with the committer security checklist for consumers
  • additionalProperties: false in the generated schema and the sanitization note on AiToolResult are thoughtful touches

I left 5 inline comments: 3 small correctness/consistency items (undeclared-argument handling vs. its log message, a sql doc example that won't bind with variable-based arguments, a blank-tags edge case) and 2 questions.

One module-wide naming question that doesn't fit a single line: the Java package is org.apache.camel.component.ai.tools (plural) while the artifact and scheme are camel-ai-tool / ai-tool (singular). Since Steps 2–4 will make other modules depend on these classes, and package renames after a release are breaking, it may be worth aligning on one form now (e.g. org.apache.camel.component.ai.tool).

None of this is blocking — looking forward to the follow-up steps.

This review is a conventions/quality pass and does not replace dedicated review tooling or static analysis (e.g. SonarCloud).

Claude Code on behalf of oscerd

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

}

// Defensive copy so callers cannot mutate arguments during route execution
Map<String, Object> argsCopy = arguments != null ? new HashMap<>(arguments) : Map.of();

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 warn above says the undeclared argument is being ignored, but argsCopy copies all entries — undeclared arguments included — so they remain accessible to the route via AiToolArguments. The generated schema also advertises additionalProperties: false to the model.

Two ways to make this consistent:

  1. Actually filter undeclared arguments out of argsCopy when the tool declares parameters (defense-in-depth: extra parameters an LLM hallucinates — or is prompted into sending — never reach the route), or
  2. Keep the pass-through behavior and reword the log message/Javadoc (the design doc says "warned about but not rejected").

Option 1 seems preferable given the schema already tells the model additionalProperties: false. Either way, a test asserting the chosen behavior would pin it down — testExecuteIgnoresUndeclaredArguments currently passes under both semantics (it never checks whether extraParam is present in AiToolArguments).


from("ai-tool:queryUser?tags=users&description=Query database by user ID" +
"&parameter.id=integer&parameter.id.description=The user ID&parameter.id.required=true")
.to("sql:SELECT name FROM users WHERE id = :#id");

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.

This example won't bind as written: camel-sql resolves :#id from the body-as-Map, the headers, or an exchange variable named id (see SqlHelper.lookupParameter), but with this design the arguments live only inside the single AiToolArguments variable — there is no id variable or header, and the body is not the arguments map. (The pattern worked with the old header-based tools components, which is probably where the example stems from.)

Options: use a simple-expression binding (e.g. :#${variable.AiToolArguments.parameters[id]} — worth a quick verification), switch the example to a processor/bean that reads AiToolArguments, or — if :#name ergonomics are a goal for tool routes — consider having the executor additionally expose declared arguments individually. The same applies to the XML tab (line 188) and the YAML tab (line 226).


AiToolRegistry registry = AiToolRegistry.getOrCreate(getEndpoint().getCamelContext());
String tags = configuration.getTags();
if (tags != null && !tags.isBlank()) {

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.

Edge case: a tags value that is non-blank but contains only blank items (e.g. tags=,) passes this check, but splitTags then returns an empty array — so the loop below registers the tool nowhere (neither under a tag nor in the default pool), silently. Similarly, tags=,research registers the tool under the empty-string tag "".

Suggestion: filter blank entries in splitTags, and if nothing remains fall back to the default pool here, matching the documented "when omitted" semantics.

"A toolName must be provided: ai-tool:<toolName>?description=<desc>");
}

final String toolName = StringHelper.before(remaining, "/", remaining);

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.

Question: this silently drops anything after the first / (ai-tool:foo/bar → tool name foo). Since the syntax is just ai-tool:toolName, silently truncating user input seems surprising — is the / handling intentional (future-proofing?), or would rejecting / keeping the full remaining be clearer? A short comment would help either way.

// LangChain4j agent uses only weather-tagged tools
from("direct:chat")
.to("langchain4j-agent:assistant?agent=#myAgent&tags=weather");
----

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.

Minor: this section shows the langchain4j-agent producer consuming registry tools, but that wiring only lands in Step 2 — a reader of the nightly docs could reasonably expect it to work today. The See Also section already says "future release"; a short NOTE admonition here as well would avoid confusion until Steps 2–4 land.

@davsclaus

Copy link
Copy Markdown
Contributor

exchange.setVariable(AiTool.TOOL_ARGUMENTS, ...))

EIPs and Camel components should frankly use exchange properties. We made variables only for end users to have full namespace for their own variables that dont get mixed up with internal camel state.

@zbendhiba zbendhiba force-pushed the CAMEL-23382-step1-camel-ai-tool branch from 57894da to f9bfe30 Compare July 10, 2026 13:26
@zbendhiba zbendhiba marked this pull request as ready for review July 10, 2026 14:14

@gnodet gnodet 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-reviewed after the latest commits (f9bfe30, adebbe7). The follow-up changes substantively address prior review feedback:

  • Package rename from ai.tools (plural) to ai.tool (singular)
  • synchronized replaced with ReentrantLock
  • Body conversion moved inside try/catch
  • / rejection in tool names
  • Suspend/resume lifecycle support
  • Blank-tag edge case handled
  • Duplicate tool names now fail-fast
  • Doc examples fixed to use bean/header pattern
  • AiToolArguments exchange variable removed in favor of per-header arguments with Camel-prefix filtering

Security posture is sound: Camel-prefixed header names are rejected (CVE-2025-27636 family), undeclared arguments are filtered out, and AiToolResult documents sanitization requirements. Test coverage is thorough (lifecycle, executor edge cases, registry concurrency, parameter parsing, Camel-prefix rejection).

LGTM.

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

Claude Code on behalf of Guillaume Nodet

@zbendhiba

Copy link
Copy Markdown
Contributor Author

Thanks everyone for the reviews and the feedback !
I believe I've addressed most of the feedback.
I've also analysed if this works in Camel Quarkus.

gnodet added a commit to gnodet/camel that referenced this pull request Jul 10, 2026
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.

8 participants