blob: a00099c54faa4173033a9fe37b7470881ce25430 [file]
<!doctype html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Google Firestore :: Apache Camel</title> <meta name="description" content="Store and retrieve data from Google Cloud Firestore NoSQL database."> <meta name="generator" content="Antora 3.1.7"> <link rel="stylesheet" href="../../_/css/site-5c323c41e9.css"> <meta name="application-name" content="Apache Camel"> <meta property="og:title" content="Google Firestore"> <meta property="og:site_name" content="Apache Camel"> <meta property="og:url" content="https://camel.apache.org"> <meta property="og:description" content="Apache Camel is an open source integration framework with 350+ connectors for databases, APIs, message brokers, and cloud services. Write routes in Java, YAML, or XML. Run on Spring Boot, Quarkus, or standalone with the Camel CLI. In production since 2007. Apache License 2.0."> <meta property="og:type" content="website"> <meta property="og:image" content="https://camel.apache.org/_/img/logo-d-a567cee6fa.svg"> <link rel="manifest" href="../../site.webmanifest"> <link rel="apple-touch-icon-precomposed" sizes="57x57" href="../../apple-touch-icon-57x57.png"> <link rel="apple-touch-icon-precomposed" sizes="114x114" href="../../apple-touch-icon-114x114.png"> <link rel="apple-touch-icon-precomposed" sizes="72x72" href="../../apple-touch-icon-72x72.png"> <link rel="apple-touch-icon-precomposed" sizes="144x144" href="../../apple-touch-icon-144x144.png"> <link rel="apple-touch-icon-precomposed" sizes="60x60" href="../../apple-touch-icon-60x60.png"> <link rel="apple-touch-icon-precomposed" sizes="120x120" href="../../apple-touch-icon-120x120.png"> <link rel="apple-touch-icon-precomposed" sizes="76x76" href="../../apple-touch-icon-76x76.png"> <link rel="apple-touch-icon-precomposed" sizes="152x152" href="../../apple-touch-icon-152x152.png"> <link rel="icon" type="image/png" href="../../favicon-196x196.png" sizes="196x196"> <link rel="icon" type="image/png" href="../../favicon-96x96.png" sizes="96x96"> <link rel="icon" type="image/png" href="../../favicon-32x32.png" sizes="32x32"> <link rel="icon" type="image/png" href="../../favicon-16x16.png" sizes="16x16"> <link rel="icon" type="image/png" href="../../favicon-128.png" sizes="128x128"> </head> <body class="article"> <header class="header"> <nav class="navbar" aria-label="Main menu"> <div class="navbar-brand"> <a class="nav-logo" href="../.."></a> <div id="topbar-nav" class="navbar-menu"> <div class="navbar-end"> <a class="navbar-item-section navbar-item navbar-topics" href="../../blog/"> <img alt="Blog" src="/_/img/blog-4c7fa4cb60.svg"> Blog </a> <a class="navbar-item-section navbar-item navbar-topics" href="../../docs/"> <img alt="Documentation" src="/_/img/documentation-abb1b7f8b1.svg"> Documentation </a> <a class="navbar-item-section navbar-item navbar-topics" href="../../community/"> <img alt="Community" src="/_/img/community-2ec8a3dc8b.svg"> Community </a> <a class="navbar-item-section navbar-item navbar-topics" href="../../tooling/"> <img alt="Tooling" src="/_/img/tooling-f5e235c238.svg"> Tooling </a> <a class="navbar-item-section navbar-item navbar-topics" href="../../download/"> <img alt="Download" src="/_/img/download-63cdd75074.svg"> Download </a> <a class="navbar-item-section navbar-item navbar-topics" href="../../security/"> <img alt="Security" src="/_/img/security-06abe157b3.svg"> Security </a> <a class="navbar-item-section navbar-item navbar-topics" href="../../trust/"> <img alt="Trust" src="/_/img/security-06abe157b3.svg"> Trust </a> </div> </div> <div class="navbar-fill"></div> <div class="break-row"></div> <div class="navbar-search results-hidden"> <input id="search" class="search" placeholder="Search" autocomplete="off" maxlength="200"> <img src="../../_/img/cancel-1ed239489b.svg" alt="Clear" id="search-cancel"> <div id="search_results"></div> </div> <div class="navbar-tools"> <a rel="noopener noreferrer nofollow" href="https://github.com/apache/camel/" title="Collaborate on GitHub"><svg focusable="false" class="brand-icon"><use xlink:href="../../_/img/brand-logos-a2b35bbdec.svg#github"/></svg></a> <a rel="noopener noreferrer nofollow" href="https://camel.zulipchat.com" title="Chat on Zulip"><svg focusable="false" class="brand-icon"><use xlink:href="../../_/img/brand-logos-a2b35bbdec.svg#zulip"/></svg></a> <a rel="noopener noreferrer nofollow" href="https://twitter.com/ApacheCamel" title="Follow Apache Camel on Twitter"><svg focusable="false" class="brand-icon"><use xlink:href="../../_/img/brand-logos-a2b35bbdec.svg#twitter"/></svg></a> <a rel="noopener noreferrer nofollow" href="https://www.linkedin.com/groups/2447439/" title="Apache Camel group on Linkedin"><svg focusable="false" class="brand-icon"><use xlink:href="../../_/img/brand-logos-a2b35bbdec.svg#linkedin"/></svg></a> </div> <button class="navbar-burger" data-target="topbar-nav" type="button" aria-label="Menu"> <span></span> <span></span> <span></span> </button> </div> </nav> </header> <a id="top"></a> <div class="body"> <div class="nav-container" data-component="components" data-version="next"> <aside class="nav" aria-label="Side menu"> <div class="panels"> <div class="nav-panel-menu is-active"> <input class="search" placeholder="Quick lookup"> <nav class="nav-menu" data-panel="menu" aria-label="Topics"> <h3 class="title"><a href="index.html">Camel Components</a></h3> <ul class="nav-list"> <li class="nav-item" data-depth="0"> <ul class="nav-list"> <li class="nav-item" data-depth="1"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="index.html">Components</a> <ul class="nav-list"> <li class="nav-item" data-depth="2"> <a class="nav-link" href="activemq-component.html">ActiveMQ 5.x</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="activemq6-component.html">ActiveMQ 6.x</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="ai-summary.html">AI</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="a2a-component.html">A2A</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ai-tool-component.html">AI Tool</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="chatscript-component.html">ChatScript</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="djl-component.html">Deep Java Library</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="docling-component.html">Docling</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="huggingface-component.html">Hugging Face</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kserve-component.html">KServe</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="langchain4j-agent-component.html">LangChain4j Agent</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="langchain4j-chat-component.html">LangChain4j Chat</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="langchain4j-embeddingstore-component.html">LangChain4j Embedding Store</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="langchain4j-embeddings-component.html">LangChain4j Embeddings</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="langchain4j-tools-component.html">LangChain4j Tools</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="langchain4j-web-search-component.html">LangChain4j Web Search</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="milvus-component.html">Milvus</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="neo4j-component.html">Neo4j</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openai-component.html">OpenAI</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="pgvector-component.html">PGVector</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="pinecone-component.html">Pinecone</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="qdrant-component.html">Qdrant</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-ai-chat-component.html">Spring AI Chat</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-ai-embeddings-component.html">Spring AI Embeddings</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-ai-image-component.html">Spring AI Image</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-ai-tools-component.html">Spring AI Tools</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-ai-vector-store-component.html">Spring AI Vector Store</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="tensorflow-serving-component.html">TensorFlow Serving</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="weaviate-component.html">weaviate</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="amqp-component.html">AMQP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="arangodb-component.html">ArangoDb</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="as2-component.html">AS2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="asterisk-component.html">Asterisk</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="atmosphere-websocket-component.html">Atmosphere Websocket</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="atom-component.html">Atom</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="avro-component.html">Avro RPC</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="aws-summary.html">AWS</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-athena-component.html">AWS Athena</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws-bedrock-component.html">AWS Bedrock</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws-bedrock-agent-component.html">AWS Bedrock Agent</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws-bedrock-agent-runtime-component.html">AWS Bedrock Agent Runtime</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws-cloudtrail-component.html">AWS CloudTrail</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-cw-component.html">AWS CloudWatch</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-comprehend-component.html">AWS Comprehend</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws-config-component.html">AWS Config Service</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-ddb-component.html">AWS DynamoDB</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-ddbstream-component.html">AWS DynamoDB Streams</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-ec2-component.html">AWS Elastic Compute Cloud (EC2)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-ecs-component.html">AWS Elastic Container Service (ECS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-eks-component.html">AWS Elastic Kubernetes Service (EKS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-eventbridge-component.html">AWS Eventbridge</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-iam-component.html">AWS Identity and Access Management (IAM)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-kms-component.html">AWS Key Management Service (KMS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-kinesis-component.html">AWS Kinesis</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-kinesis-firehose-component.html">AWS Kinesis Firehose</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-lambda-component.html">AWS Lambda</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-msk-component.html">AWS Managed Streaming for Apache Kafka (MSK)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-mq-component.html">AWS MQ</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws-parameter-store-component.html">AWS Parameter Store</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-polly-component.html">AWS Polly</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-redshift-data-component.html">AWS RedshiftData</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-rekognition-component.html">AWS Rekognition</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-s3-component.html">AWS S3 Storage Service</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-s3-vectors-component.html">AWS S3 Vectors</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws-secrets-manager-component.html">AWS Secrets Manager</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws-security-hub-component.html">AWS Security Hub</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-sts-component.html">AWS Security Token Service (STS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-ses-component.html">AWS Simple Email Service (SES)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-sns-component.html">AWS Simple Notification System (SNS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-sqs-component.html">AWS Simple Queue Service (SQS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-step-functions-component.html">AWS StepFunctions</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-textract-component.html">AWS Textract</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-timestream-component.html">AWS Timestream</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-transcribe-component.html">AWS Transcribe</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="aws2-translate-component.html">AWS Translate</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="azure-summary.html">Azure</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-cosmosdb-component.html">Azure CosmosDB</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-eventgrid-component.html">Azure Event Grid</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-eventhubs-component.html">Azure Event Hubs</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-files-component.html">Azure Files</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-functions-component.html">Azure Functions</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-key-vault-component.html">Azure Key Vault</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-servicebus-component.html">Azure ServiceBus</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-storage-blob-component.html">Azure Storage Blob Service</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-storage-datalake-component.html">Azure Storage Data Lake Service</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="azure-storage-queue-component.html">Azure Storage Queue Service</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="bean-component.html">Bean</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="bean-validator-component.html">Bean Validator</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="bonita-component.html">Bonita</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="box-component.html">Box</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="braintree-component.html">Braintree</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="browse-component.html">Browse</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="caffeine-cache-component.html">Caffeine Cache</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="caffeine-loadcache-component.html">Caffeine LoadCache</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="camunda-component.html">Camunda</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="cql-component.html">Cassandra CQL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="chunk-component.html">Chunk</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="class-component.html">Class</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="clickhouse-component.html">ClickHouse</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="clickup-component.html">ClickUp</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="cm-sms-component.html">CM SMS Gateway</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="coap-component.html">CoAP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="cometd-component.html">CometD</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="consul-component.html">Consul</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="controlbus-component.html">Control Bus</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="couchbase-component.html">Couchbase</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="couchdb-component.html">CouchDB</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="cron-component.html">Cron</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="crypto-component.html">Crypto (JCE)</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="cxf-component.html">CXF</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="cxfrs-component.html">CXF-RS</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="cyberark-vault-component.html">CyberArk Vault</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dapr-component.html">Dapr</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformat-component.html">Data Format</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataset-component.html">Dataset</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataset-test-component.html">DataSet Test</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="debezium-summary.html">Debezium</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="debezium-db2-component.html">Debezium DB2 Connector</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="debezium-mongodb-component.html">Debezium MongoDB Connector</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="debezium-mysql-component.html">Debezium MySQL Connector</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="debezium-oracle-component.html">Debezium Oracle Connector</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="debezium-postgres-component.html">Debezium PostgreSQL Connector</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="debezium-sqlserver-component.html">Debezium SQL Server Connector</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dfdl-component.html">DFDL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dhis2-component.html">DHIS2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="digitalocean-component.html">DigitalOcean</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="direct-component.html">Direct</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="disruptor-component.html">Disruptor</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="disruptor-vm-component.html">Disruptor VM</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dns-component.html">DNS</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="docker-component.html">Docker</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="drill-component.html">Drill</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dropbox-component.html">Dropbox</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="duckdb-component.html">DuckDB</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dynamic-router-component.html">Dynamic Router</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dynamic-router-control-component.html">Dynamic Router Control</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="ehcache-component.html">Ehcache</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="elasticsearch-component.html">Elasticsearch</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="elasticsearch-rest-client-component.html">Elasticsearch Low level Rest Client</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="event-component.html">Event</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="exec-component.html">Exec</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="fhir-component.html">FHIR</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="file-component.html">File</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="file-watch-component.html">File Watch</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="flatpack-component.html">Flatpack</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="flink-component.html">Flink</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="flowable-component.html">Flowable</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="fop-component.html">FOP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="freemarker-component.html">Freemarker</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="ftp-component.html">FTP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="ftps-component.html">FTPS</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="geocoder-component.html">Geocoder</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="git-component.html">Git</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="github2-component.html">GitHub2</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="google-summary.html">Google</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-bigquery-component.html">Google BigQuery</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-bigquery-sql-component.html">Google BigQuery Standard SQL</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-calendar-component.html">Google Calendar</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-calendar-stream-component.html">Google Calendar Stream</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-functions-component.html">Google Cloud Functions</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-speech-to-text-component.html">Google Cloud Speech To Text</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-text-to-speech-component.html">Google Cloud Text To Speech</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-vision-component.html">Google Cloud Vision</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-drive-component.html">Google Drive</a> </li> <li class="nav-item is-current-page" data-depth="3"> <a class="nav-link" href="google-firestore-component.html">Google Firestore</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-mail-component.html">Google Mail</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-mail-stream-component.html">Google Mail Stream</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-pubsub-component.html">Google Pubsub</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-secret-manager-component.html">Google Secret Manager</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-sheets-component.html">Google Sheets</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-sheets-stream-component.html">Google Sheets Stream</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-storage-component.html">Google Storage</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="google-vertexai-component.html">Google Vertex AI</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="graphql-component.html">GraphQL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="grpc-component.html">gRPC</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="hashicorp-vault-component.html">HashiCorp Vault</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="hazelcast-summary.html">Hazelcast</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-atomicvalue-component.html">Hazelcast Atomic Number</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-instance-component.html">Hazelcast Instance</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-list-component.html">Hazelcast List</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-map-component.html">Hazelcast Map</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-multimap-component.html">Hazelcast Multimap</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-pncounter-component.html">Hazelcast PN Counter</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-queue-component.html">Hazelcast Queue</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-replicatedmap-component.html">Hazelcast Replicated Map</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-ringbuffer-component.html">Hazelcast Ringbuffer</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-seda-component.html">Hazelcast SEDA</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-set-component.html">Hazelcast Set</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hazelcast-topic-component.html">Hazelcast Topic</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="http-component.html">HTTP</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="hwcloud-summary.html">Huawei Cloud</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hwcloud-frs-component.html">Huawei Cloud Face Recognition Service (FRS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hwcloud-imagerecognition-component.html">Huawei Cloud Image Recognition</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hwcloud-dms-component.html">Huawei Distributed Message Service (DMS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hwcloud-functiongraph-component.html">Huawei FunctionGraph</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hwcloud-iam-component.html">Huawei Identity and Access Management (IAM)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hwcloud-obs-component.html">Huawei Object Storage Service (OBS)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="hwcloud-smn-component.html">Huawei Simple Message Notification (SMN)</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="ibm-summary.html">IBM</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ibm-cos-component.html">IBM Cloud Object Storage</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ibm-secrets-manager-component.html">IBM Secrets Manager</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ibm-watson-discovery-component.html">IBM Watson Discovery</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ibm-watson-language-component.html">IBM Watson Language</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ibm-watson-speech-to-text-component.html">IBM Watson Speech to Text</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ibm-watson-text-to-speech-component.html">IBM Watson Text to Speech</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ibm-watsonx-ai-component.html">IBM watsonx.ai</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ibm-watsonx-data-component.html">IBM watsonx.data</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="iec60870-client-component.html">IEC 60870 Client</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="iec60870-server-component.html">IEC 60870 Server</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="iggy-component.html">Iggy</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="ignite-summary.html">Ignite</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ignite-cache-component.html">Ignite Cache</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ignite-compute-component.html">Ignite Compute</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ignite-events-component.html">Ignite Events</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ignite-idgen-component.html">Ignite ID Generator</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ignite-messaging-component.html">Ignite Messaging</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ignite-queue-component.html">Ignite Queues</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="ignite-set-component.html">Ignite Sets</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="infinispan-component.html">Infinispan</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="infinispan-embedded-component.html">Infinispan Embedded</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="influxdb-component.html">InfluxDB</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="influxdb2-component.html">InfluxDB2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="irc-component.html">IRC</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="ironmq-component.html">IronMQ</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jcache-component.html">JCache</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jcr-component.html">JCR</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jdbc-component.html">JDBC</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jetty-component.html">Jetty</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jgroups-component.html">JGroups</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jgroups-raft-component.html">JGroups raft</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jira-component.html">Jira</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jms-component.html">JMS</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jmx-component.html">JMX</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jolt-component.html">JOLT</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jooq-component.html">JOOQ</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jpa-component.html">JPA</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jslt-component.html">JSLT</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="json-validator-component.html">JSON Schema Validator</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jsonata-component.html">JSONata</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="json-patch-component.html">JsonPatch</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jt400-component.html">JT400</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="jte-component.html">JTE</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="kafka-component.html">Kafka</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="kamelet-component.html">Kamelet</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="keycloak-component.html">Keycloak</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="knative-component.html">Knative</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="knative-http-component.html">Knative Http</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="kubernetes-summary.html">Kubernetes</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-config-maps-component.html">Kubernetes ConfigMap</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-cronjob-component.html">Kubernetes Cronjob</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-custom-resources-component.html">Kubernetes Custom Resources</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-deployments-component.html">Kubernetes Deployments</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-events-component.html">Kubernetes Event</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-hpa-component.html">Kubernetes HPA</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-job-component.html">Kubernetes Job</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-namespaces-component.html">Kubernetes Namespaces</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-nodes-component.html">Kubernetes Nodes</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-persistent-volumes-component.html">Kubernetes Persistent Volume</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-persistent-volumes-claims-component.html">Kubernetes Persistent Volume Claim</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-pods-component.html">Kubernetes Pods</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-replication-controllers-component.html">Kubernetes Replication Controller</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-resources-quota-component.html">Kubernetes Resources Quota</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-secrets-component.html">Kubernetes Secrets</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-service-accounts-component.html">Kubernetes Service Account</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="kubernetes-services-component.html">Kubernetes Services</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openshift-build-configs-component.html">OpenShift Build Config</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openshift-builds-component.html">OpenShift Builds</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openshift-deploymentconfigs-component.html">OpenShift Deployment Configs</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="kudu-component.html">Kudu</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="language-component.html">Language</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="ldap-component.html">LDAP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="ldif-component.html">LDIF</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="log-component.html">Log Data</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="lucene-component.html">Lucene</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="lumberjack-component.html">Lumberjack</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mail-component.html">Mail</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mapstruct-component.html">MapStruct</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="master-component.html">Master</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="metrics-component.html">Metrics</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="micrometer-component.html">Micrometer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mina-component.html">Mina</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mina-sftp-component.html">MINA SFTP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="minio-component.html">Minio</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mllp-component.html">MLLP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mock-component.html">Mock</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mongodb-component.html">MongoDB</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mongodb-gridfs-component.html">MongoDB GridFS</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mustache-component.html">Mustache</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mvel-component.html">MVEL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mybatis-component.html">MyBatis</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="mybatis-bean-component.html">MyBatis Bean</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="nats-component.html">Nats</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="netty-component.html">Netty</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="netty-http-component.html">Netty HTTP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="oaipmh-component.html">OAI-PMH</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="olingo2-component.html">Olingo2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="olingo4-component.html">Olingo4</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="once-component.html">Once</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="milo-browse-component.html">OPC UA Browser</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="milo-client-component.html">OPC UA Client</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="milo-server-component.html">OPC UA Server</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="opensearch-component.html">OpenSearch</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="openstack-summary.html">OpenStack</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openstack-cinder-component.html">OpenStack Cinder</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openstack-glance-component.html">OpenStack Glance</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openstack-keystone-component.html">OpenStack Keystone</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openstack-neutron-component.html">OpenStack Neutron</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openstack-nova-component.html">OpenStack Nova</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="openstack-swift-component.html">OpenStack Swift</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="opentelemetry-metrics-component.html">OpenTelemetry Metrics</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="optaplanner-component.html">OptaPlanner</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="paho-component.html">Paho</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="paho-mqtt5-component.html">Paho MQTT 5</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="pdf-component.html">PDF</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="platform-http-component.html">Platform HTTP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="plc4x-component.html">PLC4X</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="pgevent-component.html">PostgreSQL Event</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="pg-replication-slot-component.html">PostgreSQL Replication Slot</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="pqc-component.html">PQC Algorithms</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="lpr-component.html">Printer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="properties-component.html">Properties</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="pubnub-component.html">PubNub</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="pulsar-component.html">Pulsar</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="quartz-component.html">Quartz</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="quickfix-component.html">QuickFix</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="reactive-streams-component.html">Reactive Streams</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="ref-component.html">Ref</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="rest-component.html">REST</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="rest-api-component.html">REST API</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="rest-openapi-component.html">REST OpenApi</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="robotframework-component.html">Robot Framework</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="rocketmq-component.html">RocketMQ</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="rss-component.html">RSS</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="saga-component.html">Saga</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="salesforce-component.html">Salesforce</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="sap-netweaver-component.html">SAP NetWeaver</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="scheduler-component.html">Scheduler</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="schematron-component.html">Schematron</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="scp-component.html">SCP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="seda-component.html">SEDA</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="servicenow-component.html">ServiceNow</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="servlet-component.html">Servlet</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="sftp-component.html">SFTP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="shell-component.html">Shell</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="sjms-component.html">Simple JMS</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="sjms2-component.html">Simple JMS2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="slack-component.html">Slack</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="smb-component.html">SMB</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="smooks-component.html">Smooks</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="smpp-component.html">SMPP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="snmp-component.html">SNMP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="solr-component.html">Solr</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="splunk-component.html">Splunk</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="splunk-hec-component.html">Splunk HEC</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="spring-summary.html">Spring</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-batch-component.html">Spring Batch</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-event-component.html">Spring Event</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-jdbc-component.html">Spring JDBC</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-ldap-component.html">Spring LDAP</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-rabbitmq-component.html">Spring RabbitMQ</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-redis-component.html">Spring Redis</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="spring-ws-component.html">Spring WebService</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="sql-component.html">SQL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="sql-stored-component.html">SQL Stored Procedure</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="ssh-component.html">SSH</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="stax-component.html">StAX</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="stitch-component.html">Stitch</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="stream-component.html">Stream</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="string-template-component.html">String Template</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="stripe-component.html">Stripe</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="stub-component.html">Stub</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="tahu-summary.html">Tahu</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="tahu-edge-component.html">Tahu Edge Node / Device</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="tahu-host-component.html">Tahu Host Application</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="telegram-component.html">Telegram</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="thrift-component.html">Thrift</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="thymeleaf-component.html">Thymeleaf</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="tika-component.html">Tika</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="timer-component.html">Timer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="twilio-component.html">Twilio</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="twitter-directmessage-component.html">Twitter Direct Message</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="twitter-search-component.html">Twitter Search</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="twitter-timeline-component.html">Twitter Timeline</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="undertow-component.html">Undertow</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="validator-component.html">Validator</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="velocity-component.html">Velocity</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="vertx-component.html">Vert.x</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="vertx-http-component.html">Vert.x HTTP Client</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="vertx-websocket-component.html">Vert.x WebSocket</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="wasm-component.html">Wasm</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="weather-component.html">Weather</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="web3j-component.html">Web3j Ethereum Blockchain</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="webhook-component.html">Webhook</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="whatsapp-component.html">WhatsApp</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="wordpress-component.html">WordPress</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="workday-component.html">Workday</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="xchange-component.html">XChange</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="xj-component.html">XJ</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="xmlsecurity-sign-component.html">XML Security Sign</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="xmlsecurity-verify-component.html">XML Security Verify</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="xmpp-component.html">XMPP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="xquery-component.html">XQuery</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="xslt-component.html">XSLT</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="xslt-saxon-component.html">XSLT Saxon</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="zeebe-component.html">Zeebe</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="zendesk-component.html">Zendesk</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="zookeeper-component.html">ZooKeeper</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="zookeeper-master-component.html">ZooKeeper Master</a> </li> </ul> </li> </ul> </li> <li class="nav-item" data-depth="0"> <ul class="nav-list"> <li class="nav-item" data-depth="1"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="dataformats/index.html">Data Formats</a> <ul class="nav-list"> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/asn1-dataformat.html">ASN.1 File</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/avro-dataformat.html">Avro</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/avroJackson2-dataformat.html">Avro Jackson 2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/avroJackson3-dataformat.html">Avro Jackson 3</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/barcode-dataformat.html">Barcode</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/base64-dataformat.html">Base64</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/beanio-dataformat.html">BeanIO</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/bindy-dataformat.html">Bindy</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/cbor-dataformat.html">CBOR</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/crypto-dataformat.html">Crypto (Java Cryptographic Extension)</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/csv-dataformat.html">CSV</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/dfdl-dataformat.html">DFDL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/fhirJson-dataformat.html">FHIR JSon</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/fhirXml-dataformat.html">FHIR XML</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/flatpack-dataformat.html">Flatpack</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/fory-dataformat.html">Fory</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/grok-dataformat.html">Grok</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/groovyJson-dataformat.html">Groovy JSon</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/groovyXml-dataformat.html">Groovy XML</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/gzipDeflater-dataformat.html">GZip Deflater</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/hl7-dataformat.html">HL7</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/ical-dataformat.html">iCal</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/iso8583-dataformat.html">ISO-8583</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/jacksonXml2-dataformat.html">Jackson XML 2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/jacksonXml3-dataformat.html">Jackson XML 3</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/jaxb-dataformat.html">JAXB</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/fastjson-dataformat.html">JSON Fastjson</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/gson-dataformat.html">JSON Gson</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/jackson2-dataformat.html">JSON Jackson 2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/jackson3-dataformat.html">JSON Jackson 3</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/jsonb-dataformat.html">JSON JSON-B</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/jsonApi-dataformat.html">JSonApi</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/lzf-dataformat.html">LZF Deflate Compression</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/mimeMultipart-dataformat.html">MIME Multipart</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/ocsf-dataformat.html">OCSF</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/parquetAvro-dataformat.html">Parquet File</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/pgp-dataformat.html">PGP (Pretty Good Privacy Cryptographic)</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/pqc-dataformat.html">PQC (Post-Quantum Cryptography)</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/protobuf-dataformat.html">Protobuf</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/protobufJackson2-dataformat.html">Protobuf Jackson 2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/protobufJackson3-dataformat.html">Protobuf Jackson 3</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/rss-dataformat.html">RSS</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/smooks-dataformat.html">Smooks</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/soap-dataformat.html">SOAP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/swiftMt-dataformat.html">SWIFT MT</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/swiftMx-dataformat.html">SWIFT MX</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/syslog-dataformat.html">Syslog</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/tarFile-dataformat.html">Tar File</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/thrift-dataformat.html">Thrift</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/univocityCsv-dataformat.html">uniVocity CSV</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/univocityFixed-dataformat.html">uniVocity Fixed Length</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/univocityTsv-dataformat.html">uniVocity TSV</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/xmlSecurity-dataformat.html">XML Security</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/snakeYaml-dataformat.html">YAML SnakeYAML</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/zipDeflater-dataformat.html">Zip Deflater</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="dataformats/zipFile-dataformat.html">Zip File</a> </li> </ul> </li> </ul> </li> <li class="nav-item" data-depth="0"> <ul class="nav-list"> <li class="nav-item" data-depth="1"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="languages/index.html">Languages</a> <ul class="nav-list"> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/bean-language.html">Bean Method</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/constant-language.html">Constant</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/csimple-language.html">CSimple</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/datasonnet-language.html">DataSonnet</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/exchangeProperty-language.html">ExchangeProperty</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/file-language.html">File</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/groovy-language.html">Groovy</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/header-language.html">Header</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/hl7terser-language.html">HL7 Terser</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/jactl-language.html">Jactl</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/java-language.html">Java</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/js-language.html">JavaScript</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/joor-language.html">jOOR</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/jq-language.html">JQ</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/jsonpath-language.html">JSONPath</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/mvel-language.html">MVEL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/ognl-language.html">OGNL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/python-language.html">Python</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/ref-language.html">Ref</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-language.html">Simple</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-advanced.html">Simple - Advanced Features</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-functions.html">Simple - Built-in Functions</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-operators.html">Simple - Built-in Operators</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-ognl.html">Simple - OGNL Expressions</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/spel-language.html">SpEL</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/tokenize-language.html">Tokenize</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/variable-language.html">Variable</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/wasm-language.html">Wasm</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/xtokenize-language.html">XML Tokenize</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/xpath-language.html">XPath</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/xquery-language.html">XQuery</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-advanced.html">Simple - Advanced Features</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-functions.html">Simple - Built-in Functions</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-ognl.html">Simple - OGNL Expressions</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="languages/simple-operators.html">Simple - Built-in Operators</a> </li> </ul> </li> </ul> </li> <li class="nav-item" data-depth="0"> <ul class="nav-list"> <li class="nav-item" data-depth="1"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="others/index.html">Miscellaneous Components</a> <ul class="nav-list"> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/a2a-consumer.html">A2A - Consumer Guide</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/a2a-producer.html">A2A - Producer Guide</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/attachments.html">Attachments</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/aws-bedrock-examples.html">AWS Bedrock - Examples</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/aws-bedrock-models.html">AWS Bedrock - Supported Models</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/aws2-s3-consumer-examples.html">AWS S3 - Consumer Examples</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/aws2-s3-producer-operations.html">AWS S3 - Producer Operations</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="others/aws2-s3-streaming.html">AWS S3 - Streaming Upload</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="others/azure-schema-registry.html">Azure Schema Registry</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/azure-storage-blob-consumer.html">Azure Storage Blob - Consumer Examples</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/azure-storage-blob-operations.html">Azure Storage Blob - Producer Operations</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/camel-yaml-dsl-validator-maven-plugin.html">Camel YAML DSL Validator Maven Plugin</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/cli-connector.html">CLI Connector</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/cli-debug.html">CLI Debug</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/cloudevents.html">Cloudevents</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/csimple-joor.html">CSimple jOOR</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/cxf-transport.html">CXF Transport</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/debug.html">Debug</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/diagram.html">Diagram</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/docling-async-processing.html">Docling - Asynchronous Processing</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/docling-batch-processing.html">Docling - Batch Processing</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/docling-serve.html">Docling - Using Docling-Serve API</a> </li> <li class="nav-item" data-depth="2"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="others/dsl.html">DSL</a> <ul class="nav-list"> <li class="nav-item" data-depth="3"> <a class="nav-link" href="others/dsl-modeline.html">DSL Modeline</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="others/java-joor-dsl.html">Java DSL (runtime compiled)</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="others/java-xml-jaxb-dsl.html">Jaxb XML Dsl</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="others/kamelet-main.html">Kamelet Main</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="others/kamelet-main-support.html">Kamelet Main Support</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="others/java-xml-io-dsl.html">XML Io Dsl</a> </li> <li class="nav-item" data-depth="3"> <a class="nav-link" href="others/yaml-dsl.html">YAML DSL</a> </li> </ul> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/headersmap.html">Headersmap</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/ibm-watsonx-ai-examples.html">IBM watsonx.ai - Examples</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/jandex.html">Jandex</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/jasypt.html">Jasypt</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/jfr.html">JFR</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/jsoup.html">Jsoup</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/jta.html">JTA</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/keycloak-consumer.html">Keycloak Consumer Operations</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/keycloak-producer.html">Keycloak Producer Operations</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/keycloak-security.html">Keycloak Security Policies</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/langchain4j-agent-guardrails.html">LangChain4j Agent - Input and Output Guardrails</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/langchain4j-agent-mcp.html">LangChain4j Agent - MCP Tools Integration</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/langchain4j-agent-multimodal.html">LangChain4j Agent - Multimodal Content Support</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/langchain4j-tokenizer.html">LangChain4j Tokenizer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/leveldb.html">LevelDB</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/lra.html">LRA</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/mail-microsoft-oauth.html">Mail Microsoft Oauth</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/main.html">Main</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/mdc.html">MDC Logging</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/observation.html">Micrometer Observability</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/micrometer-observability.html">Micrometer Observability 2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/micrometer-prometheus.html">Micrometer Prometheus</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/microprofile-config.html">Microprofile Config</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/microprofile-fault-tolerance.html">Microprofile Fault Tolerance</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/microprofile-health.html">Microprofile Health</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/mina-sftp-authentication.html">MINA SFTP Authentication</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/mina-sftp-migration.html">MINA SFTP Migration from JSch</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/mina-sftp-security.html">MINA SFTP SSH Security</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/oauth.html">Oauth</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/observability-services.html">Observability Services</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/openai-providers.html">OpenAI - Compatible Providers</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/openai-operations.html">OpenAI - Embeddings and Audio Operations</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/openai-mcp.html">OpenAI - MCP Tool Calling</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/openapi-java.html">Openapi Java</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/openapi-validator.html">Openapi Validator</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/opentelemetry.html">OpenTelemetry</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/opentelemetry2.html">Opentelemetry2</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/platform-http-jolokia.html">Platform HTTP Jolokia</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/platform-http-main.html">Platform Http Main</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/platform-http-vertx.html">Platform Http Vertx</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/pqc-hybrid.html">PQC Hybrid Cryptography</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/pqc-key-lifecycle.html">PQC Key Lifecycle Management</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/reactive-executor-tomcat.html">Reactive Executor Tomcat</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/reactive-executor-vertx.html">Reactive Executor Vert.x</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/reactor.html">Reactor</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/redis.html">Redis</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/resilience4j.html">Resilience4j</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/resilience4j-micrometer.html">Resilience4j Micrometer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/resourceresolver-github.html">Resourceresolver Github</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/rxjava.html">RxJava</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/salesforce-bulk-api.html">Salesforce - Bulk API</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/salesforce-reports.html">Salesforce - Reports API</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/salesforce-rest-api.html">Salesforce - REST API</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/salesforce-streaming.html">Salesforce - Streaming and Pub/Sub</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/shiro.html">Shiro</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/spring-cloud-config.html">Spring Cloud Config</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/spring-main.html">Spring Main</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/spring-security.html">Spring Security</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/spring-xml.html">Spring XML</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/springdoc.html">Springdoc</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/telemetry.html">Telemetry</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/telemetry-dev.html">Telemetry Dev</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/test-junit5.html">Test JUnit5</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/test-junit6.html">Test JUnit6</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/test-main-junit5.html">Test Main JUnit5</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/test-main-junit6.html">Test Main JUnit6</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/test-spring-junit5.html">Test Spring JUnit5</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/test-spring-junit6.html">Test Spring JUnit6</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/threadpoolfactory-vertx.html">ThreadPoolFactory Vert.x</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/tracing.html">Tracing</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/undertow-spring-security.html">Undertow Spring Security</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="others/wal.html">Write Ahead Log Strategy for Resume API</a> </li> </ul> </li> </ul> </li> <li class="nav-item" data-depth="0"> <ul class="nav-list"> <li class="nav-item" data-depth="1"> <a class="nav-link" href="eips/enterprise-integration-patterns.html">Enterprise Integration Patterns</a> </li> <li class="nav-item" data-depth="1"> <button class="nav-item-toggle" type="button" aria-label="Expand or contract topic"></button> <a class="nav-link" href="eips/ai-patterns.html">AI Patterns</a> <ul class="nav-list"> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/a2aSubTask-eip.html">A2A Sub Task</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/aggregate-eip.html">Aggregate</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/batchConfig-eip.html">BatchConfig</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/bean-eip.html">Bean</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/change-data-capture.html">Change Data Capture</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/channel-adapter.html">Channel Adapter</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/choice-eip.html">Choice</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/circuitBreaker-eip.html">Circuit Breaker</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/claimCheck-eip.html">Claim Check</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/competing-consumers.html">Competing Consumers</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/composed-message-processor.html">Composed Message Processor</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/content-enricher.html">Content Enricher</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/content-filter-eip.html">Content Filter</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/convertBodyTo-eip.html">Convert Body To</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/convertHeaderTo-eip.html">Convert Header To</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/convertVariableTo-eip.html">Convert Variable To</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/correlation-identifier.html">Correlation Identifier</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/customLoadBalancer-eip.html">Custom Load Balancer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/dead-letter-channel.html">Dead Letter Channel</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/delay-eip.html">Delay</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/doTry-eip.html">Do Try</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/durable-subscriber.html">Durable Subscriber</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/dynamicRouter-eip.html">Dynamic Router</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/enrich-eip.html">Enrich</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/eventDrivenConsumer-eip.html">Event Driven Consumer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/event-message.html">Event Message</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/failoverLoadBalancer-eip.html">Failover Load Balancer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/faultToleranceConfiguration-eip.html">Fault Tolerance Configuration</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/fault-tolerance-eip.html">Fault Tolerance EIP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/filter-eip.html">Filter</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/from-eip.html">From</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/guaranteed-delivery.html">Guaranteed Delivery</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/idempotentConsumer-eip.html">Idempotent Consumer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/intercept.html">Intercept</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/kamelet-eip.html">Kamelet</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/loadBalance-eip.html">Load Balance</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/log-eip.html">Logger</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/loop-eip.html">Loop</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/marshal-eip.html">Marshal</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message.html">Message</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-broker.html">Message Broker</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-bus.html">Message Bus</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-channel.html">Message Channel</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-dispatcher.html">Message Dispatcher</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-endpoint.html">Message Endpoint</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-expiration.html">Message Expiration</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-history.html">Message History</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-router.html">Message Router</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/message-translator.html">Message Translator</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/messaging-bridge.html">Messaging Bridge</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/messaging-gateway.html">Messaging Gateway</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/messaging-mapper.html">Messaging Mapper</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/multicast-eip.html">Multicast</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/normalizer.html">Normalizer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/onFallback-eip.html">On Fallback</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/pausable-eip.html">Pausable</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/pipeline-eip.html">Pipeline</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/point-to-point-channel.html">Point to Point Channel</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/poll-eip.html">Poll</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/pollEnrich-eip.html">Poll Enrich</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/polling-consumer.html">Polling Consumer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/process-eip.html">Process</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/process-manager.html">Process Manager</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/publish-subscribe-channel.html">Publish Subscribe Channel</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/randomLoadBalancer-eip.html">Random Load Balancer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/recipientList-eip.html">Recipient List</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/removeHeader-eip.html">Remove Header</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/removeHeaders-eip.html">Remove Headers</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/removeProperties-eip.html">Remove Properties</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/removeProperty-eip.html">Remove Property</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/removeVariable-eip.html">Remove Variable</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/requestReply-eip.html">Request Reply</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/resequence-eip.html">Resequence</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/resilience4jConfiguration-eip.html">Resilience4j Configuration</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/resilience4j-eip.html">Resilience4j EIP</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/resumable-eip.html">Resumable</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/resume-strategies.html">Resume Strategies</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/return-address.html">Return Address</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/rollback-eip.html">Rollback</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/roundRobinLoadBalancer-eip.html">Round Robin Load Balancer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/routingSlip-eip.html">Routing Slip</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/saga-eip.html">Saga</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/sample-eip.html">Sample</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/scatter-gather.html">Scatter-Gather</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/script-eip.html">Script</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/selective-consumer.html">Selective Consumer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/service-activator.html">Service Activator</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/setBody-eip.html">Set Body</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/setHeader-eip.html">Set Header</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/setHeaders-eip.html">Set Headers</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/setProperty-eip.html">Set Property</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/setVariable-eip.html">Set Variable</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/setVariables-eip.html">Set Variables</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/sort-eip.html">Sort</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/tokenizer-eip.html">Specialized tokenizer for AI applications</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/split-eip.html">Split</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/step-eip.html">Step</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/stickyLoadBalancer-eip.html">Sticky Load Balancer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/stop-eip.html">Stop</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/throwException-eip.html">Stop</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/streamConfig-eip.html">StreamConfig</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/threads-eip.html">Threads</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/throttle-eip.html">Throttle</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/to-eip.html">To</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/toD-eip.html">To D</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/topicLoadBalancer-eip.html">Topic Load Balancer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/transactional-client.html">Transactional Client</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/transform-eip.html">Transform</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/transformDataType-eip.html">Transform Data Type</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/unmarshal-eip.html">Unmarshal</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/validate-eip.html">Validate</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/weightedLoadBalancer-eip.html">Weighted Load Balancer</a> </li> <li class="nav-item" data-depth="2"> <a class="nav-link" href="eips/wireTap-eip.html">Wire Tap</a> </li> </ul> </li> </ul> </li> </ul> </nav> </div> <div class="nav-panel-explore" data-panel="explore"> <div class="context"> <span class="title">Camel Components</span> <span class="version">Next (Pre-release)</span> </div> <ul class="components"> <li class="component"> <span class="title"> <a href="../../manual/index.html">User manual</a> </span></li> <li class="component"> <span class="title"> <a href="../../camel-core/index.html">Camel Core</a> </span></li> <li class="component is-current"><span class="title">Camel Components</span> <ul class="versions"> <li class="version is-current"> <a href="index.html">Next (Pre-release)</a> </li> <li class="version"> <a href="../4.18.x/index.html">4.18.x (LTS)</a> </li> <li class="version"> <a href="../4.14.x/index.html">4.14.x (LTS)</a> </li> </ul></li> <li class="component"><span class="title">Camel Spring Boot</span> <ul class="versions"> <li class="version"> <a href="../../camel-spring-boot/next/index.html">Next (Pre-release)</a> </li> <li class="version"> <a href="../../camel-spring-boot/4.18.x/index.html">4.18.x (LTS)</a> </li> <li class="version"> <a href="../../camel-spring-boot/4.14.x/index.html">4.14.x (LTS)</a> </li> </ul></li> <li class="component"><span class="title">Camel Quarkus</span> <ul class="versions"> <li class="version"> <a href="../../camel-quarkus/next/index.html">Next (Pre-release)</a> </li> <li class="version"> <a href="../../camel-quarkus/3.33.x/index.html">3.33.x</a> </li> <li class="version"> <a href="../../camel-quarkus/3.27.x/index.html">3.27.x</a> </li> </ul></li> <li class="component"><span class="title">Kamelet Catalog</span> <ul class="versions"> <li class="version"> <a href="../../camel-kamelets/next/index.html">Next (Pre-release)</a> </li> <li class="version"> <a href="../../camel-kamelets/4.18.x/index.html">4.18.x (LTS)</a> </li> <li class="version"> <a href="../../camel-kamelets/4.14.x/index.html">4.14.x (LTS)</a> </li> </ul></li> <li class="component"><span class="title">Camel K</span> <ul class="versions"> <li class="version"> <a href="../../camel-k/next/index.html">Next (Pre-release)</a> </li> <li class="version"> <a href="../../camel-k/2.10.x/index.html">2.10.x</a> </li> <li class="version"> <a href="../../camel-k/2.9.x/index.html">2.9.x (LTS)</a> </li> </ul></li> <li class="component"><span class="title">Camel Kafka Connector</span> <ul class="versions"> <li class="version"> <a href="../../camel-kafka-connector/next/index.html">Next (Pre-release)</a> </li> </ul></li> <li class="component"><span class="title">Camel Karaf</span> <ul class="versions"> <li class="version"> <a href="../../camel-karaf/4.9.x/index.html">4.9.x</a> </li> </ul></li> </ul> </div> </div> </aside> </div> <main class="article"> <nav class="toolbar" aria-label="Toolbar"> <button class="nav-toggle" type="button" aria-label="Toggle submenu"></button> <nav class="breadcrumbs" aria-label="breadcrumbs"> <ul> <li><a href="index.html">Camel Components</a></li> <li><a href="index.html">Components</a></li> <li><a href="google-summary.html">Google</a></li> <li><a href="google-firestore-component.html">Google Firestore</a></li> </ul> </nav> <div class="page-versions"> <button class="version-menu-toggle" type="button" title="Show other versions of page">Next (Pre-release)</button> <div class="version-menu"> <a class="version is-current" href="google-firestore-component.html">Next (Pre-release)</a> <a class="version is-missing" href="../4.18.x/index.html">4.18.x (LTS)</a> <a class="version is-missing" href="../4.14.x/index.html">4.14.x (LTS)</a> </div> </div> <div class="edit-this-page"><a href="https://github.com/apache/camel/edit/main/docs/components/modules/ROOT/pages/google-firestore-component.adoc">Edit this Page</a></div> </nav> <div class="content"> <article class="doc"> <h1 class="page">Google Firestore</h1> <div id="preamble"> <div class="sectionbody"> <div class="paragraph"> <p><strong>Since Camel 4.19</strong></p> </div> <div class="paragraph"> <p><strong>Both producer and consumer are supported</strong></p> </div> <div class="paragraph"> <p>The Google Firestore component provides access to <a href="https://cloud.google.com/firestore">Google Cloud Firestore</a> via the <a href="https://github.com/googleapis/java-firestore">Google Cloud Firestore Java library</a>.</p> </div> <div class="paragraph"> <p>Firestore is a flexible, scalable NoSQL cloud database for mobile, web, and server development. It keeps your data in sync across client apps through realtime listeners and offers offline support.</p> </div> <div class="paragraph"> <p>Maven users will need to add the following dependency to their pom.xml for this component:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;dependency&gt;
&lt;groupId&gt;org.apache.camel&lt;/groupId&gt;
&lt;artifactId&gt;camel-google-firestore&lt;/artifactId&gt;
&lt;!-- use the same version as your Camel core version --&gt;
&lt;version&gt;x.x.x&lt;/version&gt;
&lt;/dependency&gt;</code></pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="GoogleFirestore-AuthenticationConfiguration"><a class="anchor" href="#GoogleFirestore-AuthenticationConfiguration"></a>Authentication Configuration</h2> <div class="sectionbody"> <div class="paragraph"> <p>Google Firestore component authentication is targeted for use with GCP Service Accounts. For more information, please refer to <a href="https://cloud.google.com/firestore/docs/quickstart-servers">Google Firestore Quickstart</a>.</p> </div> <div class="paragraph"> <p>When you have the <strong>service account key</strong>, you can provide authentication credentials to your application code. Google security credentials can be set through the component endpoint:</p> </div> <div class="listingblock"> <div class="title"><em>Java-only: constructing the endpoint URI programmatically</em></div> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">String endpoint = "google-firestore://myCollection?serviceAccountKey=/home/user/Downloads/my-key.json&amp;projectId=my-project";</code></pre> </div> </div> <div class="paragraph"> <p>Or by providing the path to the GCP credentials file location:</p> </div> <div class="paragraph"> <p>Provide authentication credentials to your application code by setting the environment variable <code>GOOGLE_APPLICATION_CREDENTIALS</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre>export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"</pre> </div> </div> </div> </div> <div class="sect1"> <h2 id="_uri_format"><a class="anchor" href="#_uri_format"></a>URI Format</h2> <div class="sectionbody"> <div class="listingblock"> <div class="content"> <pre>google-firestore://collectionName?[options]</pre> </div> </div> <div class="paragraph"> <p>You can append query options to the URI in the following format: <code>?options=value&amp;option2=value&amp;&#8230;&#8203;</code></p> </div> <div class="paragraph"> <p>For example, to get a document from the <code>users</code> collection:</p> </div> <div id="_tabs_1" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_1_java" class="tab"> <p>Java</p> </li> <li id="_tabs_1_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_1_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_1_java--panel" class="tabpanel" aria-labelledby="_tabs_1_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.to("google-firestore://users?operation=getDocumentById&amp;serviceAccountKey=/path/to/key.json&amp;projectId=my-project")
.to("log:result");</code></pre> </div> </div> </div> <div id="_tabs_1_xml--panel" class="tabpanel" aria-labelledby="_tabs_1_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;constant&gt;user123&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=getDocumentById&amp;amp;serviceAccountKey=/path/to/key.json&amp;amp;projectId=my-project"/&gt;
&lt;to uri="log:result"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_1_yaml--panel" class="tabpanel" aria-labelledby="_tabs_1_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setHeader:
name: CamelGoogleFirestoreDocumentId
constant: user123
- to:
uri: google-firestore://users
parameters:
operation: getDocumentById
serviceAccountKey: /path/to/key.json
projectId: my-project
- to:
uri: log:result</code></pre> </div> </div> </div> </div> </div> </div> </div> <div class="sect1"> <h2 id="_configuring_options"><a class="anchor" href="#_configuring_options"></a>Configuring Options</h2> <div class="sectionbody"> <div class="paragraph"> <p>Camel components are configured on two separate levels:</p> </div> <div class="ulist"> <ul> <li> <p>component level</p> </li> <li> <p>endpoint level</p> </li> </ul> </div> <div class="sect2"> <h3 id="_configuring_component_options"><a class="anchor" href="#_configuring_component_options"></a>Configuring Component Options</h3> <div class="paragraph"> <p>At the component level, you set general and shared configurations that are, then, inherited by the endpoints. It is the highest configuration level.</p> </div> <div class="paragraph"> <p>For example, a component may have security settings, credentials for authentication, urls for network connection and so forth.</p> </div> <div class="paragraph"> <p>Some components only have a few options, and others may have many. Because components typically have pre-configured defaults that are commonly used, then you may often only need to configure a few options on a component; or none at all.</p> </div> <div class="paragraph"> <p>You can configure components using:</p> </div> <div class="ulist"> <ul> <li> <p>the <a href="../../manual/component-dsl.html" class="xref page">Component DSL</a>.</p> </li> <li> <p>in a configuration file (<code>application.properties</code>, <code>*.yaml</code> files, etc).</p> </li> <li> <p>directly in the Java code.</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_configuring_endpoint_options"><a class="anchor" href="#_configuring_endpoint_options"></a>Configuring Endpoint Options</h3> <div class="paragraph"> <p>You usually spend more time setting up endpoints because they have many options. These options help you customize what you want the endpoint to do. The options are also categorized into whether the endpoint is used as a consumer (<em>from</em>), as a producer (<em>to</em>), or both.</p> </div> <div class="paragraph"> <p>Configuring endpoints is most often done directly in the endpoint URI as <em>path</em> and <em>query</em> parameters. You can also use the <a href="../../manual/Endpoint-dsl.html" class="xref page">Endpoint DSL</a> and <a href="../../manual/dataformat-dsl.html" class="xref page">DataFormat DSL</a> as a <em>type safe</em> way of configuring endpoints and data formats in Java.</p> </div> <div class="paragraph"> <p>A good practice when configuring options is to use <a href="../../manual/using-propertyplaceholder.html" class="xref page">Property Placeholders</a>.</p> </div> <div class="paragraph"> <p>Property placeholders provide a few benefits:</p> </div> <div class="ulist"> <ul> <li> <p>They help prevent using hardcoded urls, port numbers, sensitive information, and other settings.</p> </li> <li> <p>They allow externalizing the configuration from the code.</p> </li> <li> <p>They help the code to become more flexible and reusable.</p> </li> </ul> </div> <div class="paragraph"> <p>The following two sections list all the options, firstly for the component followed by the endpoint.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="_component_options"><a class="anchor" href="#_component_options"></a>Component Options</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Google Firestore component supports the following options which are listed below.</p> </div> <div class="table-wrapper"><table class="tableblock frame-all grid-all stretch"> <colgroup> <col> <col> <col> <col> </colgroup> <thead> <tr> <th class="tableblock halign-left valign-top">Name</th> <th class="tableblock halign-left valign-top">Description</th> <th class="tableblock halign-center valign-top">Default</th> <th class="tableblock halign-left valign-top">Type</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_configuration"></a> <a href="#_component_option_configuration" class="anchor"></a><strong>configuration</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The component configuration.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">GoogleFirestoreConfiguration</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_databaseId"></a> <a href="#_component_option_databaseId" class="anchor"></a><strong>databaseId</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The Firestore database ID. If not specified, the default database '(default)' will be used.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_firestoreClient"></a> <a href="#_component_option_firestoreClient" class="anchor"></a><strong>firestoreClient</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p><strong>Autowired</strong> The Firestore client to use for operations.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Firestore</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_projectId"></a> <a href="#_component_option_projectId" class="anchor"></a><strong>projectId</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The Google Cloud project ID. If not specified, it will be determined from the service account key or environment.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_serviceAccountKey"></a> <a href="#_component_option_serviceAccountKey" class="anchor"></a><strong>serviceAccountKey</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The Service account key that can be used as credentials for the Firestore client. It can be loaded by default from classpath, but you can prefix with classpath:, file:, or http: to load the resource from different systems.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_bridgeErrorHandler"></a> <a href="#_component_option_bridgeErrorHandler" class="anchor"></a><strong>bridgeErrorHandler</strong> (consumer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_realtimeUpdates"></a> <a href="#_component_option_realtimeUpdates" class="anchor"></a><strong>realtimeUpdates</strong> (consumer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>When true, the consumer will listen for real-time updates on the collection.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_documentId"></a> <a href="#_component_option_documentId" class="anchor"></a><strong>documentId</strong> (producer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The document ID to use for document-specific operations.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_lazyStartProducer"></a> <a href="#_component_option_lazyStartProducer" class="anchor"></a><strong>lazyStartProducer</strong> (producer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel&#8217;s routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_operation"></a> <a href="#_component_option_operation" class="anchor"></a><strong>operation</strong> (producer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Set the operation for the producer.</p> </div> <div class="paragraph"> <p>Enum values:</p> </div> <div class="ulist"> <ul> <li> <p>setDocument</p> </li> <li> <p>getDocumentById</p> </li> <li> <p>updateDocument</p> </li> <li> <p>deleteDocument</p> </li> <li> <p>queryCollection</p> </li> <li> <p>listDocuments</p> </li> <li> <p>listCollections</p> </li> <li> <p>createDocument</p> </li> </ul> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">GoogleFirestoreOperations</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_autowiredEnabled"></a> <a href="#_component_option_autowiredEnabled" class="anchor"></a><strong>autowiredEnabled</strong> (advanced)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which then gets configured on the component. This can be used for automatic configuring JDBC data sources, JMS connection factories, AWS Clients, etc.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">true</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_healthCheckConsumerEnabled"></a> <a href="#_component_option_healthCheckConsumerEnabled" class="anchor"></a><strong>healthCheckConsumerEnabled</strong> (health)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Used for enabling or disabling all consumer based health checks from this component.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">true</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_component_option_healthCheckProducerEnabled"></a> <a href="#_component_option_healthCheckProducerEnabled" class="anchor"></a><strong>healthCheckProducerEnabled</strong> (health)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Used for enabling or disabling all producer based health checks from this component. Notice: Camel has by default disabled all producer based health-checks. You can turn on producer checks globally by setting camel.health.producersEnabled=true.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">true</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> </tbody> </table></div> </div> </div> <div class="sect1"> <h2 id="_endpoint_options"><a class="anchor" href="#_endpoint_options"></a>Endpoint Options</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Google Firestore endpoint is configured using URI syntax:</p> </div> <div class="listingblock"> <div class="content"> <pre>google-firestore:collectionName</pre> </div> </div> <div class="paragraph"> <p>With the following <em>path</em> and <em>query</em> parameters:</p> </div> <div class="sect2"> <h3 id="_path_parameters"><a class="anchor" href="#_path_parameters"></a>Path Parameters</h3> <div class="table-wrapper"><table class="tableblock frame-all grid-all stretch"> <colgroup> <col> <col> <col> <col> </colgroup> <thead> <tr> <th class="tableblock halign-left valign-top">Name</th> <th class="tableblock halign-left valign-top">Description</th> <th class="tableblock halign-center valign-top">Default</th> <th class="tableblock halign-left valign-top">Type</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_path_option_collectionName"></a> <a href="#_endpoint_path_option_collectionName" class="anchor"></a><strong>collectionName</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p><strong>Required</strong> The collection name to use.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> </tbody> </table></div> </div> <div class="sect2"> <h3 id="_query_parameters"><a class="anchor" href="#_query_parameters"></a>Query Parameters</h3> <div class="table-wrapper"><table class="tableblock frame-all grid-all stretch"> <colgroup> <col> <col> <col> <col> </colgroup> <thead> <tr> <th class="tableblock halign-left valign-top">Name</th> <th class="tableblock halign-left valign-top">Description</th> <th class="tableblock halign-center valign-top">Default</th> <th class="tableblock halign-left valign-top">Type</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_databaseId"></a> <a href="#_endpoint_query_option_databaseId" class="anchor"></a><strong>databaseId</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The Firestore database ID. If not specified, the default database '(default)' will be used.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_firestoreClient"></a> <a href="#_endpoint_query_option_firestoreClient" class="anchor"></a><strong>firestoreClient</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p><strong>Autowired</strong> The Firestore client to use for operations.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Firestore</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_projectId"></a> <a href="#_endpoint_query_option_projectId" class="anchor"></a><strong>projectId</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The Google Cloud project ID. If not specified, it will be determined from the service account key or environment.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_serviceAccountKey"></a> <a href="#_endpoint_query_option_serviceAccountKey" class="anchor"></a><strong>serviceAccountKey</strong> (common)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The Service account key that can be used as credentials for the Firestore client. It can be loaded by default from classpath, but you can prefix with classpath:, file:, or http: to load the resource from different systems.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_realtimeUpdates"></a> <a href="#_endpoint_query_option_realtimeUpdates" class="anchor"></a><strong>realtimeUpdates</strong> (consumer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>When true, the consumer will listen for real-time updates on the collection.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_sendEmptyMessageWhenIdle"></a> <a href="#_endpoint_query_option_sendEmptyMessageWhenIdle" class="anchor"></a><strong>sendEmptyMessageWhenIdle</strong> (consumer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>If the polling consumer did not poll any files, you can enable this option to send an empty message (no body) instead.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_bridgeErrorHandler"></a> <a href="#_endpoint_query_option_bridgeErrorHandler" class="anchor"></a><strong>bridgeErrorHandler</strong> (consumer (advanced))</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions (if possible) occurred while the Camel consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. Important: This is only possible if the 3rd party component allows Camel to be alerted if an exception was thrown. Some components handle this internally only, and therefore bridgeErrorHandler is not possible. In other situations we may improve the Camel component to hook into the 3rd party component and make this possible for future releases. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_exceptionHandler"></a> <a href="#_endpoint_query_option_exceptionHandler" class="anchor"></a><strong>exceptionHandler</strong> (consumer (advanced))</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>To let the consumer use a custom ExceptionHandler. Notice if the option bridgeErrorHandler is enabled then this option is not in use. By default the consumer will deal with exceptions, that will be logged at WARN or ERROR level and ignored.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">ExceptionHandler</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_exchangePattern"></a> <a href="#_endpoint_query_option_exchangePattern" class="anchor"></a><strong>exchangePattern</strong> (consumer (advanced))</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Sets the exchange pattern when the consumer creates an exchange.</p> </div> <div class="paragraph"> <p>Enum values:</p> </div> <div class="ulist"> <ul> <li> <p>InOnly</p> </li> <li> <p>InOut</p> </li> </ul> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">ExchangePattern</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_pollStrategy"></a> <a href="#_endpoint_query_option_pollStrategy" class="anchor"></a><strong>pollStrategy</strong> (consumer (advanced))</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>A pluggable org.apache.camel.PollingConsumerPollingStrategy allowing you to provide your custom implementation to control error handling usually occurred during the poll operation before an Exchange have been created and being routed in Camel.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">PollingConsumerPollStrategy</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_documentId"></a> <a href="#_endpoint_query_option_documentId" class="anchor"></a><strong>documentId</strong> (producer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The document ID to use for document-specific operations.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_operation"></a> <a href="#_endpoint_query_option_operation" class="anchor"></a><strong>operation</strong> (producer)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Set the operation for the producer.</p> </div> <div class="paragraph"> <p>Enum values:</p> </div> <div class="ulist"> <ul> <li> <p>setDocument</p> </li> <li> <p>getDocumentById</p> </li> <li> <p>updateDocument</p> </li> <li> <p>deleteDocument</p> </li> <li> <p>queryCollection</p> </li> <li> <p>listDocuments</p> </li> <li> <p>listCollections</p> </li> <li> <p>createDocument</p> </li> </ul> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">GoogleFirestoreOperations</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_lazyStartProducer"></a> <a href="#_endpoint_query_option_lazyStartProducer" class="anchor"></a><strong>lazyStartProducer</strong> (producer (advanced))</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel&#8217;s routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_backoffErrorThreshold"></a> <a href="#_endpoint_query_option_backoffErrorThreshold" class="anchor"></a><strong>backoffErrorThreshold</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The number of subsequent error polls (failed due some error) that should happen before the backoffMultipler should kick-in.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_backoffIdleThreshold"></a> <a href="#_endpoint_query_option_backoffIdleThreshold" class="anchor"></a><strong>backoffIdleThreshold</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The number of subsequent idle polls that should happen before the backoffMultipler should kick-in.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_backoffMultiplier"></a> <a href="#_endpoint_query_option_backoffMultiplier" class="anchor"></a><strong>backoffMultiplier</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>To let the scheduled polling consumer backoff if there has been a number of subsequent idles/errors in a row. The multiplier is then the number of polls that will be skipped before the next actual attempt is happening again. When this option is in use then backoffIdleThreshold and/or backoffErrorThreshold must also be configured.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">int</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_delay"></a> <a href="#_endpoint_query_option_delay" class="anchor"></a><strong>delay</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Milliseconds before the next poll.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">500</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">long</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_greedy"></a> <a href="#_endpoint_query_option_greedy" class="anchor"></a><strong>greedy</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>If greedy is enabled, then the ScheduledPollConsumer will run immediately again, if the previous run polled 1 or more messages.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_initialDelay"></a> <a href="#_endpoint_query_option_initialDelay" class="anchor"></a><strong>initialDelay</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Milliseconds before the first poll starts.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">1000</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">long</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_repeatCount"></a> <a href="#_endpoint_query_option_repeatCount" class="anchor"></a><strong>repeatCount</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Specifies a maximum limit of number of fires. So if you set it to 1, the scheduler will only fire once. If you set it to 5, it will only fire five times. A value of zero or negative means fire forever.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">0</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">long</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_runLoggingLevel"></a> <a href="#_endpoint_query_option_runLoggingLevel" class="anchor"></a><strong>runLoggingLevel</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The consumer logs a start/complete log line when it polls. This option allows you to configure the logging level for that.</p> </div> <div class="paragraph"> <p>Enum values:</p> </div> <div class="ulist"> <ul> <li> <p>TRACE</p> </li> <li> <p>DEBUG</p> </li> <li> <p>INFO</p> </li> <li> <p>WARN</p> </li> <li> <p>ERROR</p> </li> <li> <p>OFF</p> </li> </ul> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">TRACE</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">LoggingLevel</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_scheduledExecutorService"></a> <a href="#_endpoint_query_option_scheduledExecutorService" class="anchor"></a><strong>scheduledExecutorService</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Allows for configuring a custom/shared thread pool to use for the consumer. By default each consumer has its own single threaded thread pool.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">ScheduledExecutorService</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_scheduler"></a> <a href="#_endpoint_query_option_scheduler" class="anchor"></a><strong>scheduler</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>To use a cron scheduler from either camel-spring or camel-quartz component. Use value spring or quartz for built in scheduler.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">none</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Object</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_schedulerProperties"></a> <a href="#_endpoint_query_option_schedulerProperties" class="anchor"></a><strong>schedulerProperties</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>To configure additional properties when using a custom scheduler or any of the Quartz, Spring based scheduler. This is a multi-value option with prefix: scheduler.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Map</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_startScheduler"></a> <a href="#_endpoint_query_option_startScheduler" class="anchor"></a><strong>startScheduler</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Whether the scheduler should be auto started.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">true</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_timeUnit"></a> <a href="#_endpoint_query_option_timeUnit" class="anchor"></a><strong>timeUnit</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Time unit for initialDelay and delay options.</p> </div> <div class="paragraph"> <p>Enum values:</p> </div> <div class="ulist"> <ul> <li> <p>NANOSECONDS</p> </li> <li> <p>MICROSECONDS</p> </li> <li> <p>MILLISECONDS</p> </li> <li> <p>SECONDS</p> </li> <li> <p>MINUTES</p> </li> <li> <p>HOURS</p> </li> <li> <p>DAYS</p> </li> </ul> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">MILLISECONDS</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">TimeUnit</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_query_option_useFixedDelay"></a> <a href="#_endpoint_query_option_useFixedDelay" class="anchor"></a><strong>useFixedDelay</strong> (scheduler)</p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>Controls if fixed delay or fixed rate is used. See ScheduledExecutorService in JDK for details.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">true</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">boolean</p></td> </tr> </tbody> </table></div> </div> </div> </div> <div class="sect1"> <h2 id="_message_headers"><a class="anchor" href="#_message_headers"></a>Message Headers</h2> <div class="sectionbody"> <div class="paragraph"> <p>The Google Firestore component supports the following message header(s), which is/are listed below:</p> </div> <div class="table-wrapper"><table class="tableblock frame-all grid-all stretch"> <colgroup> <col> <col> <col> <col> </colgroup> <thead> <tr> <th class="tableblock halign-left valign-top">Name</th> <th class="tableblock halign-left valign-top">Description</th> <th class="tableblock halign-center valign-top">Default</th> <th class="tableblock halign-left valign-top">Type</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreOperation"></a> <a href="#_endpoint_header_CamelGoogleFirestoreOperation" class="anchor"></a><strong>CamelGoogleFirestoreOperation</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#OPERATION"><code>OPERATION</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The operation to perform.</p> </div> <div class="paragraph"> <p>Enum values:</p> </div> <div class="ulist"> <ul> <li> <p>setDocument</p> </li> <li> <p>getDocumentById</p> </li> <li> <p>updateDocument</p> </li> <li> <p>deleteDocument</p> </li> <li> <p>queryCollection</p> </li> <li> <p>listDocuments</p> </li> <li> <p>listCollections</p> </li> <li> <p>createDocument</p> </li> </ul> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">GoogleFirestoreOperations</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreCollectionName"></a> <a href="#_endpoint_header_CamelGoogleFirestoreCollectionName" class="anchor"></a><strong>CamelGoogleFirestoreCollectionName</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#COLLECTION_NAME"><code>COLLECTION_NAME</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The collection name to use for the operation.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreDocumentId"></a> <a href="#_endpoint_header_CamelGoogleFirestoreDocumentId" class="anchor"></a><strong>CamelGoogleFirestoreDocumentId</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#DOCUMENT_ID"><code>DOCUMENT_ID</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The document ID to use for the operation.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreQueryField"></a> <a href="#_endpoint_header_CamelGoogleFirestoreQueryField" class="anchor"></a><strong>CamelGoogleFirestoreQueryField</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#QUERY_FIELD"><code>QUERY_FIELD</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The field name for query filtering.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreQueryOperator"></a> <a href="#_endpoint_header_CamelGoogleFirestoreQueryOperator" class="anchor"></a><strong>CamelGoogleFirestoreQueryOperator</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#QUERY_OPERATOR"><code>QUERY_OPERATOR</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The operator for query filtering (e.g., ==, , =, !=, array-contains, in, array-contains-any, not-in).</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreQueryValue"></a> <a href="#_endpoint_header_CamelGoogleFirestoreQueryValue" class="anchor"></a><strong>CamelGoogleFirestoreQueryValue</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#QUERY_VALUE"><code>QUERY_VALUE</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The value for query filtering.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Object</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreQueryLimit"></a> <a href="#_endpoint_header_CamelGoogleFirestoreQueryLimit" class="anchor"></a><strong>CamelGoogleFirestoreQueryLimit</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#QUERY_LIMIT"><code>QUERY_LIMIT</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The maximum number of documents to return in a query.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Integer</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreQueryOrderBy"></a> <a href="#_endpoint_header_CamelGoogleFirestoreQueryOrderBy" class="anchor"></a><strong>CamelGoogleFirestoreQueryOrderBy</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#QUERY_ORDER_BY"><code>QUERY_ORDER_BY</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The field to order the query results by.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreQueryOrderDirection"></a> <a href="#_endpoint_header_CamelGoogleFirestoreQueryOrderDirection" class="anchor"></a><strong>CamelGoogleFirestoreQueryOrderDirection</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#QUERY_ORDER_DIRECTION"><code>QUERY_ORDER_DIRECTION</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The direction to order the query results (ASCENDING or DESCENDING).</p> </div> <div class="paragraph"> <p>Enum values:</p> </div> <div class="ulist"> <ul> <li> <p>ASCENDING</p> </li> <li> <p>DESCENDING</p> </li> </ul> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Query$Direction</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreResponseDocumentId"></a> <a href="#_endpoint_header_CamelGoogleFirestoreResponseDocumentId" class="anchor"></a><strong>CamelGoogleFirestoreResponseDocumentId</strong> (consumer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#RESPONSE_DOCUMENT_ID"><code>RESPONSE_DOCUMENT_ID</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The document ID from the response.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreResponseDocumentPath"></a> <a href="#_endpoint_header_CamelGoogleFirestoreResponseDocumentPath" class="anchor"></a><strong>CamelGoogleFirestoreResponseDocumentPath</strong> (consumer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#RESPONSE_DOCUMENT_PATH"><code>RESPONSE_DOCUMENT_PATH</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The document path from the response.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreResponseCreateTime"></a> <a href="#_endpoint_header_CamelGoogleFirestoreResponseCreateTime" class="anchor"></a><strong>CamelGoogleFirestoreResponseCreateTime</strong> (consumer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#RESPONSE_CREATE_TIME"><code>RESPONSE_CREATE_TIME</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The document create time.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Timestamp</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreResponseUpdateTime"></a> <a href="#_endpoint_header_CamelGoogleFirestoreResponseUpdateTime" class="anchor"></a><strong>CamelGoogleFirestoreResponseUpdateTime</strong> (consumer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#RESPONSE_UPDATE_TIME"><code>RESPONSE_UPDATE_TIME</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The document update time.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Timestamp</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreResponseReadTime"></a> <a href="#_endpoint_header_CamelGoogleFirestoreResponseReadTime" class="anchor"></a><strong>CamelGoogleFirestoreResponseReadTime</strong> (consumer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#RESPONSE_READ_TIME"><code>RESPONSE_READ_TIME</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>The document read time.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Timestamp</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreMerge"></a> <a href="#_endpoint_header_CamelGoogleFirestoreMerge" class="anchor"></a><strong>CamelGoogleFirestoreMerge</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#MERGE"><code>MERGE</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>When true, merge the data with existing document data instead of overwriting.</p> </div></div></td> <td class="tableblock halign-center valign-top"><p class="tableblock">false</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Boolean</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><a id="_endpoint_header_CamelGoogleFirestoreMergeFields"></a> <a href="#_endpoint_header_CamelGoogleFirestoreMergeFields" class="anchor"></a><strong>CamelGoogleFirestoreMergeFields</strong> (producer)</p> <p class="tableblock">Constant: <a href="https://javadoc.io/doc/org.apache.camel/camel-google-firestore/latest/org/apache/camel/component/google/firestore/GoogleFirestoreConstants.html#MERGE_FIELDS"><code>MERGE_FIELDS</code></a></p></td> <td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph"> <p>List of field paths to merge when using merge option.</p> </div></div></td> <td class="tableblock halign-center valign-top"></td> <td class="tableblock halign-left valign-top"><p class="tableblock">List</p></td> </tr> </tbody> </table></div> </div> </div> <div class="sect1"> <h2 id="_usage"><a class="anchor" href="#_usage"></a>Usage</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="_google_firestore_producer_operations"><a class="anchor" href="#_google_firestore_producer_operations"></a>Google Firestore Producer Operations</h3> <div class="paragraph"> <p>Google Firestore component provides the following operations on the producer side:</p> </div> <div class="ulist"> <ul> <li> <p><code>setDocument</code> - Create or overwrite a document with a specific ID</p> </li> <li> <p><code>createDocument</code> - Create a new document with an auto-generated ID</p> </li> <li> <p><code>getDocumentById</code> - Retrieve a document by its ID</p> </li> <li> <p><code>updateDocument</code> - Update specific fields of a document</p> </li> <li> <p><code>deleteDocument</code> - Delete a document</p> </li> <li> <p><code>queryCollection</code> - Query documents with filters</p> </li> <li> <p><code>listDocuments</code> - List all documents in a collection</p> </li> <li> <p><code>listCollections</code> - List all collections</p> </li> </ul> </div> <div class="paragraph"> <p>If you don&#8217;t specify an operation explicitly, the producer will perform a <code>setDocument</code> operation.</p> </div> </div> <div class="sect2"> <h3 id="_supported_input_formats"><a class="anchor" href="#_supported_input_formats"></a>Supported Input Formats</h3> <div class="paragraph"> <p>For operations that require document data (<code>setDocument</code>, <code>createDocument</code>, <code>updateDocument</code>), the component accepts the following input formats:</p> </div> <div class="ulist"> <ul> <li> <p><strong>Map&lt;String, Object&gt;</strong> - Java Map with field names as keys</p> </li> <li> <p><strong>JSON String</strong> - A valid JSON object string (e.g., <code>{"name": "John", "age": 30}</code>)</p> </li> <li> <p><strong>Any object</strong> - Convertible to Map via Camel&#8217;s type converter</p> </li> </ul> </div> <div class="paragraph"> <p>JSON String Example:</p> </div> <div id="_tabs_2" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_2_java" class="tab"> <p>Java</p> </li> <li id="_tabs_2_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_2_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_2_java--panel" class="tabpanel" aria-labelledby="_tabs_2_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setBody(constant("{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"age\":30,\"active\":true}"))
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.to("google-firestore://users?operation=setDocument");</code></pre> </div> </div> </div> <div id="_tabs_2_xml--panel" class="tabpanel" aria-labelledby="_tabs_2_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setBody&gt;
&lt;constant&gt;{"name":"John Doe","email":"john@example.com","age":30,"active":true}&lt;/constant&gt;
&lt;/setBody&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;constant&gt;user123&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=setDocument"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_2_yaml--panel" class="tabpanel" aria-labelledby="_tabs_2_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setBody:
constant: '{"name":"John Doe","email":"john@example.com","age":30,"active":true}'
- setHeader:
name: CamelGoogleFirestoreDocumentId
constant: user123
- to:
uri: google-firestore://users
parameters:
operation: setDocument</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_google_firestore_consumer"><a class="anchor" href="#_google_firestore_consumer"></a>Google Firestore Consumer</h3> <div class="paragraph"> <p>The consumer can poll documents from a collection or listen for real-time updates.</p> </div> <div class="ulist"> <ul> <li> <p><strong>Polling mode</strong> (default): Periodically polls the collection for all documents</p> </li> <li> <p><strong>Real-time mode</strong>: Listens for document changes using Firestore&#8217;s real-time listeners</p> </li> </ul> </div> <div class="paragraph"> <p>To enable real-time updates:</p> </div> <div id="_tabs_3" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_3_java" class="tab"> <p>Java</p> </li> <li id="_tabs_3_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_3_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_3_java--panel" class="tabpanel" aria-labelledby="_tabs_3_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("google-firestore://myCollection?realtimeUpdates=true")
.to("log:changes");</code></pre> </div> </div> </div> <div id="_tabs_3_xml--panel" class="tabpanel" aria-labelledby="_tabs_3_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="google-firestore://myCollection?realtimeUpdates=true"/&gt;
&lt;to uri="log:changes"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_3_yaml--panel" class="tabpanel" aria-labelledby="_tabs_3_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: google-firestore://myCollection
parameters:
realtimeUpdates: true
steps:
- to:
uri: log:changes</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_advanced_component_configuration"><a class="anchor" href="#_advanced_component_configuration"></a>Advanced Component Configuration</h3> <div class="paragraph"> <p>If you need more control over the <code>Firestore</code> client instance configuration, you can create your own instance and refer to it in your Camel google-firestore component configuration:</p> </div> <div id="_tabs_4" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_4_java" class="tab"> <p>Java</p> </li> <li id="_tabs_4_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_4_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_4_java--panel" class="tabpanel" aria-labelledby="_tabs_4_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("google-firestore://myCollection?firestoreClient=#myFirestoreClient")
.to("mock:result");</code></pre> </div> </div> </div> <div id="_tabs_4_xml--panel" class="tabpanel" aria-labelledby="_tabs_4_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="google-firestore://myCollection?firestoreClient=#myFirestoreClient"/&gt;
&lt;to uri="mock:result"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_4_yaml--panel" class="tabpanel" aria-labelledby="_tabs_4_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: google-firestore://myCollection
parameters:
firestoreClient: "#myFirestoreClient"
steps:
- to:
uri: mock:result</code></pre> </div> </div> </div> </div> </div> </div> </div> </div> <div class="sect1"> <h2 id="_producer_operation_examples"><a class="anchor" href="#_producer_operation_examples"></a>Producer Operation Examples</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="_create_document_with_auto_generated_id"><a class="anchor" href="#_create_document_with_auto_generated_id"></a>Create Document with Auto-Generated ID</h3> <div class="paragraph"> <p>This operation creates a new document with an auto-generated unique ID:</p> </div> <div id="_tabs_5" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_5_java" class="tab"> <p>Java</p> </li> <li id="_tabs_5_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_5_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_5_java--panel" class="tabpanel" aria-labelledby="_tabs_5_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setBody(constant("{\"name\":\"John Doe\",\"email\":\"john@example.com\",\"age\":30}"))
.to("google-firestore://users?operation=createDocument")
.log("Created document with ID: ${header.CamelGoogleFirestoreResponseDocumentId}");</code></pre> </div> </div> </div> <div id="_tabs_5_xml--panel" class="tabpanel" aria-labelledby="_tabs_5_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setBody&gt;
&lt;constant&gt;{"name":"John Doe","email":"john@example.com","age":30}&lt;/constant&gt;
&lt;/setBody&gt;
&lt;to uri="google-firestore://users?operation=createDocument"/&gt;
&lt;log message="Created document with ID: ${header.CamelGoogleFirestoreResponseDocumentId}"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_5_yaml--panel" class="tabpanel" aria-labelledby="_tabs_5_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setBody:
constant: '{"name":"John Doe","email":"john@example.com","age":30}'
- to:
uri: google-firestore://users
parameters:
operation: createDocument
- log:
message: "Created document with ID: ${header.CamelGoogleFirestoreResponseDocumentId}"</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_set_document_with_specific_id"><a class="anchor" href="#_set_document_with_specific_id"></a>Set Document with Specific ID</h3> <div class="paragraph"> <p>This operation creates or overwrites a document with a specific ID:</p> </div> <div id="_tabs_6" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_6_java" class="tab"> <p>Java</p> </li> <li id="_tabs_6_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_6_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_6_java--panel" class="tabpanel" aria-labelledby="_tabs_6_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setBody(constant("{\"name\":\"Jane Doe\",\"email\":\"jane@example.com\"}"))
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.to("google-firestore://users?operation=setDocument")
.log("Document saved");</code></pre> </div> </div> </div> <div id="_tabs_6_xml--panel" class="tabpanel" aria-labelledby="_tabs_6_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setBody&gt;
&lt;constant&gt;{"name":"Jane Doe","email":"jane@example.com"}&lt;/constant&gt;
&lt;/setBody&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;constant&gt;user123&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=setDocument"/&gt;
&lt;log message="Document saved"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_6_yaml--panel" class="tabpanel" aria-labelledby="_tabs_6_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setBody:
constant: '{"name":"Jane Doe","email":"jane@example.com"}'
- setHeader:
name: CamelGoogleFirestoreDocumentId
constant: user123
- to:
uri: google-firestore://users
parameters:
operation: setDocument
- log:
message: "Document saved"</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_set_document_with_merge"><a class="anchor" href="#_set_document_with_merge"></a>Set Document with Merge</h3> <div class="paragraph"> <p>To merge data with an existing document instead of overwriting:</p> </div> <div id="_tabs_7" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_7_java" class="tab"> <p>Java</p> </li> <li id="_tabs_7_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_7_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_7_java--panel" class="tabpanel" aria-labelledby="_tabs_7_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setBody(constant("{\"lastLogin\":\"2025-01-15T10:30:00Z\"}"))
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.setHeader("CamelGoogleFirestoreMerge", constant(true))
.to("google-firestore://users?operation=setDocument")
.log("Document merged");</code></pre> </div> </div> </div> <div id="_tabs_7_xml--panel" class="tabpanel" aria-labelledby="_tabs_7_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setBody&gt;
&lt;constant&gt;{"lastLogin":"2025-01-15T10:30:00Z"}&lt;/constant&gt;
&lt;/setBody&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;constant&gt;user123&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;setHeader name="CamelGoogleFirestoreMerge"&gt;
&lt;constant&gt;true&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=setDocument"/&gt;
&lt;log message="Document merged"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_7_yaml--panel" class="tabpanel" aria-labelledby="_tabs_7_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setBody:
constant: '{"lastLogin":"2025-01-15T10:30:00Z"}'
- setHeader:
name: CamelGoogleFirestoreDocumentId
constant: user123
- setHeader:
name: CamelGoogleFirestoreMerge
constant: true
- to:
uri: google-firestore://users
parameters:
operation: setDocument
- log:
message: "Document merged"</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_get_document_by_id"><a class="anchor" href="#_get_document_by_id"></a>Get Document by ID</h3> <div class="paragraph"> <p>This operation retrieves a document by its ID:</p> </div> <div id="_tabs_8" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_8_java" class="tab"> <p>Java</p> </li> <li id="_tabs_8_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_8_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_8_java--panel" class="tabpanel" aria-labelledby="_tabs_8_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.to("google-firestore://users?operation=getDocumentById")
.log("Document data: ${body}");</code></pre> </div> </div> </div> <div id="_tabs_8_xml--panel" class="tabpanel" aria-labelledby="_tabs_8_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;constant&gt;user123&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=getDocumentById"/&gt;
&lt;log message="Document data: ${body}"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_8_yaml--panel" class="tabpanel" aria-labelledby="_tabs_8_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setHeader:
name: CamelGoogleFirestoreDocumentId
constant: user123
- to:
uri: google-firestore://users
parameters:
operation: getDocumentById
- log:
message: "Document data: ${body}"</code></pre> </div> </div> </div> </div> </div> <div class="paragraph"> <p>The response body will contain a <code>Map&lt;String, Object&gt;</code> with the document data, or <code>null</code> if the document doesn&#8217;t exist.</p> </div> </div> <div class="sect2"> <h3 id="_update_document"><a class="anchor" href="#_update_document"></a>Update Document</h3> <div class="paragraph"> <p>This operation updates specific fields without overwriting the entire document:</p> </div> <div id="_tabs_9" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_9_java" class="tab"> <p>Java</p> </li> <li id="_tabs_9_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_9_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_9_java--panel" class="tabpanel" aria-labelledby="_tabs_9_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setBody(constant("{\"status\":\"active\",\"updatedAt\":\"2025-01-15T10:30:00Z\"}"))
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.to("google-firestore://users?operation=updateDocument")
.log("Document updated");</code></pre> </div> </div> </div> <div id="_tabs_9_xml--panel" class="tabpanel" aria-labelledby="_tabs_9_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setBody&gt;
&lt;constant&gt;{"status":"active","updatedAt":"2025-01-15T10:30:00Z"}&lt;/constant&gt;
&lt;/setBody&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;constant&gt;user123&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=updateDocument"/&gt;
&lt;log message="Document updated"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_9_yaml--panel" class="tabpanel" aria-labelledby="_tabs_9_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setBody:
constant: '{"status":"active","updatedAt":"2025-01-15T10:30:00Z"}'
- setHeader:
name: CamelGoogleFirestoreDocumentId
constant: user123
- to:
uri: google-firestore://users
parameters:
operation: updateDocument
- log:
message: "Document updated"</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_delete_document"><a class="anchor" href="#_delete_document"></a>Delete Document</h3> <div class="paragraph"> <p>This operation deletes a document:</p> </div> <div id="_tabs_10" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_10_java" class="tab"> <p>Java</p> </li> <li id="_tabs_10_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_10_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_10_java--panel" class="tabpanel" aria-labelledby="_tabs_10_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.to("google-firestore://users?operation=deleteDocument")
.log("Document deleted: ${body}");</code></pre> </div> </div> </div> <div id="_tabs_10_xml--panel" class="tabpanel" aria-labelledby="_tabs_10_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;constant&gt;user123&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=deleteDocument"/&gt;
&lt;log message="Document deleted: ${body}"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_10_yaml--panel" class="tabpanel" aria-labelledby="_tabs_10_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setHeader:
name: CamelGoogleFirestoreDocumentId
constant: user123
- to:
uri: google-firestore://users
parameters:
operation: deleteDocument
- log:
message: "Document deleted: ${body}"</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_list_documents"><a class="anchor" href="#_list_documents"></a>List Documents</h3> <div class="paragraph"> <p>This operation lists all documents in a collection:</p> </div> <div id="_tabs_11" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_11_java" class="tab"> <p>Java</p> </li> <li id="_tabs_11_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_11_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_11_java--panel" class="tabpanel" aria-labelledby="_tabs_11_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.to("google-firestore://users?operation=listDocuments")
.log("Found ${body.size()} documents");</code></pre> </div> </div> </div> <div id="_tabs_11_xml--panel" class="tabpanel" aria-labelledby="_tabs_11_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;to uri="google-firestore://users?operation=listDocuments"/&gt;
&lt;log message="Found ${body.size()} documents"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_11_yaml--panel" class="tabpanel" aria-labelledby="_tabs_11_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- to:
uri: google-firestore://users
parameters:
operation: listDocuments
- log: "Found ${body.size()} documents"</code></pre> </div> </div> </div> </div> </div> <div class="paragraph"> <p>The response body will contain a <code>List&lt;Map&lt;String, Object&gt;&gt;</code> with each document&#8217;s data. Each document includes <code>_id</code> and <code>_path</code> fields with the document ID and path.</p> </div> </div> <div class="sect2"> <h3 id="_query_collection"><a class="anchor" href="#_query_collection"></a>Query Collection</h3> <div class="paragraph"> <p>This operation queries documents with filters:</p> </div> <div id="_tabs_12" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_12_java" class="tab"> <p>Java</p> </li> <li id="_tabs_12_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_12_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_12_java--panel" class="tabpanel" aria-labelledby="_tabs_12_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setHeader("CamelGoogleFirestoreQueryField", constant("age"))
.setHeader("CamelGoogleFirestoreQueryOperator", constant("&gt;="))
.setHeader("CamelGoogleFirestoreQueryValue", constant(21))
.setHeader("CamelGoogleFirestoreQueryLimit", constant(10))
.setHeader("CamelGoogleFirestoreQueryOrderBy", constant("age"))
.to("google-firestore://users?operation=queryCollection")
.log("Found ${body.size()} matching documents");</code></pre> </div> </div> </div> <div id="_tabs_12_xml--panel" class="tabpanel" aria-labelledby="_tabs_12_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setHeader name="CamelGoogleFirestoreQueryField"&gt;
&lt;constant&gt;age&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;setHeader name="CamelGoogleFirestoreQueryOperator"&gt;
&lt;constant&gt;&amp;gt;=&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;setHeader name="CamelGoogleFirestoreQueryValue"&gt;
&lt;constant&gt;21&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;setHeader name="CamelGoogleFirestoreQueryLimit"&gt;
&lt;constant&gt;10&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;setHeader name="CamelGoogleFirestoreQueryOrderBy"&gt;
&lt;constant&gt;age&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=queryCollection"/&gt;
&lt;log message="Found ${body.size()} matching documents"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_12_yaml--panel" class="tabpanel" aria-labelledby="_tabs_12_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setHeader:
name: CamelGoogleFirestoreQueryField
constant: age
- setHeader:
name: CamelGoogleFirestoreQueryOperator
constant: "&gt;="
- setHeader:
name: CamelGoogleFirestoreQueryValue
constant: "21"
- setHeader:
name: CamelGoogleFirestoreQueryLimit
constant: "10"
- setHeader:
name: CamelGoogleFirestoreQueryOrderBy
constant: age
- to:
uri: google-firestore://users
parameters:
operation: queryCollection
- log:
message: "Found ${body.size()} matching documents"</code></pre> </div> </div> </div> </div> </div> <div class="paragraph"> <p>Supported query operators:</p> </div> <div class="ulist"> <ul> <li> <p><code>==</code> or <code>eq</code> - Equal to</p> </li> <li> <p><code>!=</code> or <code>ne</code> - Not equal to</p> </li> <li> <p><code>&lt;</code> or <code>lt</code> - Less than</p> </li> <li> <p><code>&#8656;</code> or <code>lte</code> - Less than or equal to</p> </li> <li> <p><code>&gt;</code> or <code>gt</code> - Greater than</p> </li> <li> <p><code>&gt;=</code> or <code>gte</code> - Greater than or equal to</p> </li> <li> <p><code>array-contains</code> - Array contains value</p> </li> <li> <p><code>in</code> - Value in list</p> </li> <li> <p><code>array-contains-any</code> - Array contains any value in list</p> </li> <li> <p><code>not-in</code> - Value not in list</p> </li> </ul> </div> </div> <div class="sect2"> <h3 id="_list_collections"><a class="anchor" href="#_list_collections"></a>List Collections</h3> <div class="paragraph"> <p>This operation lists all collections in the database:</p> </div> <div id="_tabs_13" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_13_java" class="tab"> <p>Java</p> </li> <li id="_tabs_13_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_13_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_13_java--panel" class="tabpanel" aria-labelledby="_tabs_13_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.to("google-firestore://anyCollection?operation=listCollections")
.log("Collections: ${body}");</code></pre> </div> </div> </div> <div id="_tabs_13_xml--panel" class="tabpanel" aria-labelledby="_tabs_13_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;to uri="google-firestore://anyCollection?operation=listCollections"/&gt;
&lt;log message="Collections: ${body}"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_13_yaml--panel" class="tabpanel" aria-labelledby="_tabs_13_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- to:
uri: google-firestore://anyCollection
parameters:
operation: listCollections
- log: "Collections: ${body}"</code></pre> </div> </div> </div> </div> </div> <div class="paragraph"> <p>To list subcollections under a specific document:</p> </div> <div id="_tabs_14" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_14_java" class="tab"> <p>Java</p> </li> <li id="_tabs_14_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_14_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_14_java--panel" class="tabpanel" aria-labelledby="_tabs_14_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("direct:start")
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.to("google-firestore://users?operation=listCollections")
.log("Subcollections: ${body}");</code></pre> </div> </div> </div> <div id="_tabs_14_xml--panel" class="tabpanel" aria-labelledby="_tabs_14_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="direct:start"/&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;constant&gt;user123&lt;/constant&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=listCollections"/&gt;
&lt;log message="Subcollections: ${body}"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_14_yaml--panel" class="tabpanel" aria-labelledby="_tabs_14_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: direct:start
steps:
- setHeader:
name: CamelGoogleFirestoreDocumentId
constant: user123
- to:
uri: google-firestore://users
parameters:
operation: listCollections
- log:
message: "Subcollections: ${body}"</code></pre> </div> </div> </div> </div> </div> </div> </div> </div> <div class="sect1"> <h2 id="_consumer_examples"><a class="anchor" href="#_consumer_examples"></a>Consumer Examples</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="_poll_documents"><a class="anchor" href="#_poll_documents"></a>Poll Documents</h3> <div class="paragraph"> <p>Poll all documents from a collection every 30 seconds:</p> </div> <div id="_tabs_15" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_15_java" class="tab"> <p>Java</p> </li> <li id="_tabs_15_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_15_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_15_java--panel" class="tabpanel" aria-labelledby="_tabs_15_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("google-firestore://users?delay=30000")
.log("Document ID: ${header.CamelGoogleFirestoreResponseDocumentId}")
.log("Document data: ${body}")
.to("mock:result");</code></pre> </div> </div> </div> <div id="_tabs_15_xml--panel" class="tabpanel" aria-labelledby="_tabs_15_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="google-firestore://users?delay=30000"/&gt;
&lt;log message="Document ID: ${header.CamelGoogleFirestoreResponseDocumentId}"/&gt;
&lt;log message="Document data: ${body}"/&gt;
&lt;to uri="mock:result"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_15_yaml--panel" class="tabpanel" aria-labelledby="_tabs_15_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: google-firestore://users
parameters:
delay: 30000
steps:
- log: "Document ID: ${header.CamelGoogleFirestoreResponseDocumentId}"
- log: "Document data: ${body}"
- to:
uri: mock:result</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_real_time_updates"><a class="anchor" href="#_real_time_updates"></a>Real-time Updates</h3> <div class="paragraph"> <p>Listen for document changes in real-time:</p> </div> <div id="_tabs_16" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_16_java" class="tab"> <p>Java</p> </li> <li id="_tabs_16_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_16_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_16_java--panel" class="tabpanel" aria-labelledby="_tabs_16_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("google-firestore://users?realtimeUpdates=true")
.log("Change type: ${header.CamelGoogleFirestoreChangeType}")
.log("Document ID: ${header.CamelGoogleFirestoreResponseDocumentId}")
.log("Document data: ${body}")
.to("mock:result");</code></pre> </div> </div> </div> <div id="_tabs_16_xml--panel" class="tabpanel" aria-labelledby="_tabs_16_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="google-firestore://users?realtimeUpdates=true"/&gt;
&lt;log message="Change type: ${header.CamelGoogleFirestoreChangeType}"/&gt;
&lt;log message="Document ID: ${header.CamelGoogleFirestoreResponseDocumentId}"/&gt;
&lt;log message="Document data: ${body}"/&gt;
&lt;to uri="mock:result"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_16_yaml--panel" class="tabpanel" aria-labelledby="_tabs_16_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: google-firestore://users
parameters:
realtimeUpdates: true
steps:
- log: "Change type: ${header.CamelGoogleFirestoreChangeType}"
- log: "Document ID: ${header.CamelGoogleFirestoreResponseDocumentId}"
- log: "Document data: ${body}"
- to:
uri: mock:result</code></pre> </div> </div> </div> </div> </div> <div class="paragraph"> <p>The <code>CamelGoogleFirestoreChangeType</code> header indicates the type of change: <code>ADDED</code>, <code>MODIFIED</code>, or <code>REMOVED</code>.</p> </div> </div> </div> </div> <div class="sect1"> <h2 id="_data_types"><a class="anchor" href="#_data_types"></a>Data Types</h2> <div class="sectionbody"> <div class="sect2"> <h3 id="_input_data_formats"><a class="anchor" href="#_input_data_formats"></a>Input Data Formats</h3> <div class="paragraph"> <p>For write operations (<code>setDocument</code>, <code>createDocument</code>, <code>updateDocument</code>), the component accepts the following input formats in the message body:</p> </div> <div class="table-wrapper"><table class="tableblock frame-all grid-all stretch"> <colgroup> <col> <col> <col> </colgroup> <thead> <tr> <th class="tableblock halign-left valign-top">Format</th> <th class="tableblock halign-left valign-top">Description</th> <th class="tableblock halign-left valign-top">Example</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Map&lt;String, Object&gt;</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Java Map with field names as keys</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Map.of("name", "John", "age", 30)</code></p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">JSON String</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Valid JSON object string</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>{"name": "John", "age": 30}</code></p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock">POJO</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Any object convertible to Map via Camel&#8217;s type converter</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Custom Java beans</p></td> </tr> </tbody> </table></div> <div class="sect3"> <h4 id="_json_string_input"><a class="anchor" href="#_json_string_input"></a>JSON String Input</h4> <div class="paragraph"> <p>You can send a JSON string directly as the message body. The component will automatically parse it:</p> </div> <div class="listingblock"> <div class="title"><em>Java-only: JSON string input with text blocks</em></div> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">// Simple JSON
from("direct:start")
.setBody(constant("{\"name\": \"John\", \"age\": 30}"))
.setHeader("CamelGoogleFirestoreDocumentId", constant("user123"))
.to("google-firestore://users?operation=setDocument");
// Multi-line JSON with text blocks (Java 15+)
String json = """
{
"name": "John Doe",
"email": "john@example.com",
"age": 30,
"active": true,
"tags": ["admin", "user"],
"address": {
"street": "123 Main St",
"city": "New York",
"zip": "10001"
}
}
""";
from("direct:start")
.setBody(constant(json))
.to("google-firestore://users?operation=createDocument");</code></pre> </div> </div> </div> <div class="sect3"> <h4 id="_reading_json_from_files"><a class="anchor" href="#_reading_json_from_files"></a>Reading JSON from Files</h4> <div id="_tabs_17" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_17_java" class="tab"> <p>Java</p> </li> <li id="_tabs_17_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_17_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_17_java--panel" class="tabpanel" aria-labelledby="_tabs_17_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("file:data/users?noop=true&amp;include=.*\\.json")
.setHeader("CamelGoogleFirestoreDocumentId", simple("${file:name.noext}"))
.to("google-firestore://users?operation=setDocument")
.log("Imported: ${file:name}");</code></pre> </div> </div> </div> <div id="_tabs_17_xml--panel" class="tabpanel" aria-labelledby="_tabs_17_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="file:data/users?noop=true&amp;amp;include=.*\.json"/&gt;
&lt;setHeader name="CamelGoogleFirestoreDocumentId"&gt;
&lt;simple&gt;${file:name.noext}&lt;/simple&gt;
&lt;/setHeader&gt;
&lt;to uri="google-firestore://users?operation=setDocument"/&gt;
&lt;log message="Imported: ${file:name}"/&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_17_yaml--panel" class="tabpanel" aria-labelledby="_tabs_17_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: file:data/users
parameters:
noop: true
include: ".*\\.json"
steps:
- setHeader:
name: CamelGoogleFirestoreDocumentId
simple: "${file:name.noext}"
- to:
uri: google-firestore://users
parameters:
operation: setDocument
- log:
message: "Imported: ${file:name}"</code></pre> </div> </div> </div> </div> </div> </div> <div class="sect3"> <h4 id="_rest_api_integration"><a class="anchor" href="#_rest_api_integration"></a>REST API Integration</h4> <div id="_tabs_18" class="openblock tabs is-sync is-loading"> <div class="content"> <div class="ulist tablist"> <ul> <li id="_tabs_18_java" class="tab"> <p>Java</p> </li> <li id="_tabs_18_xml" class="tab"> <p>XML</p> </li> <li id="_tabs_18_yaml" class="tab"> <p>YAML</p> </li> </ul> </div> <div id="_tabs_18_java--panel" class="tabpanel" aria-labelledby="_tabs_18_java"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-java hljs" data-lang="java">from("rest:post:/api/users")
.to("google-firestore://users?operation=createDocument")
.setBody(simple("{\"id\": \"${header.CamelGoogleFirestoreResponseDocumentId}\"}"));</code></pre> </div> </div> </div> <div id="_tabs_18_xml--panel" class="tabpanel" aria-labelledby="_tabs_18_xml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-xml hljs" data-lang="xml">&lt;route&gt;
&lt;from uri="rest:post:/api/users"/&gt;
&lt;to uri="google-firestore://users?operation=createDocument"/&gt;
&lt;setBody&gt;
&lt;simple&gt;{"id": "${header.CamelGoogleFirestoreResponseDocumentId}"}&lt;/simple&gt;
&lt;/setBody&gt;
&lt;/route&gt;</code></pre> </div> </div> </div> <div id="_tabs_18_yaml--panel" class="tabpanel" aria-labelledby="_tabs_18_yaml"> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-yaml hljs" data-lang="yaml">- route:
from:
uri: rest:post:/api/users
steps:
- to:
uri: google-firestore://users
parameters:
operation: createDocument
- setBody:
simple: '{"id": "${header.CamelGoogleFirestoreResponseDocumentId}"}'</code></pre> </div> </div> </div> </div> </div> </div> </div> <div class="sect2"> <h3 id="_supported_firestore_data_types"><a class="anchor" href="#_supported_firestore_data_types"></a>Supported Firestore Data Types</h3> <div class="paragraph"> <p>The following Java types are automatically converted to Firestore data types:</p> </div> <div class="table-wrapper"><table class="tableblock frame-all grid-all stretch"> <colgroup> <col> <col> <col> </colgroup> <thead> <tr> <th class="tableblock halign-left valign-top">Java Type</th> <th class="tableblock halign-left valign-top">Firestore Type</th> <th class="tableblock halign-left valign-top">Notes</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">String</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Text data</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Integer</code>, <code>Long</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Integer</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">64-bit signed integer</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Double</code>, <code>Float</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Floating-point</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">64-bit double precision</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Boolean</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code> or <code>false</code></p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Date</code>, <code>java.sql.Timestamp</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Timestamp</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Converted to Firestore Timestamp</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>com.google.cloud.Timestamp</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Timestamp</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Native Firestore Timestamp</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>List&lt;?&gt;</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Array</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Ordered list, nested types supported</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Map&lt;String, ?&gt;</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Map</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Nested document/object</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>null</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Null</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Null value</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>byte[]</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Bytes</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Binary data (max 1MB)</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>com.google.cloud.firestore.GeoPoint</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">GeoPoint</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Latitude/longitude coordinates</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>com.google.cloud.firestore.DocumentReference</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Reference</p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Reference to another document</p></td> </tr> </tbody> </table></div> </div> <div class="sect2"> <h3 id="_output_data_formats"><a class="anchor" href="#_output_data_formats"></a>Output Data Formats</h3> <div class="sect3"> <h4 id="_single_document_operations"><a class="anchor" href="#_single_document_operations"></a>Single Document Operations</h4> <div class="paragraph"> <p>For <code>getDocumentById</code>, the response body is:</p> </div> <div class="ulist"> <ul> <li> <p><code>Map&lt;String, Object&gt;</code> - Document data if found</p> </li> <li> <p><code>null</code> - If document does not exist</p> </li> </ul> </div> </div> <div class="sect3"> <h4 id="_listquery_operations"><a class="anchor" href="#_listquery_operations"></a>List/Query Operations</h4> <div class="paragraph"> <p>For <code>listDocuments</code> and <code>queryCollection</code>, the response body is:</p> </div> <div class="ulist"> <ul> <li> <p><code>List&lt;Map&lt;String, Object&gt;&gt;</code> - List of documents</p> </li> </ul> </div> <div class="paragraph"> <p>Each document Map includes additional metadata fields:</p> </div> <div class="ulist"> <ul> <li> <p><code>_id</code> - The document ID</p> </li> <li> <p><code>_path</code> - The full document path (e.g., <code>users/user123</code>)</p> </li> </ul> </div> </div> <div class="sect3"> <h4 id="_delete_operation"><a class="anchor" href="#_delete_operation"></a>Delete Operation</h4> <div class="paragraph"> <p>For <code>deleteDocument</code>, the response body is:</p> </div> <div class="ulist"> <ul> <li> <p><code>Boolean</code> - Always <code>true</code> (Firestore delete is idempotent)</p> </li> </ul> </div> </div> <div class="sect3"> <h4 id="_list_collections_operation"><a class="anchor" href="#_list_collections_operation"></a>List Collections Operation</h4> <div class="paragraph"> <p>For <code>listCollections</code>, the response body is:</p> </div> <div class="ulist"> <ul> <li> <p><code>List&lt;String&gt;</code> - List of collection IDs</p> </li> </ul> </div> </div> </div> <div class="sect2"> <h3 id="_error_handling"><a class="anchor" href="#_error_handling"></a>Error Handling</h3> <div class="paragraph"> <p>If the input body cannot be converted to a Map (e.g., invalid JSON), an <code>InvalidPayloadException</code> is thrown:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlightjs highlight"><code class="language-text hljs" data-lang="text">org.apache.camel.InvalidPayloadException: No body available of type: java.util.Map
...Caused by: Unexpected character ('x' (code 120)): was expecting...</code></pre> </div> </div> </div> </div> </div> <div class="sect1"> <h2 id="_message_headers_2"><a class="anchor" href="#_message_headers_2"></a>Message Headers</h2> <div class="sectionbody"> <div class="paragraph"> <p>The component uses the following headers:</p> </div> <div class="sect2"> <h3 id="_producer_headers_input"><a class="anchor" href="#_producer_headers_input"></a>Producer Headers (Input)</h3> <div class="table-wrapper"><table class="tableblock frame-all grid-all stretch"> <colgroup> <col> <col> <col> </colgroup> <thead> <tr> <th class="tableblock halign-left valign-top">Header</th> <th class="tableblock halign-left valign-top">Type</th> <th class="tableblock halign-left valign-top">Description</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreOperation</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>GoogleFirestoreOperations</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The operation to perform</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreCollectionName</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Override the collection name</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreDocumentId</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The document ID for document operations</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreQueryField</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Field name for query filtering</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreQueryOperator</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Operator for query filtering</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreQueryValue</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Object</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Value for query filtering</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreQueryLimit</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Integer</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Maximum documents to return</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreQueryOrderBy</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Field to order results by</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreQueryOrderDirection</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Query.Direction</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Order direction (ASCENDING/DESCENDING)</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreMerge</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Boolean</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Merge data with existing document</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreMergeFields</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>List&lt;String&gt;</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Specific fields to merge</p></td> </tr> </tbody> </table></div> </div> <div class="sect2"> <h3 id="_consumerresponse_headers_output"><a class="anchor" href="#_consumerresponse_headers_output"></a>Consumer/Response Headers (Output)</h3> <div class="table-wrapper"><table class="tableblock frame-all grid-all stretch"> <colgroup> <col> <col> <col> </colgroup> <thead> <tr> <th class="tableblock halign-left valign-top">Header</th> <th class="tableblock halign-left valign-top">Type</th> <th class="tableblock halign-left valign-top">Description</th> </tr> </thead> <tbody> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreResponseDocumentId</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The document ID</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreResponseDocumentPath</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">The full document path</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreResponseCreateTime</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Timestamp</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Document creation time</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreResponseUpdateTime</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Timestamp</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Document last update time</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreResponseReadTime</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>Timestamp</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Document read time</p></td> </tr> <tr> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>CamelGoogleFirestoreChangeType</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock"><code>String</code></p></td> <td class="tableblock halign-left valign-top"><p class="tableblock">Change type for real-time updates (ADDED, MODIFIED, REMOVED)</p></td> </tr> </tbody> </table></div> </div> </div> </div> </article> <aside class="toc sidebar" aria-label="Table of contents" data-title="Contents" data-levels="2"> <div class="toc-menu"></div> </aside> </div> </main> </div> <div class="footer-tools"> <a href="#top" title="Reach the top of the page">Back to top</a> </div> <footer> <div class="footer"> <figure class="logo"> <img src="../../_/img/logo-d-a567cee6fa.svg" class="logo-small mt-60" alt="Apache Camel Logo" aria-label="white silhouette of a camel in front of a sand dune"> </figure> <input id="footer-toggle-overview" type="checkbox" title="Show/Hide Overview section"> <dl> <dt><label for="footer-toggle-overview">Overview</label><label for="footer-toggle-overview">&#65291;</label></dt> <dd><a href="../../blog/">Blog</a></dd> <dd><a href="../../docs/">Documentation</a></dd> <dd><a href="../../community/support/">Community</a></dd> <dd><a href="../../download/">Download</a></dd> </dl> <input id="footer-toggle-documentation" type="checkbox" title="Show/Hide Documentation section"> <dl> <dt><label for="footer-toggle-documentation">Documentation</label><label for="footer-toggle-documentation">&#65291;</label></dt> <dd><a href="../../manual/">User Manual</a></dd> <dd><a href="../../components/next/index.html">Components</a></dd> <dd><a href="../../camel-k/next/">Camel-K</a></dd> <dd><a href="../../camel-kafka-connector/next/">Camel Kafka Connector</a></dd> <dd><a href="../../camel-quarkus/next/">Camel Quarkus</a></dd> <dd><a href="../../camel-spring-boot/next/">Camel Spring Boot</a></dd> <dd><a href="../../camel-karaf/latest/">Camel Karaf</a></dd> <dd><a href="../../manual/faq/index.html">FAQ</a></dd> </dl> <input id="footer-toggle-community" type="checkbox" title="Show/Hide Community section"> <dl> <dt><label for="footer-toggle-community">Community</label><label for="footer-toggle-community">&#65291;</label></dt> <dd><a href="../../community/support/">Support</a></dd> <dd><a href="../../community/contributing/">Contributing</a></dd> <dd><a href="../../community/mailing-list/">Mailing Lists</a></dd> <dd><a href="../../community/user-stories/">User stories</a></dd> <dd><a href="../../community/articles/">Articles</a></dd> <dd><a href="../../community/books/">Books</a></dd> <dd><a href="../../community/team/">Team</a></dd> </dl> <input id="footer-toggle-about" type="checkbox" title="Show/Hide Acknowledgements section"> <dl> <dt><label for="footer-toggle-about">About</label><label for="footer-toggle-about">&#65291;</label></dt> <dd><a href="../../acknowledgments/">Acknowledgments</a></dd> <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/events/current-event.html" title="Apache Events">Apache Events</a></dd> <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/licenses/" title="License">License</a></dd> <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/security/" title="Security">Security</a></dd> <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/foundation/sponsorship.html" title="Sponsorship">Sponsorship</a></dd> <dd><a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/foundation/thanks.html" title="Thanks">Thanks</a></dd> </dl> <p class="remark"> &copy; 2004-2026 The <a href="https://apache.org">Apache Software Foundation</a>.<br> Apache Camel, Camel, Apache, the Apache feather logo, and the Apache Camel project logo are trademarks of The Apache Software Foundation. All other marks mentioned may be trademarks or registered trademarks of their respective owners. </p> <div class="resources"> <div class="context"> <a href="https://privacy.apache.org/policies/privacy-policy-public.html">Privacy Policy</a> </div> <div class="context"> <a target="_blank" rel="noopener noreferrer nofollow" href="https://www.apache.org/foundation/policies/conduct">Code of Conduct</a> </div> <div class="context"> <a href="../../sitemap/">Sitemap</a> </div> </div> <div class="footer-icons"> <a rel="noopener noreferrer nofollow" href="https://github.com/apache/camel/" title="Collaborate on GitHub"><svg class="brand-icon" focusable="false"><use xlink:href="../../_/img/brand-logos-a2b35bbdec.svg#github"/></svg></a> <a rel="noopener noreferrer nofollow" href="https://camel.zulipchat.com" title="Chat on Zulip"><svg class="brand-icon" focusable="false"><use xlink:href="../../_/img/brand-logos-a2b35bbdec.svg#zulip"/></svg></a> <a rel="noopener noreferrer nofollow" href="https://twitter.com/ApacheCamel" title="Follow Apache Camel on Twitter"><svg class="brand-icon" focusable="false"><use xlink:href="../../_/img/brand-logos-a2b35bbdec.svg#twitter"/></svg></a> <a rel="noopener noreferrer nofollow" href="https://www.linkedin.com/groups/2447439/" title="Apache Camel group on Linkedin"><svg class="brand-icon" focusable="false"><use xlink:href="../../_/img/brand-logos-a2b35bbdec.svg#linkedin"/></svg></a> </div> </div> </footer> <script src="../../_/js/vendor/algoliasearch-c7d08807d6.js"></script> <script src="../../_/js/site-0eeb09d476.js"></script> <script async src="../../_/js/vendor/highlight-621a10fe1b.js"></script> <script async src="../../_/js/vendor/svg4everybody-a0c573f2b9.js"></script> <script async src="../../_/js/vendor/tabs-5aea11bcf5.js" data-sync-storage-key="preferred-tab"></script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "Organization", "name": "Apache Camel", "url": "https://camel.apache.org", "sameAs": [ "https://twitter.com/ApacheCamel" ], "logo": "../../_/img/logo-d-a567cee6fa.svg", "description": "Apache Camel ™ is a versatile open-source integration framework based on known Enterprise Integration Patterns. Camel empowers you to define routing and mediation rules in a variety of domain-specific languages, including a Java-based Fluent API, Spring or Blueprint XML Configuration files, and a Scala DSL." } </script> <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [{ "@type": "ListItem", "position": 1, "name": "Apache Camel", "item": "https://camel.apache.org/" }, { "@type": "ListItem", "position": 2, "name": "Camel Components", "item": "https://camel.apache.org/components/4.18.x/index.html" }, { "@type": "ListItem", "position": 3, "name": "Next (Pre-release)", "item": "https://camel.apache.org/components/next/index.html" }, { "@type": "ListItem", "position": 4, "name": "Components", "item": "https://camel.apache.org/components/next/index.html" }, { "@type": "ListItem", "position": 5, "name": "Google", "item": "https://camel.apache.org/components/next/google-summary.html" }, { "@type": "ListItem", "position": 6, "name": "Google Firestore", "item": "https://camel.apache.org/components/next/google-firestore-component.html" }] } </script> </body> </html>