From 41e850d42c0d97579b72229f359495b053520ad7 Mon Sep 17 00:00:00 2001 From: Andrea Cosentino Date: Fri, 29 May 2026 09:31:11 +0200 Subject: [PATCH] CAMEL-23577: doc-sync 4.18.x/4.14.x header-rename upgrade-guide entries to main MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The camel-4x-upgrade-guide-4_XX.adoc files on main act as the canonical history across all release lines. The 2026-05 Exchange-header-constant rename cascade (CAMEL-23577) was backported to camel-4.18.x and camel-4.14.x with the corresponding upgrade-guide entries added on those maintenance branches, but the matching entries were never mirrored back into the canonical guides on main, leaving main's 4_18 / 4_14 guides out of sync with what actually shipped. This commit copies the missing sections verbatim from the maintenance branches into the matching guide files on main, inserted immediately after the existing camel-jira section so they group with the rest of the rename family. camel-4x-upgrade-guide-4_18.adoc (11 sections): pdf, arangodb, jt400, mail, github2, elasticsearch/opensearch, google-functions/secret-manager, openstack, shiro, web3j, milo camel-4x-upgrade-guide-4_14.adoc (9 sections): pdf, arangodb, jt400, mail, elasticsearch/opensearch, google-functions/secret-manager, openstack, shiro, web3j (github2 and milo are intentionally 4.18-only — those components do not exist on the 4.14.x branch.) Documentation only; no code changes. Tracker: CAMEL-23577 Signed-off-by: Andrea Cosentino --- .../pages/camel-4x-upgrade-guide-4_14.adoc | 541 ++++++++++++++++ .../pages/camel-4x-upgrade-guide-4_18.adoc | 597 ++++++++++++++++++ 2 files changed, 1138 insertions(+) diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_14.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_14.adoc index 7fc2956a8d7f5..1b3ae1cd75e26 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_14.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_14.adoc @@ -262,6 +262,547 @@ As a consequence, the generated Endpoint DSL header accessors on * `linkType()` -> `jiraLinkType()` * `minutesSpent()` -> `jiraMinutesSpent()` +=== camel-arangodb - potential breaking change + +Two Exchange header constants in `ArangoDbConstants` that were not in the +`Camel` namespace (and therefore not filtered by the default +`HeaderFilterStrategy`) have been renamed to follow the Camel naming +convention. The Java field names are unchanged; only the header string values +have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `ArangoDbConstants.ARANGO_KEY` | `key` | `CamelArangoDbKey` +| `ArangoDbConstants.RESULT_CLASS_TYPE` | `ResultClassType` | `CamelArangoDbResultClassType` +|=== + +The remaining constants (`MULTI_UPDATE`, `MULTI_INSERT`, `MULTI_DELETE`, +`AQL_QUERY`, `AQL_QUERY_BIND_PARAMETERS`, `AQL_QUERY_OPTIONS`) were already +`Camel`-prefixed and are unchanged. + +Routes that reference the constants symbolically (for example +`setHeader(ArangoDbConstants.ARANGO_KEY, ...)`) continue to work without +changes. Routes that set the header by its literal string value (for example +`setHeader("key", ...)`) must be updated to use the new value +(`setHeader("CamelArangoDbKey", ...)`). + +As a consequence, the generated Endpoint DSL header accessors on +`ArangoDbHeaderNameBuilder` have been renamed: `key()` -> `arangoDbKey()` and +`resultClassType()` -> `arangoDbResultClassType()`. + +=== camel-shiro - potential breaking change + +The three Exchange header constants in `ShiroSecurityConstants` that drive +Shiro authentication used header values outside the `Camel` namespace +(`SHIRO_SECURITY_TOKEN`, `SHIRO_SECURITY_USERNAME`, `SHIRO_SECURITY_PASSWORD`) +and were therefore not filtered by the default `HeaderFilterStrategy`. They +have been renamed to follow the Camel naming convention. The Java field names +are unchanged; only the header string values have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `ShiroSecurityConstants.SHIRO_SECURITY_TOKEN` | `SHIRO_SECURITY_TOKEN` | `CamelShiroSecurityToken` +| `ShiroSecurityConstants.SHIRO_SECURITY_USERNAME` | `SHIRO_SECURITY_USERNAME` | `CamelShiroSecurityUsername` +| `ShiroSecurityConstants.SHIRO_SECURITY_PASSWORD` | `SHIRO_SECURITY_PASSWORD` | `CamelShiroSecurityPassword` +|=== + +These headers carry credentials and a serialized authentication token, so +filtering them at transport boundaries by default is particularly important. + +Routes that reference the constants symbolically (for example +`setHeader(ShiroSecurityConstants.SHIRO_SECURITY_USERNAME, ...)`) continue to +work without changes. Routes that set the header by its literal string value +(for example `setHeader("SHIRO_SECURITY_USERNAME", ...)`) must be updated to +use the new value (`setHeader("CamelShiroSecurityUsername", ...)`). + +Because the three header values are now in the `Camel*` namespace, transports +that filter Camel-internal headers by default (JMS, CXF, HTTP, etc.) will +strip the serialized Shiro authentication token before publishing. This is +the intended behavior for untrusted producers. Trusted Shiro-over-transport +routes that previously relied on the token surviving the boundary must opt +those three headers back in via a custom `HeaderFilterStrategy`, for example: + +[source,java] +---- +public class ShiroFriendlyJmsHeaderFilterStrategy extends JmsHeaderFilterStrategy { + @Override + public boolean applyFilterToCamelHeaders(String name, Object value, Exchange ex) { + if (isShiroSecurityHeader(name)) { + return false; + } + return super.applyFilterToCamelHeaders(name, value, ex); + } + + @Override + public boolean applyFilterToExternalHeaders(String name, Object value, Exchange ex) { + if (isShiroSecurityHeader(name)) { + return false; + } + return super.applyFilterToExternalHeaders(name, value, ex); + } + + private static boolean isShiroSecurityHeader(String name) { + return ShiroSecurityConstants.SHIRO_SECURITY_TOKEN.equalsIgnoreCase(name) + || ShiroSecurityConstants.SHIRO_SECURITY_USERNAME.equalsIgnoreCase(name) + || ShiroSecurityConstants.SHIRO_SECURITY_PASSWORD.equalsIgnoreCase(name); + } +} + +jmsComponent.setHeaderFilterStrategy(new ShiroFriendlyJmsHeaderFilterStrategy()); +---- + +A worked example is in `ShiroOverJmsTest` in the `camel-itest` module. + +=== camel-pdf - potential breaking change + +The Exchange header constants in `PdfHeaderConstants` have been renamed to +follow the Camel naming convention used across the rest of the component +catalog. The Java field names are unchanged; only the header string values +have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `PdfHeaderConstants.PROTECTION_POLICY_HEADER_NAME` | `protection-policy` | `CamelPdfProtectionPolicy` +| `PdfHeaderConstants.PDF_DOCUMENT_HEADER_NAME` | `pdf-document` | `CamelPdfDocument` +| `PdfHeaderConstants.DECRYPTION_MATERIAL_HEADER_NAME` | `decryption-material` | `CamelPdfDecryptionMaterial` +| `PdfHeaderConstants.FILES_TO_MERGE_HEADER_NAME` | `files-to-merge` | `CamelPdfFilesToMerge` +|=== + +Routes that reference the constants symbolically (for example +`setHeader(PdfHeaderConstants.PDF_DOCUMENT_HEADER_NAME, ...)`) continue to +work without changes. Routes that set the header by its literal string value +(for example `setHeader("pdf-document", ...)`) must be updated to use the +new value (`setHeader("CamelPdfDocument", ...)`). + +As a consequence, the generated Endpoint DSL header accessors on +`PdfHeaderNameBuilder` have been renamed accordingly: + +* `protectionPolicy()` -> `pdfProtectionPolicy()` +* `pdfDocument()` -> `pdfDocument()` (unchanged in name, returns the new value) +* `decryptionMaterial()` -> `pdfDecryptionMaterial()` +* `filesToMerge()` -> `pdfFilesToMerge()` + +=== camel-jt400 - potential breaking change + +The two Exchange header constants in `Jt400Constants` that were not in the +`Camel` namespace (and therefore not filtered by the default +`HeaderFilterStrategy`) have been renamed to follow the Camel naming +convention. The Java field names are unchanged; only the header string values +have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `Jt400Constants.KEY` | `KEY` | `CamelJt400Key` +| `Jt400Constants.SENDER_INFORMATION` | `SENDER_INFORMATION` | `CamelJt400SenderInformation` +|=== + +`Jt400Constants.KEY` is the data-queue key used for keyed-data-queue read and +write operations. The remaining constants (`MESSAGE`, `MESSAGE_ID`, +`MESSAGE_FILE`, `MESSAGE_TYPE`, `MESSAGE_SEVERITY`, `MESSAGE_DFT_RPY`, +`MESSAGE_REPLYTO_KEY`) were already `Camel`-prefixed and are unchanged. + +Routes that reference the constants symbolically (for example +`setHeader(Jt400Constants.KEY, ...)`) continue to work without changes. Routes +that set the header by its literal string value (for example +`setHeader("KEY", ...)`) must be updated to use the new value +(`setHeader("CamelJt400Key", ...)`). + +As a consequence, the generated Endpoint DSL header accessors on +`Jt400HeaderNameBuilder` have been renamed: `kEY()` -> `jt400Key()` and +`senderInformation()` -> `jt400SenderInformation()`. + +=== camel-mail - potential breaking change + +The consumer-side dispatch header constants in `MailConstants` that control +post-processing of a consumed mail message used header values outside the +`Camel` namespace (`copyTo`, `moveTo`, `delete`) and were therefore not +filtered by the default `HeaderFilterStrategy`. They have been renamed to +follow the Camel naming convention (companion to the CAMEL-23522 +`mail.smtp.*` hardening). The Java field names are unchanged; only the header +string values have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `MailConstants.MAIL_COPY_TO` | `copyTo` | `CamelMailCopyTo` +| `MailConstants.MAIL_MOVE_TO` | `moveTo` | `CamelMailMoveTo` +| `MailConstants.MAIL_DELETE` | `delete` | `CamelMailDelete` +|=== + +The standard RFC 5322 message header constants (`MAIL_SUBJECT` = `Subject`, +`MAIL_FROM` = `From`, `MAIL_TO` = `To`, `MAIL_CC` = `Cc`, `MAIL_BCC` = `Bcc`, +`MAIL_REPLY_TO` = `Reply-To`, `MAIL_CONTENT_TYPE` = `contentType`) are +**unchanged**, as they map directly to the corresponding email fields and +renaming them would break mail interoperability. + +The equally-named `copyTo` and `moveTo` *endpoint URI options* on the mail +consumer are also unchanged; only the Exchange header values are affected. + +Routes that reference the constants symbolically (for example +`setHeader(MailConstants.MAIL_DELETE, ...)`) continue to work without changes. +Routes that set the header by its literal string value (for example +`setHeader("delete", true)`) must be updated to use the new value +(`setHeader("CamelMailDelete", true)`). + +As a consequence, the generated Endpoint DSL header accessors on +`MailHeaderNameBuilder` have been renamed: `copyTo()` -> `mailCopyTo()`, +`moveTo()` -> `mailMoveTo()`, and `delete()` -> `mailDelete()`. + +=== camel-web3j - potential breaking change + +The Exchange header constants in `Web3jConstants` have been renamed to follow the +Camel naming convention used across the rest of the component catalog. The Java +field names are unchanged; only the header string values have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `Web3jConstants.ID` | `ID` | `CamelWeb3jId` +| `Web3jConstants.OPERATION` | `OPERATION` | `CamelWeb3jOperation` +| `Web3jConstants.AT_BLOCK` | `AT_BLOCK` | `CamelWeb3jAtBlock` +| `Web3jConstants.ADDRESS` | `ADDRESS` | `CamelWeb3jAddress` +| `Web3jConstants.ADDRESSES` | `ADDRESSES` | `CamelWeb3jAddresses` +| `Web3jConstants.FROM_ADDRESS` | `FROM_ADDRESS` | `CamelWeb3jFromAddress` +| `Web3jConstants.TO_ADDRESS` | `TO_ADDRESS` | `CamelWeb3jToAddress` +| `Web3jConstants.POSITION` | `POSITION` | `CamelWeb3jPosition` +| `Web3jConstants.BLOCK_HASH` | `BLOCK_HASH` | `CamelWeb3jBlockHash` +| `Web3jConstants.TRANSACTION_HASH` | `TRANSACTION_HASH` | `CamelWeb3jTransactionHash` +| `Web3jConstants.SHA3_HASH_OF_DATA_TO_SIGN` | `SHA3_HASH_OF_DATA_TO_SIGN` | `CamelWeb3jSha3HashOfDataToSign` +| `Web3jConstants.SIGNED_TRANSACTION_DATA` | `SIGNED_TRANSACTION_DATA` | `CamelWeb3jSignedTransactionData` +| `Web3jConstants.FULL_TRANSACTION_OBJECTS` | `FULL_TRANSACTION_OBJECTS` | `CamelWeb3jFullTransactionObjects` +| `Web3jConstants.INDEX` | `INDEX` | `CamelWeb3jIndex` +| `Web3jConstants.SOURCE_CODE` | `SOURCE_CODE` | `CamelWeb3jSourceCode` +| `Web3jConstants.FILTER_ID` | `FILTER_ID` | `CamelWeb3jFilterId` +| `Web3jConstants.DATABASE_NAME` | `DATABASE_NAME` | `CamelWeb3jDatabaseName` +| `Web3jConstants.KEY_NAME` | `KEY_NAME` | `CamelWeb3jKeyName` +| `Web3jConstants.NONCE` | `NONCE` | `CamelWeb3jNonce` +| `Web3jConstants.HEADER_POW_HASH` | `HEADER_POW_HASH` | `CamelWeb3jHeaderPowHash` +| `Web3jConstants.MIX_DIGEST` | `MIX_DIGEST` | `CamelWeb3jMixDigest` +| `Web3jConstants.CLIENT_ID` | `CLIENT_ID` | `CamelWeb3jClientId` +| `Web3jConstants.GAS_PRICE` | `GAS_PRICE` | `CamelWeb3jGasPrice` +| `Web3jConstants.GAS_LIMIT` | `GAS_LIMIT` | `CamelWeb3jGasLimit` +| `Web3jConstants.VALUE` | `VALUE` | `CamelWeb3jValue` +| `Web3jConstants.DATA` | `DATA` | `CamelWeb3jData` +| `Web3jConstants.FROM_BLOCK` | `FROM_BLOCK` | `CamelWeb3jFromBlock` +| `Web3jConstants.TO_BLOCK` | `TO_BLOCK` | `CamelWeb3jToBlock` +| `Web3jConstants.TOPICS` | `TOPICS` | `CamelWeb3jTopics` +| `Web3jConstants.PRIORITY` | `PRIORITY` | `CamelWeb3jPriority` +| `Web3jConstants.TTL` | `TTL` | `CamelWeb3jTtl` +| `Web3jConstants.PRIVATE_FOR` | `PRIVATE_FOR` | `CamelWeb3jPrivateFor` +| `Web3jConstants.PRIVATE_FROM` | `PRIVATE_FROM` | `CamelWeb3jPrivateFrom` +| `Web3jConstants.ERROR_CODE` | `ERROR_CODE` | `CamelWeb3jErrorCode` +| `Web3jConstants.ERROR_DATA` | `ERROR_DATA` | `CamelWeb3jErrorData` +| `Web3jConstants.ERROR_MESSAGE` | `ERROR_MESSAGE` | `CamelWeb3jErrorMessage` +| `Web3jConstants.HEADER_STATUS` | `status` | `CamelWeb3jStatus` +| `Web3jConstants.HEADER_OPERATION` | `operation` | `CamelWeb3jHeaderOperation` +| `Web3jConstants.ETH_HASHRATE` | `ETH_HASHRATE` | `CamelWeb3jEthHashrate` +|=== + +Routes that reference the constants symbolically (for example +`setHeader(Web3jConstants.FROM_ADDRESS, ...)`) continue to work without changes. +Routes that set the header by its literal string value (for example +`setHeader("FROM_ADDRESS", ...)`) must be updated to use the new value +(`setHeader("CamelWeb3jFromAddress", ...)`). + +The `Web3jConstants.ETH_HASHRATE` constant is dual-purpose: it is both the +`CamelWeb3jOperation` value that dispatches the `ethHashrate` RPC and the header +name read by the `ETH_SUBMIT_HASHRATE` operation. Routes that referenced the +literal string `"ETH_HASHRATE"` (in either role) must be updated to +`"CamelWeb3jEthHashrate"`. Routes using the symbolic constant reference are +unaffected. The other producer-dispatch operation identifiers (`WEB3_CLIENT_VERSION`, +`ETH_GAS_PRICE`, `ETH_SEND_TRANSACTION`, ...) keep their previous string values +because they are operation enum values rather than Exchange header names. + +As a consequence, the generated Endpoint DSL header accessors on +`Web3jHeaderNameBuilder` have been renamed accordingly: + +* `iD()` -> `web3jId()` +* `atBlock()` -> `web3jAtBlock()` +* `aDDRESS()` -> `web3jAddress()` +* `aDDRESSES()` -> `web3jAddresses()` +* `fromAddress()` -> `web3jFromAddress()` +* `toAddress()` -> `web3jToAddress()` +* `pOSITION()` -> `web3jPosition()` +* `blockHash()` -> `web3jBlockHash()` +* `transactionHash()` -> `web3jTransactionHash()` +* `sha3HashOfDataToSign()` -> `web3jSha3HashOfDataToSign()` +* `signedTransactionData()` -> `web3jSignedTransactionData()` +* `fullTransactionObjects()` -> `web3jFullTransactionObjects()` +* `iNDEX()` -> `web3jIndex()` +* `sourceCode()` -> `web3jSourceCode()` +* `filterId()` -> `web3jFilterId()` +* `databaseName()` -> `web3jDatabaseName()` +* `keyName()` -> `web3jKeyName()` +* `nONCE()` -> `web3jNonce()` +* `headerPowHash()` -> `web3jHeaderPowHash()` +* `mixDigest()` -> `web3jMixDigest()` +* `clientId()` -> `web3jClientId()` +* `gasPrice()` -> `web3jGasPrice()` +* `gasLimit()` -> `web3jGasLimit()` +* `vALUE()` -> `web3jValue()` +* `dATA()` -> `web3jData()` +* `fromBlock()` -> `web3jFromBlock()` +* `toBlock()` -> `web3jToBlock()` +* `tOPICS()` -> `web3jTopics()` +* `pRIORITY()` -> `web3jPriority()` +* `tTL()` -> `web3jTtl()` +* `privateFor()` -> `web3jPrivateFor()` +* `privateFrom()` -> `web3jPrivateFrom()` +* `errorCode()` -> `web3jErrorCode()` +* `errorData()` -> `web3jErrorData()` +* `errorMessage()` -> `web3jErrorMessage()` +* `status()` -> `web3jStatus()` +* `operation()` -> `web3jHeaderOperation()` +* `ethHashrate()` -> `web3jEthHashrate()` + +A new accessor `web3jOperation()` is also generated for `Web3jConstants.OPERATION` +(the producer dispatch header). This constant did not appear in the catalog +previously, so no DSL accessor renaming applies to it. + +=== camel-elasticsearch / camel-opensearch - potential breaking change + +The Exchange header constants in `ElasticsearchConstants` and +`OpensearchConstants` have been renamed to follow the Camel naming convention +used across the rest of the component catalog. The Java field names are +unchanged; only the header string values have changed. + +`ElasticsearchConstants`: + +[options="header"] +|=== +| Constant | Previous value | New value +| `ElasticsearchConstants.PARAM_OPERATION` | `operation` | `CamelElasticsearchOperation` +| `ElasticsearchConstants.PARAM_INDEX_ID` | `indexId` | `CamelElasticsearchIndexId` +| `ElasticsearchConstants.PARAM_INDEX_NAME` | `indexName` | `CamelElasticsearchIndexName` +| `ElasticsearchConstants.PARAM_DOCUMENT_CLASS` | `documentClass` | `CamelElasticsearchDocumentClass` +| `ElasticsearchConstants.PARAM_WAIT_FOR_ACTIVE_SHARDS` | `waitForActiveShards` | `CamelElasticsearchWaitForActiveShards` +| `ElasticsearchConstants.PARAM_SCROLL_KEEP_ALIVE_MS` | `scrollKeepAliveMs` | `CamelElasticsearchScrollKeepAliveMs` +| `ElasticsearchConstants.PARAM_SCROLL` | `useScroll` | `CamelElasticsearchUseScroll` +| `ElasticsearchConstants.PARAM_SIZE` | `size` | `CamelElasticsearchSize` +| `ElasticsearchConstants.PARAM_FROM` | `from` | `CamelElasticsearchFrom` +| `ElasticsearchConstants.PARAM_DOCUMENT_MODE` | `enableDocumentOnlyMode` | `CamelElasticsearchEnableDocumentOnlyMode` +|=== + +`OpensearchConstants`: + +[options="header"] +|=== +| Constant | Previous value | New value +| `OpensearchConstants.PARAM_OPERATION` | `operation` | `CamelOpensearchOperation` +| `OpensearchConstants.PARAM_INDEX_ID` | `indexId` | `CamelOpensearchIndexId` +| `OpensearchConstants.PARAM_INDEX_NAME` | `indexName` | `CamelOpensearchIndexName` +| `OpensearchConstants.PARAM_DOCUMENT_CLASS` | `documentClass` | `CamelOpensearchDocumentClass` +| `OpensearchConstants.PARAM_WAIT_FOR_ACTIVE_SHARDS` | `waitForActiveShards` | `CamelOpensearchWaitForActiveShards` +| `OpensearchConstants.PARAM_SCROLL_KEEP_ALIVE_MS` | `scrollKeepAliveMs` | `CamelOpensearchScrollKeepAliveMs` +| `OpensearchConstants.PARAM_SCROLL` | `useScroll` | `CamelOpensearchUseScroll` +| `OpensearchConstants.PARAM_SIZE` | `size` | `CamelOpensearchSize` +| `OpensearchConstants.PARAM_FROM` | `from` | `CamelOpensearchFrom` +|=== + +`ElasticsearchConstants.PROPERTY_SCROLL_ES_QUERY_COUNT` and +`OpensearchConstants.PROPERTY_SCROLL_OPENSEARCH_QUERY_COUNT` were already +`Camel`-prefixed (`CamelElasticsearchScrollQueryCount` / +`CamelOpenSearchScrollQueryCount`) and are unchanged. + +Routes that reference the constants symbolically (for example +`setHeader(ElasticsearchConstants.PARAM_INDEX_NAME, ...)`) continue to work +without changes. Routes that set the header by its literal string value +(for example `setHeader("indexName", ...)`) must be updated to use the +new value (`setHeader("CamelElasticsearchIndexName", ...)`). + +The generated Endpoint DSL header accessors on +`ElasticsearchHeaderNameBuilder` and `OpensearchHeaderNameBuilder` have +been renamed accordingly (`operation()` -> `elasticsearchOperation()` / +`opensearchOperation()`, `indexId()` -> `elasticsearchIndexId()` / +`opensearchIndexId()`, etc.). + +=== camel-google-functions / camel-google-secret-manager - potential breaking change + +The Exchange header constants in these Google Cloud components carried a +`GoogleCloud` / `GoogleSecretManager` prefix that is not in the +`Camel` namespace, so the default `HeaderFilterStrategy` did not filter them +at transport boundaries. They have been renamed to add the `Camel` prefix. +The Java field names are unchanged; only the header string values have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `GoogleCloudFunctionsConstants.OPERATION` | `GoogleCloudFunctionsOperation` | `CamelGoogleCloudFunctionsOperation` +| `GoogleCloudFunctionsConstants.ENTRY_POINT` | `GoogleCloudFunctionsEntryPoint` | `CamelGoogleCloudFunctionsEntryPoint` +| `GoogleCloudFunctionsConstants.RUNTIME` | `GoogleCloudFunctionsRuntime` | `CamelGoogleCloudFunctionsRuntime` +| `GoogleCloudFunctionsConstants.SOURCE_ARCHIVE_URL` | `GoogleCloudFunctionsSourceArchiveUrl` | `CamelGoogleCloudFunctionsSourceArchiveUrl` +| `GoogleCloudFunctionsConstants.RESPONSE_OBJECT` | `GoogleCloudFunctionsResponseObject` | `CamelGoogleCloudFunctionsResponseObject` +| `GoogleSecretManagerConstants.OPERATION` | `GoogleSecretManagerOperation` | `CamelGoogleSecretManagerOperation` +| `GoogleCloudVisionConstants.OPERATION` | `GoogleCloudVisionOperation` | `CamelGoogleCloudVisionOperation` +| `GoogleCloudVisionConstants.RESPONSE_OBJECT` | `GoogleCloudVisionResponseObject` | `CamelGoogleCloudVisionResponseObject` +| `GoogleCloudTextToSpeechConstants.OPERATION` | `GoogleCloudTextToSpeechOperation` | `CamelGoogleCloudTextToSpeechOperation` +| `GoogleCloudTextToSpeechConstants.RESPONSE_OBJECT` | `GoogleCloudTextToSpeechResponseObject` | `CamelGoogleCloudTextToSpeechResponseObject` +| `GoogleCloudSpeechToTextConstants.OPERATION` | `GoogleCloudSpeechToTextOperation` | `CamelGoogleCloudSpeechToTextOperation` +| `GoogleCloudSpeechToTextConstants.RESPONSE_OBJECT` | `GoogleCloudSpeechToTextResponseObject` | `CamelGoogleCloudSpeechToTextResponseObject` +|=== + +The `GoogleSecretManagerConstants.SECRET_ID`, `VERSION_ID` and `REPLICATION` +constants were already `Camel`-prefixed (`CamelGoogleSecretManagerSecretId`, +etc.) and are unchanged. + +Routes that reference the constants symbolically (for example +`setHeader(GoogleCloudFunctionsConstants.OPERATION, ...)`) continue to work +without changes. Routes that set the header by its literal string value (for +example `setHeader("GoogleCloudFunctionsOperation", ...)`) must be updated to +use the new value (`setHeader("CamelGoogleCloudFunctionsOperation", ...)`). + +The generated Endpoint DSL header accessor names are unchanged (for example +`googleCloudFunctionsOperation()`), since the `Camel` prefix is stripped when +deriving the accessor name; the accessors now return the new `Camel`-prefixed +values. + + +NOTE: The companion rename for `camel-google-vision`, `camel-google-text-to-speech` and `camel-google-speech-to-text` from the same main-branch PR (#23467) is NOT backported to 4.14.x because those components were added after the 4.14.x branch point and do not exist on this maintenance branch. + +=== camel-openstack - potential breaking change + +The Exchange header constants in `OpenstackConstants`, `KeystoneConstants`, +`NovaConstants`, `CinderConstants`, `GlanceConstants`, `NeutronConstants`, +and `SwiftConstants` have been renamed to follow the Camel naming convention +used across the rest of the component catalog. The Java field names are +unchanged; only the header string values have changed. + +Common constants (in `OpenstackConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `OpenstackConstants.OPERATION` | `operation` | `CamelOpenstackOperation` +| `OpenstackConstants.ID` | `ID` | `CamelOpenstackId` +| `OpenstackConstants.NAME` | `name` | `CamelOpenstackName` +| `OpenstackConstants.DESCRIPTION` | `description` | `CamelOpenstackDescription` +| `OpenstackConstants.PROPERTIES` | `properties` | `CamelOpenstackProperties` +|=== + +Keystone (`KeystoneConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `KeystoneConstants.DESCRIPTION` | `description` | `CamelOpenstackKeystoneDescription` +| `KeystoneConstants.DOMAIN_ID` | `domainId` | `CamelOpenstackKeystoneDomainId` +| `KeystoneConstants.PARENT_ID` | `parentId` | `CamelOpenstackKeystoneParentId` +| `KeystoneConstants.PASSWORD` | `password` | `CamelOpenstackKeystonePassword` +| `KeystoneConstants.EMAIL` | `email` | `CamelOpenstackKeystoneEmail` +| `KeystoneConstants.USER_ID` | `userId` | `CamelOpenstackKeystoneUserId` +| `KeystoneConstants.GROUP_ID` | `groupId` | `CamelOpenstackKeystoneGroupId` +|=== + +Nova (`NovaConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `NovaConstants.FLAVOR_ID` | `FlavorId` | `CamelOpenstackNovaFlavorId` +| `NovaConstants.RAM` | `RAM` | `CamelOpenstackNovaRam` +| `NovaConstants.VCPU` | `VCPU` | `CamelOpenstackNovaVcpu` +| `NovaConstants.DISK` | `disk` | `CamelOpenstackNovaDisk` +| `NovaConstants.SWAP` | `swap` | `CamelOpenstackNovaSwap` +| `NovaConstants.RXTXFACTOR` | `rxtxFactor` | `CamelOpenstackNovaRxtxFactor` +| `NovaConstants.ADMIN_PASSWORD` | `AdminPassword` | `CamelOpenstackNovaAdminPassword` +| `NovaConstants.IMAGE_ID` | `ImageId` | `CamelOpenstackNovaImageId` +| `NovaConstants.KEYPAIR_NAME` | `KeypairName` | `CamelOpenstackNovaKeypairName` +| `NovaConstants.NETWORK` | `NetworkId` | `CamelOpenstackNovaNetworkId` +| `NovaConstants.ACTION` | `action` | `CamelOpenstackNovaAction` +|=== + +Cinder (`CinderConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `CinderConstants.SIZE` | `size` | `CamelOpenstackCinderSize` +| `CinderConstants.VOLUME_TYPE` | `volumeType` | `CamelOpenstackCinderVolumeType` +| `CinderConstants.IMAGE_REF` | `imageRef` | `CamelOpenstackCinderImageRef` +| `CinderConstants.SNAPSHOT_ID` | `snapshotId` | `CamelOpenstackCinderSnapshotId` +| `CinderConstants.IS_BOOTABLE` | `isBootable` | `CamelOpenstackCinderIsBootable` +| `CinderConstants.VOLUME_ID` | `volumeId` | `CamelOpenstackCinderVolumeId` +| `CinderConstants.FORCE` | `force` | `CamelOpenstackCinderForce` +|=== + +Glance (`GlanceConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `GlanceConstants.DISK_FORMAT` | `diskFormat` | `CamelOpenstackGlanceDiskFormat` +| `GlanceConstants.CONTAINER_FORMAT` | `containerFormat` | `CamelOpenstackGlanceContainerFormat` +| `GlanceConstants.OWNER` | `owner` | `CamelOpenstackGlanceOwner` +| `GlanceConstants.IS_PUBLIC` | `isPublic` | `CamelOpenstackGlanceIsPublic` +| `GlanceConstants.MIN_RAM` | `minRam` | `CamelOpenstackGlanceMinRam` +| `GlanceConstants.MIN_DISK` | `minDisk` | `CamelOpenstackGlanceMinDisk` +| `GlanceConstants.SIZE` | `size` | `CamelOpenstackGlanceSize` +| `GlanceConstants.CHECKSUM` | `checksum` | `CamelOpenstackGlanceChecksum` +|=== + +Neutron (`NeutronConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `NeutronConstants.TENANT_ID` | `tenantId` | `CamelOpenstackNeutronTenantId` +| `NeutronConstants.NETWORK_ID` | `networkId` | `CamelOpenstackNeutronNetworkId` +| `NeutronConstants.ADMIN_STATE_UP` | `adminStateUp` | `CamelOpenstackNeutronAdminStateUp` +| `NeutronConstants.NETWORK_TYPE` | `networkType` | `CamelOpenstackNeutronNetworkType` +| `NeutronConstants.PHYSICAL_NETWORK` | `physicalNetwork` | `CamelOpenstackNeutronPhysicalNetwork` +| `NeutronConstants.SEGMENT_ID` | `segmentId` | `CamelOpenstackNeutronSegmentId` +| `NeutronConstants.IS_SHARED` | `isShared` | `CamelOpenstackNeutronIsShared` +| `NeutronConstants.IS_ROUTER_EXTERNAL` | `isRouterExternal` | `CamelOpenstackNeutronIsRouterExternal` +| `NeutronConstants.ENABLE_DHCP` | `enableDHCP` | `CamelOpenstackNeutronEnableDhcp` +| `NeutronConstants.GATEWAY` | `gateway` | `CamelOpenstackNeutronGateway` +| `NeutronConstants.IP_VERSION` | `ipVersion` | `CamelOpenstackNeutronIpVersion` +| `NeutronConstants.CIDR` | `cidr` | `CamelOpenstackNeutronCidr` +| `NeutronConstants.SUBNET_POOL` | `subnetPools` | `CamelOpenstackNeutronSubnetPools` +| `NeutronConstants.DEVICE_ID` | `deviceId` | `CamelOpenstackNeutronDeviceId` +| `NeutronConstants.MAC_ADDRESS` | `macAddress` | `CamelOpenstackNeutronMacAddress` +| `NeutronConstants.ROUTER_ID` | `routerId` | `CamelOpenstackNeutronRouterId` +| `NeutronConstants.SUBNET_ID` | `subnetId` | `CamelOpenstackNeutronSubnetId` +| `NeutronConstants.PORT_ID` | `portId` | `CamelOpenstackNeutronPortId` +| `NeutronConstants.ITERFACE_TYPE` | `interfaceType` | `CamelOpenstackNeutronInterfaceType` +|=== + +Swift (`SwiftConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `SwiftConstants.CONTAINER_NAME` | `containerName` | `CamelOpenstackSwiftContainerName` +| `SwiftConstants.OBJECT_NAME` | `objectName` | `CamelOpenstackSwiftObjectName` +| `SwiftConstants.LIMIT` | `limit` | `CamelOpenstackSwiftLimit` +| `SwiftConstants.MARKER` | `marker` | `CamelOpenstackSwiftMarker` +| `SwiftConstants.END_MARKER` | `end_marker` | `CamelOpenstackSwiftEndMarker` +| `SwiftConstants.DELIMITER` | `delimiter` | `CamelOpenstackSwiftDelimiter` +| `SwiftConstants.PATH` | `path` | `CamelOpenstackSwiftPath` +|=== + +`SwiftConstants.CONTAINER_METADATA_PREFIX`, `SwiftConstants.VERSIONS_LOCATION`, +`SwiftConstants.CONTAINER_READ`, and `SwiftConstants.CONTAINER_WRITE` +intentionally keep their previous values (`X-Container-Meta-`, +`X-Versions-Location`, `X-Container-Read`, `X-Container-Write`) because they +are part of the Swift HTTP protocol contract used by openstack4j to forward +container metadata and ACLs to the Swift backend. Renaming them would break +interoperability with the Swift API. + +Routes that reference the constants symbolically (for example +`setHeader(OpenstackConstants.OPERATION, ...)`) continue to work without +changes. Routes that set the header by its literal string value (for example +`setHeader("operation", ...)`) must be updated to use the new value +(`setHeader("CamelOpenstackOperation", ...)`). + +The generated Endpoint DSL header accessors on each component's +`HeaderNameBuilder` are renamed accordingly (`operation()` -> +`openstackOperation()`, `password()` -> `openstackKeystonePassword()`, +`adminPassword()` -> `openstackNovaAdminPassword()`, etc.). + === camel-mongodb-gridfs - potential breaking change The Exchange header values exposed by `GridFsConstants` have been renamed to follow the standard diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc index 9094e00eb0b55..44e48da9c546b 100644 --- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc +++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_18.adoc @@ -294,6 +294,603 @@ As a consequence, the generated Endpoint DSL header accessors on * `linkType()` -> `jiraLinkType()` * `minutesSpent()` -> `jiraMinutesSpent()` +=== camel-pdf - potential breaking change + +The Exchange header constants in `PdfHeaderConstants` have been renamed to +follow the Camel naming convention used across the rest of the component +catalog. The Java field names are unchanged; only the header string values +have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `PdfHeaderConstants.PROTECTION_POLICY_HEADER_NAME` | `protection-policy` | `CamelPdfProtectionPolicy` +| `PdfHeaderConstants.PDF_DOCUMENT_HEADER_NAME` | `pdf-document` | `CamelPdfDocument` +| `PdfHeaderConstants.DECRYPTION_MATERIAL_HEADER_NAME` | `decryption-material` | `CamelPdfDecryptionMaterial` +| `PdfHeaderConstants.FILES_TO_MERGE_HEADER_NAME` | `files-to-merge` | `CamelPdfFilesToMerge` +|=== + +Routes that reference the constants symbolically (for example +`setHeader(PdfHeaderConstants.PDF_DOCUMENT_HEADER_NAME, ...)`) continue to +work without changes. Routes that set the header by its literal string value +(for example `setHeader("pdf-document", ...)`) must be updated to use the +new value (`setHeader("CamelPdfDocument", ...)`). + +As a consequence, the generated Endpoint DSL header accessors on +`PdfHeaderNameBuilder` have been renamed accordingly: + +* `protectionPolicy()` -> `pdfProtectionPolicy()` +* `pdfDocument()` -> `pdfDocument()` (unchanged in name, returns the new value) +* `decryptionMaterial()` -> `pdfDecryptionMaterial()` +* `filesToMerge()` -> `pdfFilesToMerge()` + +=== camel-arangodb - potential breaking change + +Two Exchange header constants in `ArangoDbConstants` that were not in the +`Camel` namespace (and therefore not filtered by the default +`HeaderFilterStrategy`) have been renamed to follow the Camel naming +convention. The Java field names are unchanged; only the header string values +have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `ArangoDbConstants.ARANGO_KEY` | `key` | `CamelArangoDbKey` +| `ArangoDbConstants.RESULT_CLASS_TYPE` | `ResultClassType` | `CamelArangoDbResultClassType` +|=== + +The remaining constants (`MULTI_UPDATE`, `MULTI_INSERT`, `MULTI_DELETE`, +`AQL_QUERY`, `AQL_QUERY_BIND_PARAMETERS`, `AQL_QUERY_OPTIONS`) were already +`Camel`-prefixed and are unchanged. + +Routes that reference the constants symbolically (for example +`setHeader(ArangoDbConstants.ARANGO_KEY, ...)`) continue to work without +changes. Routes that set the header by its literal string value (for example +`setHeader("key", ...)`) must be updated to use the new value +(`setHeader("CamelArangoDbKey", ...)`). + +As a consequence, the generated Endpoint DSL header accessors on +`ArangoDbHeaderNameBuilder` have been renamed: `key()` -> `arangoDbKey()` and +`resultClassType()` -> `arangoDbResultClassType()`. + +=== camel-jt400 - potential breaking change + +The two Exchange header constants in `Jt400Constants` that were not in the +`Camel` namespace (and therefore not filtered by the default +`HeaderFilterStrategy`) have been renamed to follow the Camel naming +convention. The Java field names are unchanged; only the header string values +have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `Jt400Constants.KEY` | `KEY` | `CamelJt400Key` +| `Jt400Constants.SENDER_INFORMATION` | `SENDER_INFORMATION` | `CamelJt400SenderInformation` +|=== + +`Jt400Constants.KEY` is the data-queue key used for keyed-data-queue read and +write operations. The remaining constants (`MESSAGE`, `MESSAGE_ID`, +`MESSAGE_FILE`, `MESSAGE_TYPE`, `MESSAGE_SEVERITY`, `MESSAGE_DFT_RPY`, +`MESSAGE_REPLYTO_KEY`) were already `Camel`-prefixed and are unchanged. + +Routes that reference the constants symbolically (for example +`setHeader(Jt400Constants.KEY, ...)`) continue to work without changes. Routes +that set the header by its literal string value (for example +`setHeader("KEY", ...)`) must be updated to use the new value +(`setHeader("CamelJt400Key", ...)`). + +As a consequence, the generated Endpoint DSL header accessors on +`Jt400HeaderNameBuilder` have been renamed: `kEY()` -> `jt400Key()` and +`senderInformation()` -> `jt400SenderInformation()`. + +=== camel-mail - potential breaking change + +The consumer-side dispatch header constants in `MailConstants` that control +post-processing of a consumed mail message used header values outside the +`Camel` namespace (`copyTo`, `moveTo`, `delete`) and were therefore not +filtered by the default `HeaderFilterStrategy`. They have been renamed to +follow the Camel naming convention (companion to the CAMEL-23522 +`mail.smtp.*` hardening). The Java field names are unchanged; only the header +string values have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `MailConstants.MAIL_COPY_TO` | `copyTo` | `CamelMailCopyTo` +| `MailConstants.MAIL_MOVE_TO` | `moveTo` | `CamelMailMoveTo` +| `MailConstants.MAIL_DELETE` | `delete` | `CamelMailDelete` +|=== + +The standard RFC 5322 message header constants (`MAIL_SUBJECT` = `Subject`, +`MAIL_FROM` = `From`, `MAIL_TO` = `To`, `MAIL_CC` = `Cc`, `MAIL_BCC` = `Bcc`, +`MAIL_REPLY_TO` = `Reply-To`, `MAIL_CONTENT_TYPE` = `contentType`) are +**unchanged**, as they map directly to the corresponding email fields and +renaming them would break mail interoperability. + +The equally-named `copyTo` and `moveTo` *endpoint URI options* on the mail +consumer are also unchanged; only the Exchange header values are affected. + +Routes that reference the constants symbolically (for example +`setHeader(MailConstants.MAIL_DELETE, ...)`) continue to work without changes. +Routes that set the header by its literal string value (for example +`setHeader("delete", true)`) must be updated to use the new value +(`setHeader("CamelMailDelete", true)`). + +As a consequence, the generated Endpoint DSL header accessors on +`MailHeaderNameBuilder` have been renamed: `copyTo()` -> `mailCopyTo()`, +`moveTo()` -> `mailMoveTo()`, and `delete()` -> `mailDelete()`. + +=== camel-github2 - potential breaking change + +The producer-side Exchange header constants in `GitHub2Constants` have been +renamed to follow the Camel naming convention used across the rest of the +component catalog. The Java field names are unchanged; only the header string +values have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `GitHub2Constants.GITHUB_PULLREQUEST` | `GitHubPullRequest` | `CamelGitHubPullRequest` +| `GitHub2Constants.GITHUB_INRESPONSETO` | `GitHubInResponseTo` | `CamelGitHubInResponseTo` +| `GitHub2Constants.GITHUB_PULLREQUEST_HEAD_COMMIT_SHA` | `GitHubPullRequestHeadCommitSHA` | `CamelGitHubPullRequestHeadCommitSha` +| `GitHub2Constants.GITHUB_ISSUE_TITLE` | `GitHubIssueTitle` | `CamelGitHubIssueTitle` +|=== + +The consumer-side constants (`GITHUB_COMMIT_AUTHOR`, `GITHUB_COMMIT_COMMITTER`, +`GITHUB_COMMIT_SHA`, `GITHUB_COMMIT_URL`, `GITHUB_EVENT_PAYLOAD`) were already +`Camel`-prefixed (`CamelGitHubCommitAuthor`, etc.) and are unchanged, as is the +`GITHUB_CLIENT` registry-lookup key (`github2Client`). + +Routes that reference the constants symbolically (for example +`setHeader(GitHub2Constants.GITHUB_PULLREQUEST, ...)`) continue to work without +changes. Routes that set the header by its literal string value (for example +`setHeader("GitHubPullRequest", ...)`) must be updated to use the new value +(`setHeader("CamelGitHubPullRequest", ...)`). + +As a consequence, the generated Endpoint DSL header accessor +`gitHubPullRequestHeadCommitSHA()` on `GitHub2HeaderNameBuilder` has been +renamed to `gitHubPullRequestHeadCommitSha()`. The remaining accessors +(`gitHubPullRequest()`, `gitHubInResponseTo()`, `gitHubIssueTitle()`) keep +their names but now return the new `Camel`-prefixed values. + +NOTE: The deprecated `camel-github` component (predecessor of `camel-github2`) +is not affected by this change on the 4.18.x line; it remains present in +4.18.x as deprecated and was only removed on the 4.21 development branch. + +=== camel-elasticsearch / camel-opensearch - potential breaking change + +The Exchange header constants in `ElasticsearchConstants` and +`OpensearchConstants` have been renamed to follow the Camel naming convention +used across the rest of the component catalog. The Java field names are +unchanged; only the header string values have changed. + +`ElasticsearchConstants`: + +[options="header"] +|=== +| Constant | Previous value | New value +| `ElasticsearchConstants.PARAM_OPERATION` | `operation` | `CamelElasticsearchOperation` +| `ElasticsearchConstants.PARAM_INDEX_ID` | `indexId` | `CamelElasticsearchIndexId` +| `ElasticsearchConstants.PARAM_INDEX_NAME` | `indexName` | `CamelElasticsearchIndexName` +| `ElasticsearchConstants.PARAM_DOCUMENT_CLASS` | `documentClass` | `CamelElasticsearchDocumentClass` +| `ElasticsearchConstants.PARAM_WAIT_FOR_ACTIVE_SHARDS` | `waitForActiveShards` | `CamelElasticsearchWaitForActiveShards` +| `ElasticsearchConstants.PARAM_SCROLL_KEEP_ALIVE_MS` | `scrollKeepAliveMs` | `CamelElasticsearchScrollKeepAliveMs` +| `ElasticsearchConstants.PARAM_SCROLL` | `useScroll` | `CamelElasticsearchUseScroll` +| `ElasticsearchConstants.PARAM_SIZE` | `size` | `CamelElasticsearchSize` +| `ElasticsearchConstants.PARAM_FROM` | `from` | `CamelElasticsearchFrom` +| `ElasticsearchConstants.PARAM_DOCUMENT_MODE` | `enableDocumentOnlyMode` | `CamelElasticsearchEnableDocumentOnlyMode` +|=== + +`OpensearchConstants`: + +[options="header"] +|=== +| Constant | Previous value | New value +| `OpensearchConstants.PARAM_OPERATION` | `operation` | `CamelOpensearchOperation` +| `OpensearchConstants.PARAM_INDEX_ID` | `indexId` | `CamelOpensearchIndexId` +| `OpensearchConstants.PARAM_INDEX_NAME` | `indexName` | `CamelOpensearchIndexName` +| `OpensearchConstants.PARAM_DOCUMENT_CLASS` | `documentClass` | `CamelOpensearchDocumentClass` +| `OpensearchConstants.PARAM_WAIT_FOR_ACTIVE_SHARDS` | `waitForActiveShards` | `CamelOpensearchWaitForActiveShards` +| `OpensearchConstants.PARAM_SCROLL_KEEP_ALIVE_MS` | `scrollKeepAliveMs` | `CamelOpensearchScrollKeepAliveMs` +| `OpensearchConstants.PARAM_SCROLL` | `useScroll` | `CamelOpensearchUseScroll` +| `OpensearchConstants.PARAM_SIZE` | `size` | `CamelOpensearchSize` +| `OpensearchConstants.PARAM_FROM` | `from` | `CamelOpensearchFrom` +|=== + +`ElasticsearchConstants.PROPERTY_SCROLL_ES_QUERY_COUNT` and +`OpensearchConstants.PROPERTY_SCROLL_OPENSEARCH_QUERY_COUNT` were already +`Camel`-prefixed (`CamelElasticsearchScrollQueryCount` / +`CamelOpenSearchScrollQueryCount`) and are unchanged. + +Routes that reference the constants symbolically (for example +`setHeader(ElasticsearchConstants.PARAM_INDEX_NAME, ...)`) continue to work +without changes. Routes that set the header by its literal string value +(for example `setHeader("indexName", ...)`) must be updated to use the +new value (`setHeader("CamelElasticsearchIndexName", ...)`). + +The generated Endpoint DSL header accessors on +`ElasticsearchHeaderNameBuilder` and `OpensearchHeaderNameBuilder` have +been renamed accordingly (`operation()` -> `elasticsearchOperation()` / +`opensearchOperation()`, `indexId()` -> `elasticsearchIndexId()` / +`opensearchIndexId()`, etc.). + +=== camel-google-functions / camel-google-secret-manager - potential breaking change + +The Exchange header constants in `GoogleCloudFunctionsConstants` and +`GoogleSecretManagerConstants` that carried a `GoogleCloudFunctions` / +`GoogleSecretManager` prefix are not in the `Camel` namespace and were +therefore not filtered by the default `HeaderFilterStrategy`. They have been +renamed to add the `Camel` prefix. The Java field names are unchanged; only +the header string values have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `GoogleCloudFunctionsConstants.OPERATION` | `GoogleCloudFunctionsOperation` | `CamelGoogleCloudFunctionsOperation` +| `GoogleCloudFunctionsConstants.ENTRY_POINT` | `GoogleCloudFunctionsEntryPoint` | `CamelGoogleCloudFunctionsEntryPoint` +| `GoogleCloudFunctionsConstants.RUNTIME` | `GoogleCloudFunctionsRuntime` | `CamelGoogleCloudFunctionsRuntime` +| `GoogleCloudFunctionsConstants.SOURCE_ARCHIVE_URL` | `GoogleCloudFunctionsSourceArchiveUrl` | `CamelGoogleCloudFunctionsSourceArchiveUrl` +| `GoogleCloudFunctionsConstants.RESPONSE_OBJECT` | `GoogleCloudFunctionsResponseObject` | `CamelGoogleCloudFunctionsResponseObject` +| `GoogleSecretManagerConstants.OPERATION` | `GoogleSecretManagerOperation` | `CamelGoogleSecretManagerOperation` +|=== + +The `GoogleSecretManagerConstants.SECRET_ID`, `VERSION_ID` and `REPLICATION` +constants were already `Camel`-prefixed and are unchanged. + +Routes that reference the constants symbolically (for example +`setHeader(GoogleCloudFunctionsConstants.OPERATION, ...)`) continue to work +without changes. Routes that set the header by its literal string value (for +example `setHeader("GoogleCloudFunctionsOperation", ...)`) must be updated to +use the new value (`setHeader("CamelGoogleCloudFunctionsOperation", ...)`). + +The generated Endpoint DSL header accessor names are unchanged (for example +`googleCloudFunctionsOperation()`), since the `Camel` prefix is stripped when +deriving the accessor name; the accessors now return the new `Camel`-prefixed +values. + +NOTE: The companion rename for `camel-google-vision`, `camel-google-text-to-speech` +and `camel-google-speech-to-text` from the same main-branch PR (#23467) is +**not** backported to 4.18.x because those components were added after the +4.18.x branch point and do not exist on this maintenance branch. + +=== camel-openstack - potential breaking change + +The Exchange header constants in `OpenstackConstants`, `KeystoneConstants`, +`NovaConstants`, `CinderConstants`, `GlanceConstants`, `NeutronConstants`, +and `SwiftConstants` have been renamed to follow the Camel naming convention +used across the rest of the component catalog. The Java field names are +unchanged; only the header string values have changed. + +Common constants (in `OpenstackConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `OpenstackConstants.OPERATION` | `operation` | `CamelOpenstackOperation` +| `OpenstackConstants.ID` | `ID` | `CamelOpenstackId` +| `OpenstackConstants.NAME` | `name` | `CamelOpenstackName` +| `OpenstackConstants.DESCRIPTION` | `description` | `CamelOpenstackDescription` +| `OpenstackConstants.PROPERTIES` | `properties` | `CamelOpenstackProperties` +|=== + +Keystone (`KeystoneConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `KeystoneConstants.DESCRIPTION` | `description` | `CamelOpenstackKeystoneDescription` +| `KeystoneConstants.DOMAIN_ID` | `domainId` | `CamelOpenstackKeystoneDomainId` +| `KeystoneConstants.PARENT_ID` | `parentId` | `CamelOpenstackKeystoneParentId` +| `KeystoneConstants.PASSWORD` | `password` | `CamelOpenstackKeystonePassword` +| `KeystoneConstants.EMAIL` | `email` | `CamelOpenstackKeystoneEmail` +| `KeystoneConstants.USER_ID` | `userId` | `CamelOpenstackKeystoneUserId` +| `KeystoneConstants.GROUP_ID` | `groupId` | `CamelOpenstackKeystoneGroupId` +|=== + +Nova (`NovaConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `NovaConstants.FLAVOR_ID` | `FlavorId` | `CamelOpenstackNovaFlavorId` +| `NovaConstants.RAM` | `RAM` | `CamelOpenstackNovaRam` +| `NovaConstants.VCPU` | `VCPU` | `CamelOpenstackNovaVcpu` +| `NovaConstants.DISK` | `disk` | `CamelOpenstackNovaDisk` +| `NovaConstants.SWAP` | `swap` | `CamelOpenstackNovaSwap` +| `NovaConstants.RXTXFACTOR` | `rxtxFactor` | `CamelOpenstackNovaRxtxFactor` +| `NovaConstants.ADMIN_PASSWORD` | `AdminPassword` | `CamelOpenstackNovaAdminPassword` +| `NovaConstants.IMAGE_ID` | `ImageId` | `CamelOpenstackNovaImageId` +| `NovaConstants.KEYPAIR_NAME` | `KeypairName` | `CamelOpenstackNovaKeypairName` +| `NovaConstants.NETWORK` | `NetworkId` | `CamelOpenstackNovaNetworkId` +| `NovaConstants.ACTION` | `action` | `CamelOpenstackNovaAction` +|=== + +Cinder (`CinderConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `CinderConstants.SIZE` | `size` | `CamelOpenstackCinderSize` +| `CinderConstants.VOLUME_TYPE` | `volumeType` | `CamelOpenstackCinderVolumeType` +| `CinderConstants.IMAGE_REF` | `imageRef` | `CamelOpenstackCinderImageRef` +| `CinderConstants.SNAPSHOT_ID` | `snapshotId` | `CamelOpenstackCinderSnapshotId` +| `CinderConstants.IS_BOOTABLE` | `isBootable` | `CamelOpenstackCinderIsBootable` +| `CinderConstants.VOLUME_ID` | `volumeId` | `CamelOpenstackCinderVolumeId` +| `CinderConstants.FORCE` | `force` | `CamelOpenstackCinderForce` +|=== + +Glance (`GlanceConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `GlanceConstants.DISK_FORMAT` | `diskFormat` | `CamelOpenstackGlanceDiskFormat` +| `GlanceConstants.CONTAINER_FORMAT` | `containerFormat` | `CamelOpenstackGlanceContainerFormat` +| `GlanceConstants.OWNER` | `owner` | `CamelOpenstackGlanceOwner` +| `GlanceConstants.IS_PUBLIC` | `isPublic` | `CamelOpenstackGlanceIsPublic` +| `GlanceConstants.MIN_RAM` | `minRam` | `CamelOpenstackGlanceMinRam` +| `GlanceConstants.MIN_DISK` | `minDisk` | `CamelOpenstackGlanceMinDisk` +| `GlanceConstants.SIZE` | `size` | `CamelOpenstackGlanceSize` +| `GlanceConstants.CHECKSUM` | `checksum` | `CamelOpenstackGlanceChecksum` +|=== + +Neutron (`NeutronConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `NeutronConstants.TENANT_ID` | `tenantId` | `CamelOpenstackNeutronTenantId` +| `NeutronConstants.NETWORK_ID` | `networkId` | `CamelOpenstackNeutronNetworkId` +| `NeutronConstants.ADMIN_STATE_UP` | `adminStateUp` | `CamelOpenstackNeutronAdminStateUp` +| `NeutronConstants.NETWORK_TYPE` | `networkType` | `CamelOpenstackNeutronNetworkType` +| `NeutronConstants.PHYSICAL_NETWORK` | `physicalNetwork` | `CamelOpenstackNeutronPhysicalNetwork` +| `NeutronConstants.SEGMENT_ID` | `segmentId` | `CamelOpenstackNeutronSegmentId` +| `NeutronConstants.IS_SHARED` | `isShared` | `CamelOpenstackNeutronIsShared` +| `NeutronConstants.IS_ROUTER_EXTERNAL` | `isRouterExternal` | `CamelOpenstackNeutronIsRouterExternal` +| `NeutronConstants.ENABLE_DHCP` | `enableDHCP` | `CamelOpenstackNeutronEnableDhcp` +| `NeutronConstants.GATEWAY` | `gateway` | `CamelOpenstackNeutronGateway` +| `NeutronConstants.IP_VERSION` | `ipVersion` | `CamelOpenstackNeutronIpVersion` +| `NeutronConstants.CIDR` | `cidr` | `CamelOpenstackNeutronCidr` +| `NeutronConstants.SUBNET_POOL` | `subnetPools` | `CamelOpenstackNeutronSubnetPools` +| `NeutronConstants.DEVICE_ID` | `deviceId` | `CamelOpenstackNeutronDeviceId` +| `NeutronConstants.MAC_ADDRESS` | `macAddress` | `CamelOpenstackNeutronMacAddress` +| `NeutronConstants.ROUTER_ID` | `routerId` | `CamelOpenstackNeutronRouterId` +| `NeutronConstants.SUBNET_ID` | `subnetId` | `CamelOpenstackNeutronSubnetId` +| `NeutronConstants.PORT_ID` | `portId` | `CamelOpenstackNeutronPortId` +| `NeutronConstants.ITERFACE_TYPE` | `interfaceType` | `CamelOpenstackNeutronInterfaceType` +|=== + +Swift (`SwiftConstants`): + +[options="header"] +|=== +| Constant | Previous value | New value +| `SwiftConstants.CONTAINER_NAME` | `containerName` | `CamelOpenstackSwiftContainerName` +| `SwiftConstants.OBJECT_NAME` | `objectName` | `CamelOpenstackSwiftObjectName` +| `SwiftConstants.LIMIT` | `limit` | `CamelOpenstackSwiftLimit` +| `SwiftConstants.MARKER` | `marker` | `CamelOpenstackSwiftMarker` +| `SwiftConstants.END_MARKER` | `end_marker` | `CamelOpenstackSwiftEndMarker` +| `SwiftConstants.DELIMITER` | `delimiter` | `CamelOpenstackSwiftDelimiter` +| `SwiftConstants.PATH` | `path` | `CamelOpenstackSwiftPath` +|=== + +`SwiftConstants.CONTAINER_METADATA_PREFIX`, `SwiftConstants.VERSIONS_LOCATION`, +`SwiftConstants.CONTAINER_READ`, and `SwiftConstants.CONTAINER_WRITE` +intentionally keep their previous values (`X-Container-Meta-`, +`X-Versions-Location`, `X-Container-Read`, `X-Container-Write`) because they +are part of the Swift HTTP protocol contract used by openstack4j to forward +container metadata and ACLs to the Swift backend. Renaming them would break +interoperability with the Swift API. + +Routes that reference the constants symbolically (for example +`setHeader(OpenstackConstants.OPERATION, ...)`) continue to work without +changes. Routes that set the header by its literal string value (for example +`setHeader("operation", ...)`) must be updated to use the new value +(`setHeader("CamelOpenstackOperation", ...)`). + +The generated Endpoint DSL header accessors on each component's +`HeaderNameBuilder` are renamed accordingly (`operation()` -> +`openstackOperation()`, `password()` -> `openstackKeystonePassword()`, +`adminPassword()` -> `openstackNovaAdminPassword()`, etc.). + +=== camel-shiro - potential breaking change + +The three Exchange header constants in `ShiroSecurityConstants` that drive +Shiro authentication used header values outside the `Camel` namespace +(`SHIRO_SECURITY_TOKEN`, `SHIRO_SECURITY_USERNAME`, `SHIRO_SECURITY_PASSWORD`) +and were therefore not filtered by the default `HeaderFilterStrategy`. They +have been renamed to follow the Camel naming convention. The Java field names +are unchanged; only the header string values have changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `ShiroSecurityConstants.SHIRO_SECURITY_TOKEN` | `SHIRO_SECURITY_TOKEN` | `CamelShiroSecurityToken` +| `ShiroSecurityConstants.SHIRO_SECURITY_USERNAME` | `SHIRO_SECURITY_USERNAME` | `CamelShiroSecurityUsername` +| `ShiroSecurityConstants.SHIRO_SECURITY_PASSWORD` | `SHIRO_SECURITY_PASSWORD` | `CamelShiroSecurityPassword` +|=== + +These headers carry credentials and a serialized authentication token, so +filtering them at transport boundaries by default is particularly important. + +Routes that reference the constants symbolically (for example +`setHeader(ShiroSecurityConstants.SHIRO_SECURITY_USERNAME, ...)`) continue to +work without changes. Routes that set the header by its literal string value +(for example `setHeader("SHIRO_SECURITY_USERNAME", ...)`) must be updated to +use the new value (`setHeader("CamelShiroSecurityUsername", ...)`). + +Because the three header values are now in the `Camel*` namespace, transports +that filter Camel-internal headers by default (JMS, CXF, HTTP, etc.) will +strip the serialized Shiro authentication token before publishing. This is +the intended behavior for untrusted producers. Trusted Shiro-over-transport +routes that previously relied on the token surviving the boundary must opt +those three headers back in via a custom `HeaderFilterStrategy`, for example: + +[source,java] +---- +public class ShiroFriendlyJmsHeaderFilterStrategy extends JmsHeaderFilterStrategy { + @Override + public boolean applyFilterToCamelHeaders(String name, Object value, Exchange ex) { + if (isShiroSecurityHeader(name)) { + return false; + } + return super.applyFilterToCamelHeaders(name, value, ex); + } + + @Override + public boolean applyFilterToExternalHeaders(String name, Object value, Exchange ex) { + if (isShiroSecurityHeader(name)) { + return false; + } + return super.applyFilterToExternalHeaders(name, value, ex); + } + + private static boolean isShiroSecurityHeader(String name) { + return ShiroSecurityConstants.SHIRO_SECURITY_TOKEN.equalsIgnoreCase(name) + || ShiroSecurityConstants.SHIRO_SECURITY_USERNAME.equalsIgnoreCase(name) + || ShiroSecurityConstants.SHIRO_SECURITY_PASSWORD.equalsIgnoreCase(name); + } +} + +jmsComponent.setHeaderFilterStrategy(new ShiroFriendlyJmsHeaderFilterStrategy()); +---- + +A worked example is in `ShiroOverJmsTest` in the `camel-itest` module. + +=== camel-web3j - potential breaking change + +The Exchange header constants in `Web3jConstants` have been renamed to follow the +Camel naming convention used across the rest of the component catalog. The Java +field names are unchanged; only the header string values have changed: + +| `Web3jConstants.ID` | `ID` | `CamelWeb3jId` +| `Web3jConstants.OPERATION` | `OPERATION` | `CamelWeb3jOperation` +| `Web3jConstants.AT_BLOCK` | `AT_BLOCK` | `CamelWeb3jAtBlock` +| `Web3jConstants.ADDRESS` | `ADDRESS` | `CamelWeb3jAddress` +| `Web3jConstants.ADDRESSES` | `ADDRESSES` | `CamelWeb3jAddresses` +| `Web3jConstants.FROM_ADDRESS` | `FROM_ADDRESS` | `CamelWeb3jFromAddress` +| `Web3jConstants.TO_ADDRESS` | `TO_ADDRESS` | `CamelWeb3jToAddress` +| `Web3jConstants.POSITION` | `POSITION` | `CamelWeb3jPosition` +| `Web3jConstants.BLOCK_HASH` | `BLOCK_HASH` | `CamelWeb3jBlockHash` +| `Web3jConstants.TRANSACTION_HASH` | `TRANSACTION_HASH` | `CamelWeb3jTransactionHash` +| `Web3jConstants.SHA3_HASH_OF_DATA_TO_SIGN` | `SHA3_HASH_OF_DATA_TO_SIGN` | `CamelWeb3jSha3HashOfDataToSign` +| `Web3jConstants.SIGNED_TRANSACTION_DATA` | `SIGNED_TRANSACTION_DATA` | `CamelWeb3jSignedTransactionData` +| `Web3jConstants.FULL_TRANSACTION_OBJECTS` | `FULL_TRANSACTION_OBJECTS` | `CamelWeb3jFullTransactionObjects` +| `Web3jConstants.INDEX` | `INDEX` | `CamelWeb3jIndex` +| `Web3jConstants.SOURCE_CODE` | `SOURCE_CODE` | `CamelWeb3jSourceCode` +| `Web3jConstants.FILTER_ID` | `FILTER_ID` | `CamelWeb3jFilterId` +| `Web3jConstants.DATABASE_NAME` | `DATABASE_NAME` | `CamelWeb3jDatabaseName` +| `Web3jConstants.KEY_NAME` | `KEY_NAME` | `CamelWeb3jKeyName` +| `Web3jConstants.NONCE` | `NONCE` | `CamelWeb3jNonce` +| `Web3jConstants.HEADER_POW_HASH` | `HEADER_POW_HASH` | `CamelWeb3jHeaderPowHash` +| `Web3jConstants.MIX_DIGEST` | `MIX_DIGEST` | `CamelWeb3jMixDigest` +| `Web3jConstants.CLIENT_ID` | `CLIENT_ID` | `CamelWeb3jClientId` +| `Web3jConstants.GAS_PRICE` | `GAS_PRICE` | `CamelWeb3jGasPrice` +| `Web3jConstants.GAS_LIMIT` | `GAS_LIMIT` | `CamelWeb3jGasLimit` +| `Web3jConstants.VALUE` | `VALUE` | `CamelWeb3jValue` +| `Web3jConstants.DATA` | `DATA` | `CamelWeb3jData` +| `Web3jConstants.FROM_BLOCK` | `FROM_BLOCK` | `CamelWeb3jFromBlock` +| `Web3jConstants.TO_BLOCK` | `TO_BLOCK` | `CamelWeb3jToBlock` +| `Web3jConstants.TOPICS` | `TOPICS` | `CamelWeb3jTopics` +| `Web3jConstants.PRIORITY` | `PRIORITY` | `CamelWeb3jPriority` +| `Web3jConstants.TTL` | `TTL` | `CamelWeb3jTtl` +| `Web3jConstants.PRIVATE_FOR` | `PRIVATE_FOR` | `CamelWeb3jPrivateFor` +| `Web3jConstants.PRIVATE_FROM` | `PRIVATE_FROM` | `CamelWeb3jPrivateFrom` +| `Web3jConstants.ERROR_CODE` | `ERROR_CODE` | `CamelWeb3jErrorCode` +| `Web3jConstants.ERROR_DATA` | `ERROR_DATA` | `CamelWeb3jErrorData` +| `Web3jConstants.ERROR_MESSAGE` | `ERROR_MESSAGE` | `CamelWeb3jErrorMessage` +| `Web3jConstants.HEADER_STATUS` | `status` | `CamelWeb3jStatus` +| `Web3jConstants.HEADER_OPERATION` | `operation` | `CamelWeb3jHeaderOperation` +| `Web3jConstants.ETH_HASHRATE` | `ETH_HASHRATE` | `CamelWeb3jEthHashrate` +|=== + +Routes that reference the constants symbolically (for example +`setHeader(Web3jConstants.FROM_ADDRESS, ...)`) continue to work without changes. +Routes that set the header by its literal string value (for example +`setHeader("FROM_ADDRESS", ...)`) must be updated to use the new value +(`setHeader("CamelWeb3jFromAddress", ...)`). + +The `Web3jConstants.ETH_HASHRATE` constant is dual-purpose: it is both the +`CamelWeb3jOperation` value that dispatches the `ethHashrate` RPC and the header +name read by the `ETH_SUBMIT_HASHRATE` operation. Routes that referenced the +literal string `"ETH_HASHRATE"` (in either role) must be updated to +`"CamelWeb3jEthHashrate"`. Routes using the symbolic constant reference are +unaffected. The other producer-dispatch operation identifiers (`WEB3_CLIENT_VERSION`, +`ETH_GAS_PRICE`, `ETH_SEND_TRANSACTION`, ...) keep their previous string values +because they are operation enum values rather than Exchange header names. + +As a consequence, the generated Endpoint DSL header accessors on +`Web3jHeaderNameBuilder` have been renamed accordingly: + +* `iD()` -> `web3jId()` +* `atBlock()` -> `web3jAtBlock()` +* `aDDRESS()` -> `web3jAddress()` +* `aDDRESSES()` -> `web3jAddresses()` +* `fromAddress()` -> `web3jFromAddress()` +* `toAddress()` -> `web3jToAddress()` +* `pOSITION()` -> `web3jPosition()` +* `blockHash()` -> `web3jBlockHash()` +* `transactionHash()` -> `web3jTransactionHash()` +* `sha3HashOfDataToSign()` -> `web3jSha3HashOfDataToSign()` +* `signedTransactionData()` -> `web3jSignedTransactionData()` +* `fullTransactionObjects()` -> `web3jFullTransactionObjects()` +* `iNDEX()` -> `web3jIndex()` +* `sourceCode()` -> `web3jSourceCode()` +* `filterId()` -> `web3jFilterId()` +* `databaseName()` -> `web3jDatabaseName()` +* `keyName()` -> `web3jKeyName()` +* `nONCE()` -> `web3jNonce()` +* `headerPowHash()` -> `web3jHeaderPowHash()` +* `mixDigest()` -> `web3jMixDigest()` +* `clientId()` -> `web3jClientId()` +* `gasPrice()` -> `web3jGasPrice()` +* `gasLimit()` -> `web3jGasLimit()` +* `vALUE()` -> `web3jValue()` +* `dATA()` -> `web3jData()` +* `fromBlock()` -> `web3jFromBlock()` +* `toBlock()` -> `web3jToBlock()` +* `tOPICS()` -> `web3jTopics()` +* `pRIORITY()` -> `web3jPriority()` +* `tTL()` -> `web3jTtl()` +* `privateFor()` -> `web3jPrivateFor()` +* `privateFrom()` -> `web3jPrivateFrom()` +* `errorCode()` -> `web3jErrorCode()` +* `errorData()` -> `web3jErrorData()` +* `errorMessage()` -> `web3jErrorMessage()` +* `status()` -> `web3jStatus()` +* `operation()` -> `web3jHeaderOperation()` +* `ethHashrate()` -> `web3jEthHashrate()` + +A new accessor `web3jOperation()` is also generated for `Web3jConstants.OPERATION` +(the producer dispatch header). This constant did not appear in the catalog +previously, so no DSL accessor renaming applies to it. + +=== camel-milo - potential breaking change + +The `MiloConstants.HEADER_AWAIT` constant, which controls whether milo-client +writes are awaited, used the header value `await` — outside the `Camel` +namespace and therefore not filtered by the default `HeaderFilterStrategy`. It +has been renamed to follow the Camel naming convention. The Java field name is +unchanged; only the header string value has changed: + +[options="header"] +|=== +| Constant | Previous value | New value +| `MiloConstants.HEADER_AWAIT` | `await` | `CamelMiloAwait` +|=== + +`MiloConstants.HEADER_NODE_IDS` was already `Camel`-prefixed +(`CamelMiloNodeIds`) and is unchanged. + +Routes that reference the constant symbolically (for example +`setHeader(MiloConstants.HEADER_AWAIT, ...)`) continue to work without changes. +Routes that set the header by its literal string value (for example +`setHeader("await", ...)`) must be updated to use the new value +(`setHeader("CamelMiloAwait", ...)`). + +As a consequence, the generated Endpoint DSL header accessor `await()` on +`MiloClientHeaderNameBuilder` has been renamed to `miloAwait()`. + === camel-mongodb-gridfs The Exchange header values exposed by `GridFsConstants` have been renamed to follow the standard