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