You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2026/01/13 10:12:38 UTC
(camel) branch main updated: CAMEL-22805 - Camel-AWS components: Avoid duplicated code and add pagination to producer operation where it makes sense - Remaining components (#20795)
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new 14963cc1b9d1 CAMEL-22805 - Camel-AWS components: Avoid duplicated code and add pagination to producer operation where it makes sense - Remaining components (#20795)
14963cc1b9d1 is described below
commit 14963cc1b9d1762263a5116d3e36f2d7fc4c222f
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Tue Jan 13 11:12:31 2026 +0100
CAMEL-22805 - Camel-AWS components: Avoid duplicated code and add pagination to producer operation where it makes sense - Remaining components (#20795)
Signed-off-by: Andrea Cosentino <an...@gmail.com>
---
.../apache/camel/catalog/components/aws2-kms.json | 7 +-
.../camel/catalog/components/aws2-lambda.json | 9 +-
.../apache/camel/catalog/components/aws2-mq.json | 6 +-
.../apache/camel/catalog/components/aws2-msk.json | 6 +-
.../apache/camel/catalog/components/aws2-sns.json | 5 +-
.../apache/camel/catalog/components/aws2-sqs.json | 8 +-
.../apache/camel/catalog/components/aws2-sts.json | 7 +-
.../apache/camel/component/aws2/kms/aws2-kms.json | 7 +-
.../camel/component/aws2/kms/KMS2Constants.java | 19 ++
.../camel/component/aws2/kms/KMS2Producer.java | 338 ++++++++++-----------
.../camel/component/aws2/lambda/aws2-lambda.json | 9 +-
.../component/aws2/lambda/Lambda2Constants.java | 25 ++
.../component/aws2/lambda/Lambda2Producer.java | 47 ++-
.../apache/camel/component/aws2/mq/aws2-mq.json | 6 +-
.../camel/component/aws2/mq/MQ2Constants.java | 16 +
.../camel/component/aws2/mq/MQ2Producer.java | 25 +-
.../apache/camel/component/aws2/msk/aws2-msk.json | 6 +-
.../camel/component/aws2/msk/MSK2Constants.java | 16 +
.../camel/component/aws2/msk/MSK2Producer.java | 31 +-
.../apache/camel/component/aws2/sns/aws2-sns.json | 5 +-
.../camel/component/aws2/sns/Sns2Constants.java | 13 +
.../camel/component/aws2/sns/Sns2Producer.java | 5 +
.../apache/camel/component/aws2/sqs/aws2-sqs.json | 8 +-
.../camel/component/aws2/sqs/Sqs2Constants.java | 24 ++
.../camel/component/aws2/sqs/Sqs2Producer.java | 28 +-
.../SqsProducerSendByteArrayLocalstackIT.java | 3 +-
.../SqsProducerSendLocalstackMaxAttributesIT.java | 3 +-
.../apache/camel/component/aws2/sts/aws2-sts.json | 7 +-
.../camel/component/aws2/sts/STS2Constants.java | 13 +
.../camel/component/aws2/sts/STS2Producer.java | 21 ++
.../endpoint/dsl/KMS2EndpointBuilderFactory.java | 60 ++++
.../dsl/Lambda2EndpointBuilderFactory.java | 86 ++++++
.../endpoint/dsl/MQ2EndpointBuilderFactory.java | 48 +++
.../endpoint/dsl/MSK2EndpointBuilderFactory.java | 48 +++
.../endpoint/dsl/STS2EndpointBuilderFactory.java | 60 ++++
.../endpoint/dsl/Sns2EndpointBuilderFactory.java | 36 +++
.../endpoint/dsl/Sqs2EndpointBuilderFactory.java | 72 +++++
37 files changed, 929 insertions(+), 204 deletions(-)
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-kms.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-kms.json
index d98eca3ad8f2..0ef0019a2cc9 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-kms.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-kms.json
@@ -50,7 +50,12 @@
"CamelAwsKMSLimit": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The limit number of keys to return while performing a listKeys operation", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#LIMIT" },
"CamelAwsKMSDescription": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A key description to use while performing a createKey operation", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#DESCRIPTION" },
"CamelAwsKMSKeyId": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key Id", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#KEY_ID" },
- "CamelAwsKMSPendingWindowInDays": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The waiting period, specified in number of days.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#PENDING_WINDOW_IN_DAYS" }
+ "CamelAwsKMSPendingWindowInDays": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The waiting period, specified in number of days.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#PENDING_WINDOW_IN_DAYS" },
+ "CamelAwsKMSMarker": { "index": 5, "kind": "header", "displayName": "", "group": "listKeys", "label": "listKeys", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The marker for the next set of results.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#MARKER" },
+ "CamelAwsKMSTruncated": { "index": 6, "kind": "header", "displayName": "", "group": "listKeys", "label": "listKeys", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#IS_TRUNCATED" },
+ "CamelAwsKMSKeyArn": { "index": 7, "kind": "header", "displayName": "", "group": "createKey describeKey", "label": "createKey describeKey", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the key.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#KEY_ARN" },
+ "CamelAwsKMSKeyState": { "index": 8, "kind": "header", "displayName": "", "group": "createKey describeKey", "label": "createKey describeKey", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The state of the key.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#KEY_STATE" },
+ "CamelAwsKMSDeletionDate": { "index": 9, "kind": "header", "displayName": "", "group": "scheduleKeyDeletion", "label": "scheduleKeyDeletion", "required": false, "javaType": "java.time.Instant", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The date and time after which AWS KMS deletes the key.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#DELETION_DATE" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.kms.KMS2Configuration", "configurationField": "configuration", "description": "Logical name" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-lambda.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-lambda.json
index 2ea88d47eb3e..75e1f190a83b 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-lambda.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-lambda.json
@@ -77,7 +77,14 @@
"CamelAwsLambdaVersionRevisionId": { "index": 26, "kind": "header", "displayName": "", "group": "publishVersion", "label": "publishVersion", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Only update the function if the revision ID matches the ID that's specified.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#VERSION_REVISION_ID" },
"CamelAwsLambdaFunctionVersion": { "index": 27, "kind": "header", "displayName": "", "group": "createAlias listAliases", "label": "createAlias listAliases", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function version to set in the alias", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_VERSION" },
"CamelAwsLambdaAliasFunctionName": { "index": 28, "kind": "header", "displayName": "", "group": "createAlias deleteAlias getAlias", "label": "createAlias deleteAlias getAlias", "required": true, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function name of the alias", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_ALIAS_NAME" },
- "CamelAwsLambdaAliasFunctionDescription": { "index": 29, "kind": "header", "displayName": "", "group": "createAlias", "label": "createAlias", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function description to set in the alias", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_ALIAS_DESCRIPTION" }
+ "CamelAwsLambdaAliasFunctionDescription": { "index": 29, "kind": "header", "displayName": "", "group": "createAlias", "label": "createAlias", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function description to set in the alias", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_ALIAS_DESCRIPTION" },
+ "CamelAwsLambdaMarker": { "index": 30, "kind": "header", "displayName": "", "group": "listFunctions listVersions listAliases listEventSourceMapping listTags", "label": "listFunctions listVersions listAliases listEventSourceMapping listTags", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The marker for the next set of results.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Con [...]
+ "CamelAwsLambdaMaxItems": { "index": 31, "kind": "header", "displayName": "", "group": "listFunctions listVersions listAliases listEventSourceMapping", "label": "listFunctions listVersions listAliases listEventSourceMapping", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of results to return.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#MAX_ITEMS" },
+ "CamelAwsLambdaIsTruncated": { "index": 32, "kind": "header", "displayName": "", "group": "listFunctions listVersions listAliases listEventSourceMapping", "label": "listFunctions listVersions listAliases listEventSourceMapping", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2C [...]
+ "CamelAwsLambdaFunctionArn": { "index": 33, "kind": "header", "displayName": "", "group": "createFunction getFunction publishVersion createAlias getAlias", "label": "createFunction getFunction publishVersion createAlias getAlias", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the function.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Consta [...]
+ "CamelAwsLambdaStatusCode": { "index": 34, "kind": "header", "displayName": "", "group": "invokeFunction", "label": "invokeFunction", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP status code of the function invocation.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#STATUS_CODE" },
+ "CamelAwsLambdaFunctionError": { "index": 35, "kind": "header", "displayName": "", "group": "invokeFunction", "label": "invokeFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If present, indicates that an error occurred during function execution.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_ERROR" },
+ "CamelAwsLambdaLogResult": { "index": 36, "kind": "header", "displayName": "", "group": "invokeFunction", "label": "invokeFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The last 4 KB of the execution log.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#LOG_RESULT" }
},
"properties": {
"function": { "index": 0, "kind": "path", "displayName": "Function", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of the Lambda function." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-mq.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-mq.json
index d49fc6b38e0c..3f3c248cc56a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-mq.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-mq.json
@@ -58,7 +58,11 @@
"CamelAwsMQBrokerDeploymentMode": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The deployment mode for the broker in the createBroker operation", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_DEPLOYMENT_MODE" },
"CamelAwsMQBrokerInstanceType": { "index": 8, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The instance type for the MQ machine in the createBroker operation", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_INSTANCE_TYPE" },
"CamelAwsMQBrokerUsers": { "index": 9, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "List<User>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The list of users for MQ", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_USERS" },
- "CamelAwsMQBrokerPubliclyAccessible": { "index": 10, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "If the MQ instance must be publicly available or not.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_PUBLICLY_ACCESSIBLE" }
+ "CamelAwsMQBrokerPubliclyAccessible": { "index": 10, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "If the MQ instance must be publicly available or not.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_PUBLICLY_ACCESSIBLE" },
+ "CamelAwsMQNextToken": { "index": 11, "kind": "header", "displayName": "", "group": "listBrokers", "label": "listBrokers", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The token for the next set of results.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#NEXT_TOKEN" },
+ "CamelAwsMQIsTruncated": { "index": 12, "kind": "header", "displayName": "", "group": "listBrokers", "label": "listBrokers", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#IS_TRUNCATED" },
+ "CamelAwsMQBrokerArn": { "index": 13, "kind": "header", "displayName": "", "group": "createBroker", "label": "createBroker", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the broker.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_ARN" },
+ "CamelAwsMQBrokerState": { "index": 14, "kind": "header", "displayName": "", "group": "describeBroker", "label": "describeBroker", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The state of the broker.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_STATE" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.mq.MQ2Configuration", "configurationField": "configuration", "description": "Logical name" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-msk.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-msk.json
index 9f4e88bf827f..867e18245d2c 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-msk.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-msk.json
@@ -54,7 +54,11 @@
"CamelAwsMSKClusterArn": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cluster arn for delete operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#CLUSTER_ARN" },
"CamelAwsMSKClusterKafkaVersion": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Kafka for the cluster during create operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#CLUSTER_KAFKA_VERSION" },
"CamelAwsMSKBrokerNodesNumber": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of nodes for the cluster during create operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#BROKER_NODES_NUMBER" },
- "CamelAwsMSKBrokerNodesGroupInfo": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.kafka.model.BrokerNodeGroupInfo", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Broker nodes group info to provide during the create operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#BROKER_NODES_GROUP_INFO" }
+ "CamelAwsMSKBrokerNodesGroupInfo": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.kafka.model.BrokerNodeGroupInfo", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Broker nodes group info to provide during the create operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#BROKER_NODES_GROUP_INFO" },
+ "CamelAwsMSKNextToken": { "index": 7, "kind": "header", "displayName": "", "group": "listClusters", "label": "listClusters", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The token for the next set of results.", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#NEXT_TOKEN" },
+ "CamelAwsMSKMaxResults": { "index": 8, "kind": "header", "displayName": "", "group": "listClusters", "label": "listClusters", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of results to return.", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#MAX_RESULTS" },
+ "CamelAwsMSKIsTruncated": { "index": 9, "kind": "header", "displayName": "", "group": "listClusters", "label": "listClusters", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#IS_TRUNCATED" },
+ "CamelAwsMSKClusterState": { "index": 10, "kind": "header", "displayName": "", "group": "createCluster describeCluster", "label": "createCluster describeCluster", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The state of the cluster.", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#CLUSTER_STATE" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.msk.MSK2Configuration", "configurationField": "configuration", "description": "Logical name" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sns.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sns.json
index ad028d0acf1b..dd46f96611e1 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sns.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sns.json
@@ -59,7 +59,10 @@
"headers": {
"CamelAwsSnsMessageId": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SNS message ID.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#MESSAGE_ID" },
"CamelAwsSnsSubject": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SNS message subject. If not set, the subject from the SnsConfiguration is used.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#SUBJECT" },
- "CamelAwsSnsMessageStructure": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message structure to use such as json.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#MESSAGE_STRUCTURE" }
+ "CamelAwsSnsMessageStructure": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message structure to use such as json.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#MESSAGE_STRUCTURE" },
+ "CamelAwsSnsSequenceNumber": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sequence number for FIFO topics.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#SEQUENCE_NUMBER" },
+ "CamelAwsSnsFailedMessageCount": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of failed messages in a batch publish operation.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#FAILED_MESSAGE_COUNT" },
+ "CamelAwsSnsSuccessfulMessageCount": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of successful messages in a batch publish operation.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#SUCCESSFUL_MESSAGE_COUNT" }
},
"properties": {
"topicNameOrArn": { "index": 0, "kind": "path", "displayName": "Topic Name Or Arn", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Topic name or ARN" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sqs.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sqs.json
index ca36257c6475..6759e71ffd08 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sqs.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sqs.json
@@ -85,7 +85,13 @@
"CamelAwsSqsReceiptHandle": { "index": 4, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SQS message receipt handle.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#RECEIPT_HANDLE" },
"CamelAwsSqsDelaySeconds": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The delay seconds that the Amazon SQS message can be see by others.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#DELAY_HEADER" },
"CamelAwsSqsPrefix": { "index": 6, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A string to use for filtering the list results.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SQS_QUEUE_PREFIX" },
- "CamelAwsSqsOperation": { "index": 7, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SQS_OPERATION" }
+ "CamelAwsSqsOperation": { "index": 7, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SQS_OPERATION" },
+ "CamelAwsSqsNextToken": { "index": 8, "kind": "header", "displayName": "", "group": "listQueues", "label": "listQueues", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The token for the next set of results.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#NEXT_TOKEN" },
+ "CamelAwsSqsMaxResults": { "index": 9, "kind": "header", "displayName": "", "group": "listQueues", "label": "listQueues", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of results to return.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#MAX_RESULTS" },
+ "CamelAwsSqsIsTruncated": { "index": 10, "kind": "header", "displayName": "", "group": "listQueues", "label": "listQueues", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#IS_TRUNCATED" },
+ "CamelAwsSqsSequenceNumber": { "index": 11, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sequence number for FIFO queues.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SEQUENCE_NUMBER" },
+ "CamelAwsSqsFailedMessageCount": { "index": 12, "kind": "header", "displayName": "", "group": "sendBatchMessage", "label": "sendBatchMessage", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of failed messages in a batch send operation.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#FAILED_MESSAGE_COUNT" },
+ "CamelAwsSqsSuccessfulMessageCount": { "index": 13, "kind": "header", "displayName": "", "group": "sendBatchMessage", "label": "sendBatchMessage", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of successful messages in a batch send operation.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SUCCESSFUL_MESSAGE_COUNT" }
},
"properties": {
"queueNameOrArn": { "index": 0, "kind": "path", "displayName": "Queue Name Or Arn", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Queue name or ARN" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sts.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sts.json
index a1508908131c..5231ee6611cc 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sts.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/aws2-sts.json
@@ -48,7 +48,12 @@
"CamelAwsStsRoleArn": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the role to assume.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#ROLE_ARN" },
"CamelAwsStsRoleSessionName": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "An identifier for the assumed role session.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#ROLE_SESSION_NAME" },
"CamelAwsStsFederatedName": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the federated user.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#FEDERATED_NAME" },
- "CamelAwsStsAssumeRoleDurationSeconds": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The duration, in seconds, of the role session. It could go from 900 seconds, to 1 to 12 hours (dependent on administrator settings. The default if not specified is 3600 seconds.", "constantName": "org.apache.camel.component. [...]
+ "CamelAwsStsAssumeRoleDurationSeconds": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The duration, in seconds, of the role session. It could go from 900 seconds, to 1 to 12 hours (dependent on administrator settings. The default if not specified is 3600 seconds.", "constantName": "org.apache.camel.component. [...]
+ "CamelAwsStsAccessKeyId": { "index": 5, "kind": "header", "displayName": "", "group": "assumeRole getSessionToken getFederationToken", "label": "assumeRole getSessionToken getFederationToken", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The temporary access key ID.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#ACCESS_KEY_ID" },
+ "CamelAwsStsSecretKey": { "index": 6, "kind": "header", "displayName": "", "group": "assumeRole getSessionToken getFederationToken", "label": "assumeRole getSessionToken getFederationToken", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The temporary secret access key.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#SECRET_KEY_ID" },
+ "CamelAwsStsSessionToken": { "index": 7, "kind": "header", "displayName": "", "group": "assumeRole getSessionToken getFederationToken", "label": "assumeRole getSessionToken getFederationToken", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The temporary session token.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#SESSION_TOKEN" },
+ "CamelAwsStsExpiration": { "index": 8, "kind": "header", "displayName": "", "group": "assumeRole getSessionToken getFederationToken", "label": "assumeRole getSessionToken getFederationToken", "required": false, "javaType": "java.time.Instant", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The expiration date and time of the credentials.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#EXPIRATION" },
+ "CamelAwsStsAssumedRoleArn": { "index": 9, "kind": "header", "displayName": "", "group": "assumeRole", "label": "assumeRole", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the assumed role.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#ASSUMED_ROLE_ARN" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.sts.STS2Configuration", "configurationField": "configuration", "description": "Logical name" },
diff --git a/components/camel-aws/camel-aws2-kms/src/generated/resources/META-INF/org/apache/camel/component/aws2/kms/aws2-kms.json b/components/camel-aws/camel-aws2-kms/src/generated/resources/META-INF/org/apache/camel/component/aws2/kms/aws2-kms.json
index d98eca3ad8f2..0ef0019a2cc9 100644
--- a/components/camel-aws/camel-aws2-kms/src/generated/resources/META-INF/org/apache/camel/component/aws2/kms/aws2-kms.json
+++ b/components/camel-aws/camel-aws2-kms/src/generated/resources/META-INF/org/apache/camel/component/aws2/kms/aws2-kms.json
@@ -50,7 +50,12 @@
"CamelAwsKMSLimit": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The limit number of keys to return while performing a listKeys operation", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#LIMIT" },
"CamelAwsKMSDescription": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A key description to use while performing a createKey operation", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#DESCRIPTION" },
"CamelAwsKMSKeyId": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The key Id", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#KEY_ID" },
- "CamelAwsKMSPendingWindowInDays": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The waiting period, specified in number of days.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#PENDING_WINDOW_IN_DAYS" }
+ "CamelAwsKMSPendingWindowInDays": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The waiting period, specified in number of days.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#PENDING_WINDOW_IN_DAYS" },
+ "CamelAwsKMSMarker": { "index": 5, "kind": "header", "displayName": "", "group": "listKeys", "label": "listKeys", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The marker for the next set of results.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#MARKER" },
+ "CamelAwsKMSTruncated": { "index": 6, "kind": "header", "displayName": "", "group": "listKeys", "label": "listKeys", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#IS_TRUNCATED" },
+ "CamelAwsKMSKeyArn": { "index": 7, "kind": "header", "displayName": "", "group": "createKey describeKey", "label": "createKey describeKey", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the key.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#KEY_ARN" },
+ "CamelAwsKMSKeyState": { "index": 8, "kind": "header", "displayName": "", "group": "createKey describeKey", "label": "createKey describeKey", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The state of the key.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#KEY_STATE" },
+ "CamelAwsKMSDeletionDate": { "index": 9, "kind": "header", "displayName": "", "group": "scheduleKeyDeletion", "label": "scheduleKeyDeletion", "required": false, "javaType": "java.time.Instant", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The date and time after which AWS KMS deletes the key.", "constantName": "org.apache.camel.component.aws2.kms.KMS2Constants#DELETION_DATE" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.kms.KMS2Configuration", "configurationField": "configuration", "description": "Logical name" },
diff --git a/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Constants.java b/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Constants.java
index 425997ccc546..68803d3afd96 100644
--- a/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Constants.java
+++ b/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Constants.java
@@ -32,4 +32,23 @@ public interface KMS2Constants {
String KEY_ID = "CamelAwsKMSKeyId";
@Metadata(description = "The waiting period, specified in number of days.", javaType = "Integer")
String PENDING_WINDOW_IN_DAYS = "CamelAwsKMSPendingWindowInDays";
+
+ // Pagination constants
+ @Metadata(label = "listKeys",
+ description = "The marker for the next set of results.", javaType = "String")
+ String MARKER = "CamelAwsKMSMarker";
+ @Metadata(label = "listKeys",
+ description = "Whether the response has more results (is truncated).", javaType = "Boolean")
+ String IS_TRUNCATED = "CamelAwsKMSTruncated";
+
+ // Response metadata
+ @Metadata(label = "createKey describeKey",
+ description = "The Amazon Resource Name (ARN) of the key.", javaType = "String")
+ String KEY_ARN = "CamelAwsKMSKeyArn";
+ @Metadata(label = "createKey describeKey",
+ description = "The state of the key.", javaType = "String")
+ String KEY_STATE = "CamelAwsKMSKeyState";
+ @Metadata(label = "scheduleKeyDeletion",
+ description = "The date and time after which AWS KMS deletes the key.", javaType = "java.time.Instant")
+ String DELETION_DATE = "CamelAwsKMSDeletionDate";
}
diff --git a/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Producer.java b/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Producer.java
index 10f9bd1b6dde..dcbc8c92ace3 100644
--- a/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Producer.java
+++ b/components/camel-aws/camel-aws2-kms/src/main/java/org/apache/camel/component/aws2/kms/KMS2Producer.java
@@ -16,6 +16,10 @@
*/
package org.apache.camel.component.aws2.kms;
+import java.util.function.BiConsumer;
+import java.util.function.Function;
+import java.util.function.Supplier;
+
import org.apache.camel.Endpoint;
import org.apache.camel.Exchange;
import org.apache.camel.InvalidPayloadException;
@@ -32,9 +36,7 @@ import software.amazon.awssdk.services.kms.model.CreateKeyResponse;
import software.amazon.awssdk.services.kms.model.DescribeKeyRequest;
import software.amazon.awssdk.services.kms.model.DescribeKeyResponse;
import software.amazon.awssdk.services.kms.model.DisableKeyRequest;
-import software.amazon.awssdk.services.kms.model.DisableKeyResponse;
import software.amazon.awssdk.services.kms.model.EnableKeyRequest;
-import software.amazon.awssdk.services.kms.model.EnableKeyResponse;
import software.amazon.awssdk.services.kms.model.ListKeysRequest;
import software.amazon.awssdk.services.kms.model.ListKeysResponse;
import software.amazon.awssdk.services.kms.model.ScheduleKeyDeletionRequest;
@@ -110,210 +112,192 @@ public class KMS2Producer extends DefaultProducer {
}
private void listKeys(KmsClient kmsClient, Exchange exchange) throws InvalidPayloadException {
- if (getConfiguration().isPojoRequest()) {
- Object payload = exchange.getIn().getMandatoryBody();
- if (payload instanceof ListKeysRequest) {
- ListKeysResponse result;
- try {
- result = kmsClient.listKeys((ListKeysRequest) payload);
- } catch (AwsServiceException ase) {
- LOG.trace("List Keys command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
- } else {
- ListKeysRequest.Builder builder = ListKeysRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(KMS2Constants.LIMIT))) {
- int limit = exchange.getIn().getHeader(KMS2Constants.LIMIT, Integer.class);
- builder.limit(limit);
- }
- ListKeysResponse result;
- try {
- result = kmsClient.listKeys(builder.build());
- } catch (AwsServiceException ase) {
- LOG.trace("List Keys command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
+ executeOperation(
+ exchange,
+ ListKeysRequest.class,
+ kmsClient::listKeys,
+ () -> {
+ ListKeysRequest.Builder builder = ListKeysRequest.builder();
+ Integer limit = getOptionalHeader(exchange, KMS2Constants.LIMIT, Integer.class);
+ if (limit != null) {
+ builder.limit(limit);
+ }
+ String marker = getOptionalHeader(exchange, KMS2Constants.MARKER, String.class);
+ if (marker != null) {
+ builder.marker(marker);
+ }
+ return kmsClient.listKeys(builder.build());
+ },
+ "List Keys",
+ (ListKeysResponse response, Message message) -> {
+ message.setHeader(KMS2Constants.MARKER, response.nextMarker());
+ message.setHeader(KMS2Constants.IS_TRUNCATED, response.truncated());
+ });
}
private void createKey(KmsClient kmsClient, Exchange exchange) throws InvalidPayloadException {
- if (getConfiguration().isPojoRequest()) {
- Object payload = exchange.getIn().getMandatoryBody();
- if (payload instanceof CreateKeyRequest) {
- CreateKeyResponse result;
- try {
- result = kmsClient.createKey((CreateKeyRequest) payload);
- } catch (AwsServiceException ase) {
- LOG.trace("Create Key command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
- } else {
- CreateKeyRequest.Builder builder = CreateKeyRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(KMS2Constants.DESCRIPTION))) {
- String description = exchange.getIn().getHeader(KMS2Constants.DESCRIPTION, String.class);
- builder.description(description);
- }
- CreateKeyResponse result;
- try {
- result = kmsClient.createKey(builder.build());
- } catch (AwsServiceException ase) {
- LOG.trace("Create Key command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
+ executeOperation(
+ exchange,
+ CreateKeyRequest.class,
+ kmsClient::createKey,
+ () -> {
+ CreateKeyRequest.Builder builder = CreateKeyRequest.builder();
+ String description = getOptionalHeader(exchange, KMS2Constants.DESCRIPTION, String.class);
+ if (description != null) {
+ builder.description(description);
+ }
+ return kmsClient.createKey(builder.build());
+ },
+ "Create Key",
+ (CreateKeyResponse response, Message message) -> {
+ if (response.keyMetadata() != null) {
+ message.setHeader(KMS2Constants.KEY_ID, response.keyMetadata().keyId());
+ message.setHeader(KMS2Constants.KEY_ARN, response.keyMetadata().arn());
+ message.setHeader(KMS2Constants.KEY_STATE, response.keyMetadata().keyStateAsString());
+ }
+ });
}
private void disableKey(KmsClient kmsClient, Exchange exchange) throws InvalidPayloadException {
- if (getConfiguration().isPojoRequest()) {
- Object payload = exchange.getIn().getMandatoryBody();
- if (payload instanceof DisableKeyRequest) {
- DisableKeyResponse result;
- try {
- result = kmsClient.disableKey((DisableKeyRequest) payload);
- } catch (AwsServiceException ase) {
- LOG.trace("Disable Key command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
- } else {
- DisableKeyRequest.Builder builder = DisableKeyRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(KMS2Constants.KEY_ID))) {
- String keyId = exchange.getIn().getHeader(KMS2Constants.KEY_ID, String.class);
- builder.keyId(keyId);
- } else {
- throw new IllegalArgumentException(MISSING_KEY_ID);
- }
- DisableKeyResponse result;
- try {
- result = kmsClient.disableKey(builder.build());
- } catch (AwsServiceException ase) {
- LOG.trace("Disable Key command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
+ executeOperation(
+ exchange,
+ DisableKeyRequest.class,
+ kmsClient::disableKey,
+ () -> {
+ String keyId = getRequiredHeader(exchange, KMS2Constants.KEY_ID, String.class, MISSING_KEY_ID);
+ return kmsClient.disableKey(DisableKeyRequest.builder().keyId(keyId).build());
+ },
+ "Disable Key");
}
private void scheduleKeyDeletion(KmsClient kmsClient, Exchange exchange) throws InvalidPayloadException {
- if (getConfiguration().isPojoRequest()) {
- Object payload = exchange.getIn().getMandatoryBody();
- if (payload instanceof ScheduleKeyDeletionRequest) {
- ScheduleKeyDeletionResponse result;
- try {
- result = kmsClient.scheduleKeyDeletion((ScheduleKeyDeletionRequest) payload);
- } catch (AwsServiceException ase) {
- LOG.trace("Schedule Key Deletion command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
- } else {
- ScheduleKeyDeletionRequest.Builder builder = ScheduleKeyDeletionRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(KMS2Constants.KEY_ID))) {
- String keyId = exchange.getIn().getHeader(KMS2Constants.KEY_ID, String.class);
- builder.keyId(keyId);
- } else {
- throw new IllegalArgumentException(MISSING_KEY_ID);
- }
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(KMS2Constants.PENDING_WINDOW_IN_DAYS))) {
- int pendingWindows = exchange.getIn().getHeader(KMS2Constants.PENDING_WINDOW_IN_DAYS, Integer.class);
- builder.pendingWindowInDays(pendingWindows);
- }
- ScheduleKeyDeletionResponse result;
- try {
- result = kmsClient.scheduleKeyDeletion(builder.build());
- } catch (AwsServiceException ase) {
- LOG.trace("Schedule Key Deletion command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
+ executeOperation(
+ exchange,
+ ScheduleKeyDeletionRequest.class,
+ kmsClient::scheduleKeyDeletion,
+ () -> {
+ ScheduleKeyDeletionRequest.Builder builder = ScheduleKeyDeletionRequest.builder();
+ String keyId = getRequiredHeader(exchange, KMS2Constants.KEY_ID, String.class, MISSING_KEY_ID);
+ builder.keyId(keyId);
+ Integer pendingWindows = getOptionalHeader(exchange, KMS2Constants.PENDING_WINDOW_IN_DAYS, Integer.class);
+ if (pendingWindows != null) {
+ builder.pendingWindowInDays(pendingWindows);
+ }
+ return kmsClient.scheduleKeyDeletion(builder.build());
+ },
+ "Schedule Key Deletion",
+ (ScheduleKeyDeletionResponse response, Message message) -> {
+ message.setHeader(KMS2Constants.KEY_ID, response.keyId());
+ message.setHeader(KMS2Constants.DELETION_DATE, response.deletionDate());
+ });
}
private void describeKey(KmsClient kmsClient, Exchange exchange) throws InvalidPayloadException {
- if (getConfiguration().isPojoRequest()) {
- Object payload = exchange.getIn().getMandatoryBody();
- if (payload instanceof DescribeKeyRequest) {
- DescribeKeyResponse result;
- try {
- result = kmsClient.describeKey((DescribeKeyRequest) payload);
- } catch (AwsServiceException ase) {
- LOG.trace("Describe Key command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
- } else {
- DescribeKeyRequest.Builder builder = DescribeKeyRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(KMS2Constants.KEY_ID))) {
- String keyId = exchange.getIn().getHeader(KMS2Constants.KEY_ID, String.class);
- builder.keyId(keyId);
- } else {
- throw new IllegalArgumentException(MISSING_KEY_ID);
- }
- DescribeKeyResponse result;
- try {
- result = kmsClient.describeKey(builder.build());
- } catch (AwsServiceException ase) {
- LOG.trace("Describe Key command returned the error code {}", ase.awsErrorDetails().errorCode());
- throw ase;
- }
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
+ executeOperation(
+ exchange,
+ DescribeKeyRequest.class,
+ kmsClient::describeKey,
+ () -> {
+ String keyId = getRequiredHeader(exchange, KMS2Constants.KEY_ID, String.class, MISSING_KEY_ID);
+ return kmsClient.describeKey(DescribeKeyRequest.builder().keyId(keyId).build());
+ },
+ "Describe Key",
+ (DescribeKeyResponse response, Message message) -> {
+ if (response.keyMetadata() != null) {
+ message.setHeader(KMS2Constants.KEY_ID, response.keyMetadata().keyId());
+ message.setHeader(KMS2Constants.KEY_ARN, response.keyMetadata().arn());
+ message.setHeader(KMS2Constants.KEY_STATE, response.keyMetadata().keyStateAsString());
+ }
+ });
}
private void enableKey(KmsClient kmsClient, Exchange exchange) throws InvalidPayloadException {
+ executeOperation(
+ exchange,
+ EnableKeyRequest.class,
+ kmsClient::enableKey,
+ () -> {
+ String keyId = getRequiredHeader(exchange, KMS2Constants.KEY_ID, String.class, MISSING_KEY_ID);
+ return kmsClient.enableKey(EnableKeyRequest.builder().keyId(keyId).build());
+ },
+ "Enable Key");
+ }
+
+ public static Message getMessageForResponse(final Exchange exchange) {
+ return exchange.getMessage();
+ }
+
+ /**
+ * Executes a KMS operation with POJO request support.
+ */
+ private <REQ, RES> void executeOperation(
+ Exchange exchange,
+ Class<REQ> requestClass,
+ Function<REQ, RES> pojoExecutor,
+ Supplier<RES> headerExecutor,
+ String operationName)
+ throws InvalidPayloadException {
+ executeOperation(exchange, requestClass, pojoExecutor, headerExecutor, operationName, null);
+ }
+
+ /**
+ * Executes a KMS operation with POJO request support and optional response post-processing.
+ */
+ private <REQ, RES> void executeOperation(
+ Exchange exchange,
+ Class<REQ> requestClass,
+ Function<REQ, RES> pojoExecutor,
+ Supplier<RES> headerExecutor,
+ String operationName,
+ BiConsumer<RES, Message> responseProcessor)
+ throws InvalidPayloadException {
+
+ RES result;
if (getConfiguration().isPojoRequest()) {
Object payload = exchange.getIn().getMandatoryBody();
- if (payload instanceof EnableKeyRequest) {
- EnableKeyResponse result;
+ if (requestClass.isInstance(payload)) {
try {
- result = kmsClient.enableKey((EnableKeyRequest) payload);
+ result = pojoExecutor.apply(requestClass.cast(payload));
} catch (AwsServiceException ase) {
- LOG.trace("Enable Key command returned the error code {}", ase.awsErrorDetails().errorCode());
+ LOG.trace("{} command returned the error code {}", operationName, ase.awsErrorDetails().errorCode());
throw ase;
}
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
- }
- } else {
- EnableKeyRequest.Builder builder = EnableKeyRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(KMS2Constants.KEY_ID))) {
- String keyId = exchange.getIn().getHeader(KMS2Constants.KEY_ID, String.class);
- builder.keyId(keyId);
} else {
- throw new IllegalArgumentException(MISSING_KEY_ID);
+ throw new IllegalArgumentException(
+ String.format("Expected body of type %s but was %s",
+ requestClass.getName(),
+ payload != null ? payload.getClass().getName() : "null"));
}
- EnableKeyResponse result;
+ } else {
try {
- result = kmsClient.enableKey(builder.build());
+ result = headerExecutor.get();
} catch (AwsServiceException ase) {
- LOG.trace("Enable Key command returned the error code {}", ase.awsErrorDetails().errorCode());
+ LOG.trace("{} command returned the error code {}", operationName, ase.awsErrorDetails().errorCode());
throw ase;
}
- Message message = getMessageForResponse(exchange);
- message.setBody(result);
+ }
+ Message message = getMessageForResponse(exchange);
+ message.setBody(result);
+ if (responseProcessor != null) {
+ responseProcessor.accept(result, message);
}
}
- public static Message getMessageForResponse(final Exchange exchange) {
- return exchange.getMessage();
+ /**
+ * Gets a required header value or throws an IllegalArgumentException.
+ */
+ private <T> T getRequiredHeader(Exchange exchange, String headerName, Class<T> headerType, String errorMessage) {
+ T value = exchange.getIn().getHeader(headerName, headerType);
+ if (ObjectHelper.isEmpty(value)) {
+ throw new IllegalArgumentException(errorMessage);
+ }
+ return value;
+ }
+
+ /**
+ * Gets an optional header value.
+ */
+ private <T> T getOptionalHeader(Exchange exchange, String headerName, Class<T> headerType) {
+ return exchange.getIn().getHeader(headerName, headerType);
}
}
diff --git a/components/camel-aws/camel-aws2-lambda/src/generated/resources/META-INF/org/apache/camel/component/aws2/lambda/aws2-lambda.json b/components/camel-aws/camel-aws2-lambda/src/generated/resources/META-INF/org/apache/camel/component/aws2/lambda/aws2-lambda.json
index 2ea88d47eb3e..75e1f190a83b 100644
--- a/components/camel-aws/camel-aws2-lambda/src/generated/resources/META-INF/org/apache/camel/component/aws2/lambda/aws2-lambda.json
+++ b/components/camel-aws/camel-aws2-lambda/src/generated/resources/META-INF/org/apache/camel/component/aws2/lambda/aws2-lambda.json
@@ -77,7 +77,14 @@
"CamelAwsLambdaVersionRevisionId": { "index": 26, "kind": "header", "displayName": "", "group": "publishVersion", "label": "publishVersion", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Only update the function if the revision ID matches the ID that's specified.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#VERSION_REVISION_ID" },
"CamelAwsLambdaFunctionVersion": { "index": 27, "kind": "header", "displayName": "", "group": "createAlias listAliases", "label": "createAlias listAliases", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function version to set in the alias", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_VERSION" },
"CamelAwsLambdaAliasFunctionName": { "index": 28, "kind": "header", "displayName": "", "group": "createAlias deleteAlias getAlias", "label": "createAlias deleteAlias getAlias", "required": true, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function name of the alias", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_ALIAS_NAME" },
- "CamelAwsLambdaAliasFunctionDescription": { "index": 29, "kind": "header", "displayName": "", "group": "createAlias", "label": "createAlias", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function description to set in the alias", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_ALIAS_DESCRIPTION" }
+ "CamelAwsLambdaAliasFunctionDescription": { "index": 29, "kind": "header", "displayName": "", "group": "createAlias", "label": "createAlias", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The function description to set in the alias", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_ALIAS_DESCRIPTION" },
+ "CamelAwsLambdaMarker": { "index": 30, "kind": "header", "displayName": "", "group": "listFunctions listVersions listAliases listEventSourceMapping listTags", "label": "listFunctions listVersions listAliases listEventSourceMapping listTags", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The marker for the next set of results.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Con [...]
+ "CamelAwsLambdaMaxItems": { "index": 31, "kind": "header", "displayName": "", "group": "listFunctions listVersions listAliases listEventSourceMapping", "label": "listFunctions listVersions listAliases listEventSourceMapping", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of results to return.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#MAX_ITEMS" },
+ "CamelAwsLambdaIsTruncated": { "index": 32, "kind": "header", "displayName": "", "group": "listFunctions listVersions listAliases listEventSourceMapping", "label": "listFunctions listVersions listAliases listEventSourceMapping", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2C [...]
+ "CamelAwsLambdaFunctionArn": { "index": 33, "kind": "header", "displayName": "", "group": "createFunction getFunction publishVersion createAlias getAlias", "label": "createFunction getFunction publishVersion createAlias getAlias", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the function.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Consta [...]
+ "CamelAwsLambdaStatusCode": { "index": 34, "kind": "header", "displayName": "", "group": "invokeFunction", "label": "invokeFunction", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The HTTP status code of the function invocation.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#STATUS_CODE" },
+ "CamelAwsLambdaFunctionError": { "index": 35, "kind": "header", "displayName": "", "group": "invokeFunction", "label": "invokeFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If present, indicates that an error occurred during function execution.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#FUNCTION_ERROR" },
+ "CamelAwsLambdaLogResult": { "index": 36, "kind": "header", "displayName": "", "group": "invokeFunction", "label": "invokeFunction", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The last 4 KB of the execution log.", "constantName": "org.apache.camel.component.aws2.lambda.Lambda2Constants#LOG_RESULT" }
},
"properties": {
"function": { "index": 0, "kind": "path", "displayName": "Function", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Name of the Lambda function." },
diff --git a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Constants.java b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Constants.java
index 5310d30c7b60..f09516d670b3 100644
--- a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Constants.java
+++ b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Constants.java
@@ -132,4 +132,29 @@ public interface Lambda2Constants {
String FUNCTION_ALIAS_NAME = "CamelAwsLambdaAliasFunctionName";
@Metadata(label = "createAlias", description = "The function description to set in the alias", javaType = "String")
String FUNCTION_ALIAS_DESCRIPTION = "CamelAwsLambdaAliasFunctionDescription";
+
+ // Pagination constants
+ @Metadata(label = "listFunctions listVersions listAliases listEventSourceMapping listTags",
+ description = "The marker for the next set of results.", javaType = "String")
+ String MARKER = "CamelAwsLambdaMarker";
+ @Metadata(label = "listFunctions listVersions listAliases listEventSourceMapping",
+ description = "The maximum number of results to return.", javaType = "Integer")
+ String MAX_ITEMS = "CamelAwsLambdaMaxItems";
+ @Metadata(label = "listFunctions listVersions listAliases listEventSourceMapping",
+ description = "Whether the response has more results (is truncated).", javaType = "Boolean")
+ String IS_TRUNCATED = "CamelAwsLambdaIsTruncated";
+
+ // Response metadata
+ @Metadata(label = "createFunction getFunction publishVersion createAlias getAlias",
+ description = "The Amazon Resource Name (ARN) of the function.", javaType = "String")
+ String FUNCTION_ARN = "CamelAwsLambdaFunctionArn";
+ @Metadata(label = "invokeFunction",
+ description = "The HTTP status code of the function invocation.", javaType = "Integer")
+ String STATUS_CODE = "CamelAwsLambdaStatusCode";
+ @Metadata(label = "invokeFunction",
+ description = "If present, indicates that an error occurred during function execution.", javaType = "String")
+ String FUNCTION_ERROR = "CamelAwsLambdaFunctionError";
+ @Metadata(label = "invokeFunction",
+ description = "The last 4 KB of the execution log.", javaType = "String")
+ String LOG_RESULT = "CamelAwsLambdaLogResult";
}
diff --git a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Producer.java b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Producer.java
index d3e6d0d54da9..acee09d80187 100644
--- a/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Producer.java
+++ b/components/camel-aws/camel-aws2-lambda/src/main/java/org/apache/camel/component/aws2/lambda/Lambda2Producer.java
@@ -207,6 +207,14 @@ public class Lambda2Producer extends DefaultProducer {
request = exchange.getIn().getMandatoryBody(ListFunctionsRequest.class);
} else {
ListFunctionsRequest.Builder builder = ListFunctionsRequest.builder();
+ String marker = getOptionalHeader(exchange, Lambda2Constants.MARKER, String.class);
+ if (marker != null) {
+ builder.marker(marker);
+ }
+ Integer maxItems = getOptionalHeader(exchange, Lambda2Constants.MAX_ITEMS, Integer.class);
+ if (maxItems != null) {
+ builder.maxItems(maxItems);
+ }
request = builder.build();
}
try {
@@ -217,6 +225,8 @@ public class Lambda2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(Lambda2Constants.MARKER, result.nextMarker());
+ message.setHeader(Lambda2Constants.IS_TRUNCATED, result.nextMarker() != null);
}
private void invokeFunction(LambdaClient lambdaClient, Exchange exchange) throws InvalidPayloadException {
@@ -237,6 +247,9 @@ public class Lambda2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result.payload().asUtf8String());
+ message.setHeader(Lambda2Constants.STATUS_CODE, result.statusCode());
+ message.setHeader(Lambda2Constants.FUNCTION_ERROR, result.functionError());
+ message.setHeader(Lambda2Constants.LOG_RESULT, result.logResult());
}
@SuppressWarnings("unchecked")
@@ -374,6 +387,7 @@ public class Lambda2Producer extends DefaultProducer {
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(Lambda2Constants.FUNCTION_ARN, result.functionArn());
}
private void updateFunction(LambdaClient lambdaClient, Exchange exchange) throws Exception {
@@ -609,16 +623,26 @@ public class Lambda2Producer extends DefaultProducer {
} else {
ListVersionsByFunctionRequest.Builder builder = ListVersionsByFunctionRequest.builder();
builder.functionName(getEndpoint().getFunction());
+ String marker = getOptionalHeader(exchange, Lambda2Constants.MARKER, String.class);
+ if (marker != null) {
+ builder.marker(marker);
+ }
+ Integer maxItems = getOptionalHeader(exchange, Lambda2Constants.MAX_ITEMS, Integer.class);
+ if (maxItems != null) {
+ builder.maxItems(maxItems);
+ }
request = builder.build();
}
try {
result = lambdaClient.listVersionsByFunction(request);
} catch (AwsServiceException ase) {
- LOG.trace("publishVersion command returned the error code {}", ase.awsErrorDetails().errorCode());
+ LOG.trace("listVersions command returned the error code {}", ase.awsErrorDetails().errorCode());
throw ase;
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(Lambda2Constants.MARKER, result.nextMarker());
+ message.setHeader(Lambda2Constants.IS_TRUNCATED, result.nextMarker() != null);
}
private void createAlias(LambdaClient lambdaClient, Exchange exchange) throws InvalidPayloadException {
@@ -711,10 +735,18 @@ public class Lambda2Producer extends DefaultProducer {
} else {
ListAliasesRequest.Builder builder = ListAliasesRequest.builder();
builder.functionName(getEndpoint().getFunction());
- String version = exchange.getIn().getHeader(Lambda2Constants.FUNCTION_VERSION, String.class);
- if (!ObjectHelper.isEmpty(version)) {
+ String version = getOptionalHeader(exchange, Lambda2Constants.FUNCTION_VERSION, String.class);
+ if (version != null) {
builder.functionVersion(version);
}
+ String marker = getOptionalHeader(exchange, Lambda2Constants.MARKER, String.class);
+ if (marker != null) {
+ builder.marker(marker);
+ }
+ Integer maxItems = getOptionalHeader(exchange, Lambda2Constants.MAX_ITEMS, Integer.class);
+ if (maxItems != null) {
+ builder.maxItems(maxItems);
+ }
request = builder.build();
}
try {
@@ -725,6 +757,8 @@ public class Lambda2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(Lambda2Constants.MARKER, result.nextMarker());
+ message.setHeader(Lambda2Constants.IS_TRUNCATED, result.nextMarker() != null);
}
private Lambda2Operations determineOperation(Exchange exchange) {
@@ -749,6 +783,13 @@ public class Lambda2Producer extends DefaultProducer {
return exchange.getMessage();
}
+ /**
+ * Gets an optional header value.
+ */
+ private <T> T getOptionalHeader(Exchange exchange, String headerName, Class<T> headerType) {
+ return exchange.getIn().getHeader(headerName, headerType);
+ }
+
@Override
protected void doStart() throws Exception {
// health-check is optional so discover and resolve
diff --git a/components/camel-aws/camel-aws2-mq/src/generated/resources/META-INF/org/apache/camel/component/aws2/mq/aws2-mq.json b/components/camel-aws/camel-aws2-mq/src/generated/resources/META-INF/org/apache/camel/component/aws2/mq/aws2-mq.json
index d49fc6b38e0c..3f3c248cc56a 100644
--- a/components/camel-aws/camel-aws2-mq/src/generated/resources/META-INF/org/apache/camel/component/aws2/mq/aws2-mq.json
+++ b/components/camel-aws/camel-aws2-mq/src/generated/resources/META-INF/org/apache/camel/component/aws2/mq/aws2-mq.json
@@ -58,7 +58,11 @@
"CamelAwsMQBrokerDeploymentMode": { "index": 7, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The deployment mode for the broker in the createBroker operation", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_DEPLOYMENT_MODE" },
"CamelAwsMQBrokerInstanceType": { "index": 8, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The instance type for the MQ machine in the createBroker operation", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_INSTANCE_TYPE" },
"CamelAwsMQBrokerUsers": { "index": 9, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "List<User>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The list of users for MQ", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_USERS" },
- "CamelAwsMQBrokerPubliclyAccessible": { "index": 10, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "If the MQ instance must be publicly available or not.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_PUBLICLY_ACCESSIBLE" }
+ "CamelAwsMQBrokerPubliclyAccessible": { "index": 10, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "defaultValue": "false", "description": "If the MQ instance must be publicly available or not.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_PUBLICLY_ACCESSIBLE" },
+ "CamelAwsMQNextToken": { "index": 11, "kind": "header", "displayName": "", "group": "listBrokers", "label": "listBrokers", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The token for the next set of results.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#NEXT_TOKEN" },
+ "CamelAwsMQIsTruncated": { "index": 12, "kind": "header", "displayName": "", "group": "listBrokers", "label": "listBrokers", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#IS_TRUNCATED" },
+ "CamelAwsMQBrokerArn": { "index": 13, "kind": "header", "displayName": "", "group": "createBroker", "label": "createBroker", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the broker.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_ARN" },
+ "CamelAwsMQBrokerState": { "index": 14, "kind": "header", "displayName": "", "group": "describeBroker", "label": "describeBroker", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The state of the broker.", "constantName": "org.apache.camel.component.aws2.mq.MQ2Constants#BROKER_STATE" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.mq.MQ2Configuration", "configurationField": "configuration", "description": "Logical name" },
diff --git a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Constants.java b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Constants.java
index b668819475bc..642213d7acb8 100644
--- a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Constants.java
+++ b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Constants.java
@@ -47,4 +47,20 @@ public interface MQ2Constants {
@Metadata(description = "If the MQ instance must be publicly available or not.", javaType = "Boolean",
defaultValue = "false")
String BROKER_PUBLICLY_ACCESSIBLE = "CamelAwsMQBrokerPubliclyAccessible";
+
+ // Pagination constants
+ @Metadata(label = "listBrokers",
+ description = "The token for the next set of results.", javaType = "String")
+ String NEXT_TOKEN = "CamelAwsMQNextToken";
+ @Metadata(label = "listBrokers",
+ description = "Whether the response has more results (is truncated).", javaType = "Boolean")
+ String IS_TRUNCATED = "CamelAwsMQIsTruncated";
+
+ // Response metadata
+ @Metadata(label = "createBroker",
+ description = "The Amazon Resource Name (ARN) of the broker.", javaType = "String")
+ String BROKER_ARN = "CamelAwsMQBrokerArn";
+ @Metadata(label = "describeBroker",
+ description = "The state of the broker.", javaType = "String")
+ String BROKER_STATE = "CamelAwsMQBrokerState";
}
diff --git a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Producer.java b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Producer.java
index 21f26bea667f..36c657739c2a 100644
--- a/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Producer.java
+++ b/components/camel-aws/camel-aws2-mq/src/main/java/org/apache/camel/component/aws2/mq/MQ2Producer.java
@@ -129,13 +129,19 @@ public class MQ2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(MQ2Constants.NEXT_TOKEN, result.nextToken());
+ message.setHeader(MQ2Constants.IS_TRUNCATED, result.nextToken() != null);
}
} else {
ListBrokersRequest.Builder builder = ListBrokersRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(MQ2Constants.MAX_RESULTS))) {
- int maxResults = exchange.getIn().getHeader(MQ2Constants.MAX_RESULTS, Integer.class);
+ Integer maxResults = getOptionalHeader(exchange, MQ2Constants.MAX_RESULTS, Integer.class);
+ if (maxResults != null) {
builder.maxResults(maxResults);
}
+ String nextToken = getOptionalHeader(exchange, MQ2Constants.NEXT_TOKEN, String.class);
+ if (nextToken != null) {
+ builder.nextToken(nextToken);
+ }
ListBrokersResponse result;
try {
result = mqClient.listBrokers(builder.build());
@@ -145,6 +151,8 @@ public class MQ2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(MQ2Constants.NEXT_TOKEN, result.nextToken());
+ message.setHeader(MQ2Constants.IS_TRUNCATED, result.nextToken() != null);
}
}
@@ -223,6 +231,8 @@ public class MQ2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(MQ2Constants.BROKER_ID, result.brokerId());
+ message.setHeader(MQ2Constants.BROKER_ARN, result.brokerArn());
}
}
@@ -365,11 +375,13 @@ public class MQ2Producer extends DefaultProducer {
try {
result = mqClient.describeBroker(builder.build());
} catch (AwsServiceException ase) {
- LOG.trace("Reboot Broker command returned the error code {}", ase.awsErrorDetails().errorCode());
+ LOG.trace("Describe Broker command returned the error code {}", ase.awsErrorDetails().errorCode());
throw ase;
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(MQ2Constants.BROKER_ARN, result.brokerArn());
+ message.setHeader(MQ2Constants.BROKER_STATE, result.brokerStateAsString());
}
}
@@ -377,6 +389,13 @@ public class MQ2Producer extends DefaultProducer {
return exchange.getMessage();
}
+ /**
+ * Gets an optional header value.
+ */
+ private <T> T getOptionalHeader(Exchange exchange, String headerName, Class<T> headerType) {
+ return exchange.getIn().getHeader(headerName, headerType);
+ }
+
@Override
protected void doStart() throws Exception {
// health-check is optional so discover and resolve
diff --git a/components/camel-aws/camel-aws2-msk/src/generated/resources/META-INF/org/apache/camel/component/aws2/msk/aws2-msk.json b/components/camel-aws/camel-aws2-msk/src/generated/resources/META-INF/org/apache/camel/component/aws2/msk/aws2-msk.json
index 9f4e88bf827f..867e18245d2c 100644
--- a/components/camel-aws/camel-aws2-msk/src/generated/resources/META-INF/org/apache/camel/component/aws2/msk/aws2-msk.json
+++ b/components/camel-aws/camel-aws2-msk/src/generated/resources/META-INF/org/apache/camel/component/aws2/msk/aws2-msk.json
@@ -54,7 +54,11 @@
"CamelAwsMSKClusterArn": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The cluster arn for delete operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#CLUSTER_ARN" },
"CamelAwsMSKClusterKafkaVersion": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Kafka for the cluster during create operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#CLUSTER_KAFKA_VERSION" },
"CamelAwsMSKBrokerNodesNumber": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of nodes for the cluster during create operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#BROKER_NODES_NUMBER" },
- "CamelAwsMSKBrokerNodesGroupInfo": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.kafka.model.BrokerNodeGroupInfo", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Broker nodes group info to provide during the create operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#BROKER_NODES_GROUP_INFO" }
+ "CamelAwsMSKBrokerNodesGroupInfo": { "index": 6, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "software.amazon.awssdk.services.kafka.model.BrokerNodeGroupInfo", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Broker nodes group info to provide during the create operation", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#BROKER_NODES_GROUP_INFO" },
+ "CamelAwsMSKNextToken": { "index": 7, "kind": "header", "displayName": "", "group": "listClusters", "label": "listClusters", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The token for the next set of results.", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#NEXT_TOKEN" },
+ "CamelAwsMSKMaxResults": { "index": 8, "kind": "header", "displayName": "", "group": "listClusters", "label": "listClusters", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of results to return.", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#MAX_RESULTS" },
+ "CamelAwsMSKIsTruncated": { "index": 9, "kind": "header", "displayName": "", "group": "listClusters", "label": "listClusters", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#IS_TRUNCATED" },
+ "CamelAwsMSKClusterState": { "index": 10, "kind": "header", "displayName": "", "group": "createCluster describeCluster", "label": "createCluster describeCluster", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The state of the cluster.", "constantName": "org.apache.camel.component.aws2.msk.MSK2Constants#CLUSTER_STATE" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.msk.MSK2Configuration", "configurationField": "configuration", "description": "Logical name" },
diff --git a/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Constants.java b/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Constants.java
index ba72ec621877..5a7288c25e64 100644
--- a/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Constants.java
+++ b/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Constants.java
@@ -37,4 +37,20 @@ public interface MSK2Constants {
@Metadata(description = "The Broker nodes group info to provide during the create operation",
javaType = "software.amazon.awssdk.services.kafka.model.BrokerNodeGroupInfo")
String BROKER_NODES_GROUP_INFO = "CamelAwsMSKBrokerNodesGroupInfo";
+
+ // Pagination constants
+ @Metadata(label = "listClusters",
+ description = "The token for the next set of results.", javaType = "String")
+ String NEXT_TOKEN = "CamelAwsMSKNextToken";
+ @Metadata(label = "listClusters",
+ description = "The maximum number of results to return.", javaType = "Integer")
+ String MAX_RESULTS = "CamelAwsMSKMaxResults";
+ @Metadata(label = "listClusters",
+ description = "Whether the response has more results (is truncated).", javaType = "Boolean")
+ String IS_TRUNCATED = "CamelAwsMSKIsTruncated";
+
+ // Response metadata
+ @Metadata(label = "createCluster describeCluster",
+ description = "The state of the cluster.", javaType = "String")
+ String CLUSTER_STATE = "CamelAwsMSKClusterState";
}
diff --git a/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Producer.java b/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Producer.java
index df261491a5b9..40f2d6ef72bd 100644
--- a/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Producer.java
+++ b/components/camel-aws/camel-aws2-msk/src/main/java/org/apache/camel/component/aws2/msk/MSK2Producer.java
@@ -113,13 +113,23 @@ public class MSK2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(MSK2Constants.NEXT_TOKEN, result.nextToken());
+ message.setHeader(MSK2Constants.IS_TRUNCATED, result.nextToken() != null);
}
} else {
ListClustersRequest.Builder builder = ListClustersRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(MSK2Constants.CLUSTERS_FILTER))) {
- String filter = exchange.getIn().getHeader(MSK2Constants.CLUSTERS_FILTER, String.class);
+ String filter = getOptionalHeader(exchange, MSK2Constants.CLUSTERS_FILTER, String.class);
+ if (filter != null) {
builder.clusterNameFilter(filter);
}
+ String nextToken = getOptionalHeader(exchange, MSK2Constants.NEXT_TOKEN, String.class);
+ if (nextToken != null) {
+ builder.nextToken(nextToken);
+ }
+ Integer maxResults = getOptionalHeader(exchange, MSK2Constants.MAX_RESULTS, Integer.class);
+ if (maxResults != null) {
+ builder.maxResults(maxResults);
+ }
ListClustersResponse result;
try {
result = mskClient.listClusters(builder.build());
@@ -129,6 +139,8 @@ public class MSK2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(MSK2Constants.NEXT_TOKEN, result.nextToken());
+ message.setHeader(MSK2Constants.IS_TRUNCATED, result.nextToken() != null);
}
}
@@ -182,6 +194,8 @@ public class MSK2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(response);
+ message.setHeader(MSK2Constants.CLUSTER_ARN, response.clusterArn());
+ message.setHeader(MSK2Constants.CLUSTER_STATE, response.stateAsString());
}
}
@@ -245,11 +259,15 @@ public class MSK2Producer extends DefaultProducer {
try {
result = mskClient.describeCluster(builder.build());
} catch (AwsServiceException ase) {
- LOG.trace("Delete Cluster command returned the error code {}", ase.awsErrorDetails().errorCode());
+ LOG.trace("Describe Cluster command returned the error code {}", ase.awsErrorDetails().errorCode());
throw ase;
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ if (result.clusterInfo() != null) {
+ message.setHeader(MSK2Constants.CLUSTER_ARN, result.clusterInfo().clusterArn());
+ message.setHeader(MSK2Constants.CLUSTER_STATE, result.clusterInfo().stateAsString());
+ }
}
}
@@ -257,6 +275,13 @@ public class MSK2Producer extends DefaultProducer {
return exchange.getMessage();
}
+ /**
+ * Gets an optional header value.
+ */
+ private <T> T getOptionalHeader(Exchange exchange, String headerName, Class<T> headerType) {
+ return exchange.getIn().getHeader(headerName, headerType);
+ }
+
@Override
protected void doStart() throws Exception {
// health-check is optional so discover and resolve
diff --git a/components/camel-aws/camel-aws2-sns/src/generated/resources/META-INF/org/apache/camel/component/aws2/sns/aws2-sns.json b/components/camel-aws/camel-aws2-sns/src/generated/resources/META-INF/org/apache/camel/component/aws2/sns/aws2-sns.json
index ad028d0acf1b..dd46f96611e1 100644
--- a/components/camel-aws/camel-aws2-sns/src/generated/resources/META-INF/org/apache/camel/component/aws2/sns/aws2-sns.json
+++ b/components/camel-aws/camel-aws2-sns/src/generated/resources/META-INF/org/apache/camel/component/aws2/sns/aws2-sns.json
@@ -59,7 +59,10 @@
"headers": {
"CamelAwsSnsMessageId": { "index": 0, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SNS message ID.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#MESSAGE_ID" },
"CamelAwsSnsSubject": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SNS message subject. If not set, the subject from the SnsConfiguration is used.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#SUBJECT" },
- "CamelAwsSnsMessageStructure": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message structure to use such as json.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#MESSAGE_STRUCTURE" }
+ "CamelAwsSnsMessageStructure": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message structure to use such as json.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#MESSAGE_STRUCTURE" },
+ "CamelAwsSnsSequenceNumber": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sequence number for FIFO topics.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#SEQUENCE_NUMBER" },
+ "CamelAwsSnsFailedMessageCount": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of failed messages in a batch publish operation.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#FAILED_MESSAGE_COUNT" },
+ "CamelAwsSnsSuccessfulMessageCount": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of successful messages in a batch publish operation.", "constantName": "org.apache.camel.component.aws2.sns.Sns2Constants#SUCCESSFUL_MESSAGE_COUNT" }
},
"properties": {
"topicNameOrArn": { "index": 0, "kind": "path", "displayName": "Topic Name Or Arn", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Topic name or ARN" },
diff --git a/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Constants.java b/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Constants.java
index 61e49aee8c04..662fba1ff103 100644
--- a/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Constants.java
+++ b/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Constants.java
@@ -32,4 +32,17 @@ public interface Sns2Constants {
@Metadata(description = "The message structure to use such as json.", javaType = "String")
String MESSAGE_STRUCTURE = "CamelAwsSnsMessageStructure";
String MESSAGE_GROUP_ID_PROPERTY = "CamelAwsSnsMessageGroupId";
+
+ // Response metadata for FIFO topics
+ @Metadata(label = "producer",
+ description = "The sequence number for FIFO topics.", javaType = "String")
+ String SEQUENCE_NUMBER = "CamelAwsSnsSequenceNumber";
+
+ // Batch operation response metadata
+ @Metadata(label = "producer",
+ description = "The number of failed messages in a batch publish operation.", javaType = "Integer")
+ String FAILED_MESSAGE_COUNT = "CamelAwsSnsFailedMessageCount";
+ @Metadata(label = "producer",
+ description = "The number of successful messages in a batch publish operation.", javaType = "Integer")
+ String SUCCESSFUL_MESSAGE_COUNT = "CamelAwsSnsSuccessfulMessageCount";
}
diff --git a/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Producer.java b/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Producer.java
index 579d6d961d9d..5c81f9d8dd88 100644
--- a/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Producer.java
+++ b/components/camel-aws/camel-aws2-sns/src/main/java/org/apache/camel/component/aws2/sns/Sns2Producer.java
@@ -78,6 +78,7 @@ public class Sns2Producer extends DefaultProducer {
Message message = getMessageForResponse(exchange);
message.setHeader(Sns2Constants.MESSAGE_ID, result.messageId());
+ message.setHeader(Sns2Constants.SEQUENCE_NUMBER, result.sequenceNumber());
} else {
PublishBatchRequest.Builder publishBatchRequestBuilder = PublishBatchRequest.builder();
publishBatchRequestBuilder.topicArn(getConfiguration().getTopicArn());
@@ -85,6 +86,10 @@ public class Sns2Producer extends DefaultProducer {
PublishBatchResponse response = getEndpoint().getSNSClient().publishBatch(publishBatchRequestBuilder.build());
Message message = getMessageForResponse(exchange);
message.setBody(response);
+ message.setHeader(Sns2Constants.FAILED_MESSAGE_COUNT,
+ response.failed() != null ? response.failed().size() : 0);
+ message.setHeader(Sns2Constants.SUCCESSFUL_MESSAGE_COUNT,
+ response.successful() != null ? response.successful().size() : 0);
}
}
diff --git a/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/org/apache/camel/component/aws2/sqs/aws2-sqs.json b/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/org/apache/camel/component/aws2/sqs/aws2-sqs.json
index ca36257c6475..6759e71ffd08 100644
--- a/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/org/apache/camel/component/aws2/sqs/aws2-sqs.json
+++ b/components/camel-aws/camel-aws2-sqs/src/generated/resources/META-INF/org/apache/camel/component/aws2/sqs/aws2-sqs.json
@@ -85,7 +85,13 @@
"CamelAwsSqsReceiptHandle": { "index": 4, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon SQS message receipt handle.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#RECEIPT_HANDLE" },
"CamelAwsSqsDelaySeconds": { "index": 5, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The delay seconds that the Amazon SQS message can be see by others.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#DELAY_HEADER" },
"CamelAwsSqsPrefix": { "index": 6, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "A string to use for filtering the list results.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SQS_QUEUE_PREFIX" },
- "CamelAwsSqsOperation": { "index": 7, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SQS_OPERATION" }
+ "CamelAwsSqsOperation": { "index": 7, "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The operation we want to perform", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SQS_OPERATION" },
+ "CamelAwsSqsNextToken": { "index": 8, "kind": "header", "displayName": "", "group": "listQueues", "label": "listQueues", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The token for the next set of results.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#NEXT_TOKEN" },
+ "CamelAwsSqsMaxResults": { "index": 9, "kind": "header", "displayName": "", "group": "listQueues", "label": "listQueues", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The maximum number of results to return.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#MAX_RESULTS" },
+ "CamelAwsSqsIsTruncated": { "index": 10, "kind": "header", "displayName": "", "group": "listQueues", "label": "listQueues", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the response has more results (is truncated).", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#IS_TRUNCATED" },
+ "CamelAwsSqsSequenceNumber": { "index": 11, "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The sequence number for FIFO queues.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SEQUENCE_NUMBER" },
+ "CamelAwsSqsFailedMessageCount": { "index": 12, "kind": "header", "displayName": "", "group": "sendBatchMessage", "label": "sendBatchMessage", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of failed messages in a batch send operation.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#FAILED_MESSAGE_COUNT" },
+ "CamelAwsSqsSuccessfulMessageCount": { "index": 13, "kind": "header", "displayName": "", "group": "sendBatchMessage", "label": "sendBatchMessage", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The number of successful messages in a batch send operation.", "constantName": "org.apache.camel.component.aws2.sqs.Sqs2Constants#SUCCESSFUL_MESSAGE_COUNT" }
},
"properties": {
"queueNameOrArn": { "index": 0, "kind": "path", "displayName": "Queue Name Or Arn", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Queue name or ARN" },
diff --git a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Constants.java b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Constants.java
index f87141c0fe1a..f7aad3656a12 100644
--- a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Constants.java
+++ b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Constants.java
@@ -46,4 +46,28 @@ public interface Sqs2Constants {
@Metadata(description = "The operation we want to perform", javaType = "String")
String SQS_OPERATION = "CamelAwsSqsOperation";
String SQS_DELETE_FILTERED = "CamelAwsSqsDeleteFiltered";
+
+ // Pagination constants
+ @Metadata(label = "listQueues",
+ description = "The token for the next set of results.", javaType = "String")
+ String NEXT_TOKEN = "CamelAwsSqsNextToken";
+ @Metadata(label = "listQueues",
+ description = "The maximum number of results to return.", javaType = "Integer")
+ String MAX_RESULTS = "CamelAwsSqsMaxResults";
+ @Metadata(label = "listQueues",
+ description = "Whether the response has more results (is truncated).", javaType = "Boolean")
+ String IS_TRUNCATED = "CamelAwsSqsIsTruncated";
+
+ // Response metadata for FIFO queues
+ @Metadata(label = "producer",
+ description = "The sequence number for FIFO queues.", javaType = "String")
+ String SEQUENCE_NUMBER = "CamelAwsSqsSequenceNumber";
+
+ // Batch operation response metadata
+ @Metadata(label = "sendBatchMessage",
+ description = "The number of failed messages in a batch send operation.", javaType = "Integer")
+ String FAILED_MESSAGE_COUNT = "CamelAwsSqsFailedMessageCount";
+ @Metadata(label = "sendBatchMessage",
+ description = "The number of successful messages in a batch send operation.", javaType = "Integer")
+ String SUCCESSFUL_MESSAGE_COUNT = "CamelAwsSqsSuccessfulMessageCount";
}
diff --git a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Producer.java b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Producer.java
index 5a006a5f36c7..34c0f01e0144 100644
--- a/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Producer.java
+++ b/components/camel-aws/camel-aws2-sqs/src/main/java/org/apache/camel/component/aws2/sqs/Sqs2Producer.java
@@ -113,6 +113,7 @@ public class Sqs2Producer extends DefaultProducer {
Message message = getMessageForResponse(exchange);
message.setHeader(Sqs2Constants.MESSAGE_ID, result.messageId());
message.setHeader(Sqs2Constants.MD5_OF_BODY, result.md5OfMessageBody());
+ message.setHeader(Sqs2Constants.SEQUENCE_NUMBER, result.sequenceNumber());
}
private void sendBatchMessage(SqsClient amazonSQS, Exchange exchange) {
@@ -134,6 +135,10 @@ public class Sqs2Producer extends DefaultProducer {
SendMessageBatchResponse result = amazonSQS.sendMessageBatch(request.build());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(Sqs2Constants.FAILED_MESSAGE_COUNT,
+ result.failed() != null ? result.failed().size() : 0);
+ message.setHeader(Sqs2Constants.SUCCESSFUL_MESSAGE_COUNT,
+ result.successful() != null ? result.successful().size() : 0);
} else if (exchange.getIn().getBody() instanceof String) {
String c = exchange.getIn().getBody(String.class);
String[] elements = c.split(getConfiguration().getBatchSeparator());
@@ -150,11 +155,19 @@ public class Sqs2Producer extends DefaultProducer {
SendMessageBatchResponse result = amazonSQS.sendMessageBatch(request.build());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(Sqs2Constants.FAILED_MESSAGE_COUNT,
+ result.failed() != null ? result.failed().size() : 0);
+ message.setHeader(Sqs2Constants.SUCCESSFUL_MESSAGE_COUNT,
+ result.successful() != null ? result.successful().size() : 0);
} else {
SendMessageBatchRequest req = exchange.getIn().getBody(SendMessageBatchRequest.class);
SendMessageBatchResponse result = amazonSQS.sendMessageBatch(req);
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(Sqs2Constants.FAILED_MESSAGE_COUNT,
+ result.failed() != null ? result.failed().size() : 0);
+ message.setHeader(Sqs2Constants.SUCCESSFUL_MESSAGE_COUNT,
+ result.successful() != null ? result.successful().size() : 0);
}
}
@@ -173,12 +186,23 @@ public class Sqs2Producer extends DefaultProducer {
private void listQueues(SqsClient amazonSQS, Exchange exchange) {
ListQueuesRequest.Builder request = ListQueuesRequest.builder();
- if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(Sqs2Constants.SQS_QUEUE_PREFIX))) {
- request.queueNamePrefix(exchange.getIn().getHeader(Sqs2Constants.SQS_QUEUE_PREFIX, String.class));
+ String prefix = exchange.getIn().getHeader(Sqs2Constants.SQS_QUEUE_PREFIX, String.class);
+ if (prefix != null) {
+ request.queueNamePrefix(prefix);
+ }
+ String nextToken = exchange.getIn().getHeader(Sqs2Constants.NEXT_TOKEN, String.class);
+ if (nextToken != null) {
+ request.nextToken(nextToken);
+ }
+ Integer maxResults = exchange.getIn().getHeader(Sqs2Constants.MAX_RESULTS, Integer.class);
+ if (maxResults != null) {
+ request.maxResults(maxResults);
}
ListQueuesResponse result = amazonSQS.listQueues(request.build());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ message.setHeader(Sqs2Constants.NEXT_TOKEN, result.nextToken());
+ message.setHeader(Sqs2Constants.IS_TRUNCATED, result.nextToken() != null);
}
private void purgeQueue(SqsClient amazonSQS, Exchange exchange) {
diff --git a/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/integration/SqsProducerSendByteArrayLocalstackIT.java b/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/integration/SqsProducerSendByteArrayLocalstackIT.java
index 764c0ace7473..24692be62c2d 100644
--- a/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/integration/SqsProducerSendByteArrayLocalstackIT.java
+++ b/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/integration/SqsProducerSendByteArrayLocalstackIT.java
@@ -49,7 +49,8 @@ public class SqsProducerSendByteArrayLocalstackIT extends Aws2SQSBaseTest {
});
MockEndpoint.assertIsSatisfied(context);
- Assertions.assertEquals(3, result.getExchanges().get(0).getMessage().getHeaders().size());
+ // 3 original headers + 1 new SEQUENCE_NUMBER header (null for non-FIFO queues)
+ Assertions.assertEquals(4, result.getExchanges().get(0).getMessage().getHeaders().size());
Assertions.assertEquals("HeaderTest",
Strings.fromByteArray((byte[]) result.getExchanges().get(0).getMessage().getHeaders().get("value1")));
}
diff --git a/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/integration/SqsProducerSendLocalstackMaxAttributesIT.java b/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/integration/SqsProducerSendLocalstackMaxAttributesIT.java
index e0dfdf61537e..c69fba4a48b7 100644
--- a/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/integration/SqsProducerSendLocalstackMaxAttributesIT.java
+++ b/components/camel-aws/camel-aws2-sqs/src/test/java/org/apache/camel/component/aws2/sqs/integration/SqsProducerSendLocalstackMaxAttributesIT.java
@@ -56,7 +56,8 @@ public class SqsProducerSendLocalstackMaxAttributesIT extends Aws2SQSBaseTest {
});
MockEndpoint.assertIsSatisfied(context);
- Assertions.assertEquals(13, result.getExchanges().get(0).getMessage().getHeaders().size());
+ // 13 original headers + 1 new SEQUENCE_NUMBER header (null for non-FIFO queues)
+ Assertions.assertEquals(14, result.getExchanges().get(0).getMessage().getHeaders().size());
}
@Override
diff --git a/components/camel-aws/camel-aws2-sts/src/generated/resources/META-INF/org/apache/camel/component/aws2/sts/aws2-sts.json b/components/camel-aws/camel-aws2-sts/src/generated/resources/META-INF/org/apache/camel/component/aws2/sts/aws2-sts.json
index a1508908131c..5231ee6611cc 100644
--- a/components/camel-aws/camel-aws2-sts/src/generated/resources/META-INF/org/apache/camel/component/aws2/sts/aws2-sts.json
+++ b/components/camel-aws/camel-aws2-sts/src/generated/resources/META-INF/org/apache/camel/component/aws2/sts/aws2-sts.json
@@ -48,7 +48,12 @@
"CamelAwsStsRoleArn": { "index": 1, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the role to assume.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#ROLE_ARN" },
"CamelAwsStsRoleSessionName": { "index": 2, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "An identifier for the assumed role session.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#ROLE_SESSION_NAME" },
"CamelAwsStsFederatedName": { "index": 3, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The name of the federated user.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#FEDERATED_NAME" },
- "CamelAwsStsAssumeRoleDurationSeconds": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The duration, in seconds, of the role session. It could go from 900 seconds, to 1 to 12 hours (dependent on administrator settings. The default if not specified is 3600 seconds.", "constantName": "org.apache.camel.component. [...]
+ "CamelAwsStsAssumeRoleDurationSeconds": { "index": 4, "kind": "header", "displayName": "", "group": "producer", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The duration, in seconds, of the role session. It could go from 900 seconds, to 1 to 12 hours (dependent on administrator settings. The default if not specified is 3600 seconds.", "constantName": "org.apache.camel.component. [...]
+ "CamelAwsStsAccessKeyId": { "index": 5, "kind": "header", "displayName": "", "group": "assumeRole getSessionToken getFederationToken", "label": "assumeRole getSessionToken getFederationToken", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The temporary access key ID.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#ACCESS_KEY_ID" },
+ "CamelAwsStsSecretKey": { "index": 6, "kind": "header", "displayName": "", "group": "assumeRole getSessionToken getFederationToken", "label": "assumeRole getSessionToken getFederationToken", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The temporary secret access key.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#SECRET_KEY_ID" },
+ "CamelAwsStsSessionToken": { "index": 7, "kind": "header", "displayName": "", "group": "assumeRole getSessionToken getFederationToken", "label": "assumeRole getSessionToken getFederationToken", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The temporary session token.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#SESSION_TOKEN" },
+ "CamelAwsStsExpiration": { "index": 8, "kind": "header", "displayName": "", "group": "assumeRole getSessionToken getFederationToken", "label": "assumeRole getSessionToken getFederationToken", "required": false, "javaType": "java.time.Instant", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The expiration date and time of the credentials.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#EXPIRATION" },
+ "CamelAwsStsAssumedRoleArn": { "index": 9, "kind": "header", "displayName": "", "group": "assumeRole", "label": "assumeRole", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The Amazon Resource Name (ARN) of the assumed role.", "constantName": "org.apache.camel.component.aws2.sts.STS2Constants#ASSUMED_ROLE_ARN" }
},
"properties": {
"label": { "index": 0, "kind": "path", "displayName": "Label", "group": "producer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.aws2.sts.STS2Configuration", "configurationField": "configuration", "description": "Logical name" },
diff --git a/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java b/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java
index 2f764d89272d..4dd8f30655d8 100644
--- a/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java
+++ b/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Constants.java
@@ -34,6 +34,19 @@ public interface STS2Constants {
javaType = "Integer")
String ASSUME_ROLE_DURATION_SECONDS = "CamelAwsStsAssumeRoleDurationSeconds";
+ @Metadata(label = "assumeRole getSessionToken getFederationToken",
+ description = "The temporary access key ID.", javaType = "String")
String ACCESS_KEY_ID = "CamelAwsStsAccessKeyId";
+ @Metadata(label = "assumeRole getSessionToken getFederationToken",
+ description = "The temporary secret access key.", javaType = "String")
String SECRET_KEY_ID = "CamelAwsStsSecretKey";
+ @Metadata(label = "assumeRole getSessionToken getFederationToken",
+ description = "The temporary session token.", javaType = "String")
+ String SESSION_TOKEN = "CamelAwsStsSessionToken";
+ @Metadata(label = "assumeRole getSessionToken getFederationToken",
+ description = "The expiration date and time of the credentials.", javaType = "java.time.Instant")
+ String EXPIRATION = "CamelAwsStsExpiration";
+ @Metadata(label = "assumeRole",
+ description = "The Amazon Resource Name (ARN) of the assumed role.", javaType = "String")
+ String ASSUMED_ROLE_ARN = "CamelAwsStsAssumedRoleArn";
}
diff --git a/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Producer.java b/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Producer.java
index 478c9e6e6cdd..efc06025b94e 100644
--- a/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Producer.java
+++ b/components/camel-aws/camel-aws2-sts/src/main/java/org/apache/camel/component/aws2/sts/STS2Producer.java
@@ -133,6 +133,15 @@ public class STS2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ if (result.credentials() != null) {
+ message.setHeader(STS2Constants.ACCESS_KEY_ID, result.credentials().accessKeyId());
+ message.setHeader(STS2Constants.SECRET_KEY_ID, result.credentials().secretAccessKey());
+ message.setHeader(STS2Constants.SESSION_TOKEN, result.credentials().sessionToken());
+ message.setHeader(STS2Constants.EXPIRATION, result.credentials().expiration());
+ }
+ if (result.assumedRoleUser() != null) {
+ message.setHeader(STS2Constants.ASSUMED_ROLE_ARN, result.assumedRoleUser().arn());
+ }
}
}
@@ -162,6 +171,12 @@ public class STS2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ if (result.credentials() != null) {
+ message.setHeader(STS2Constants.ACCESS_KEY_ID, result.credentials().accessKeyId());
+ message.setHeader(STS2Constants.SECRET_KEY_ID, result.credentials().secretAccessKey());
+ message.setHeader(STS2Constants.SESSION_TOKEN, result.credentials().sessionToken());
+ message.setHeader(STS2Constants.EXPIRATION, result.credentials().expiration());
+ }
}
}
@@ -197,6 +212,12 @@ public class STS2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ if (result.credentials() != null) {
+ message.setHeader(STS2Constants.ACCESS_KEY_ID, result.credentials().accessKeyId());
+ message.setHeader(STS2Constants.SECRET_KEY_ID, result.credentials().secretAccessKey());
+ message.setHeader(STS2Constants.SESSION_TOKEN, result.credentials().sessionToken());
+ message.setHeader(STS2Constants.EXPIRATION, result.credentials().expiration());
+ }
}
}
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KMS2EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KMS2EndpointBuilderFactory.java
index 5b56cf87e5a4..664663f504d2 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KMS2EndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/KMS2EndpointBuilderFactory.java
@@ -652,6 +652,66 @@ public interface KMS2EndpointBuilderFactory {
public String awsKMSPendingWindowInDays() {
return "CamelAwsKMSPendingWindowInDays";
}
+ /**
+ * The marker for the next set of results.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: listKeys
+ *
+ * @return the name of the header {@code AwsKMSMarker}.
+ */
+ public String awsKMSMarker() {
+ return "CamelAwsKMSMarker";
+ }
+ /**
+ * Whether the response has more results (is truncated).
+ *
+ * The option is a: {@code Boolean} type.
+ *
+ * Group: listKeys
+ *
+ * @return the name of the header {@code AwsKMSTruncated}.
+ */
+ public String awsKMSTruncated() {
+ return "CamelAwsKMSTruncated";
+ }
+ /**
+ * The Amazon Resource Name (ARN) of the key.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: createKey describeKey
+ *
+ * @return the name of the header {@code AwsKMSKeyArn}.
+ */
+ public String awsKMSKeyArn() {
+ return "CamelAwsKMSKeyArn";
+ }
+ /**
+ * The state of the key.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: createKey describeKey
+ *
+ * @return the name of the header {@code AwsKMSKeyState}.
+ */
+ public String awsKMSKeyState() {
+ return "CamelAwsKMSKeyState";
+ }
+ /**
+ * The date and time after which AWS KMS deletes the key.
+ *
+ * The option is a: {@code java.time.Instant} type.
+ *
+ * Group: scheduleKeyDeletion
+ *
+ * @return the name of the header {@code AwsKMSDeletionDate}.
+ */
+ public String awsKMSDeletionDate() {
+ return "CamelAwsKMSDeletionDate";
+ }
}
static KMS2EndpointBuilder endpointBuilder(String componentName, String path) {
class KMS2EndpointBuilderImpl extends AbstractEndpointBuilder implements KMS2EndpointBuilder, AdvancedKMS2EndpointBuilder {
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Lambda2EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Lambda2EndpointBuilderFactory.java
index 41fb98030d34..b1bc037a59af 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Lambda2EndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Lambda2EndpointBuilderFactory.java
@@ -987,6 +987,92 @@ public interface Lambda2EndpointBuilderFactory {
public String awsLambdaAliasFunctionDescription() {
return "CamelAwsLambdaAliasFunctionDescription";
}
+ /**
+ * The marker for the next set of results.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: listFunctions listVersions listAliases listEventSourceMapping
+ * listTags
+ *
+ * @return the name of the header {@code AwsLambdaMarker}.
+ */
+ public String awsLambdaMarker() {
+ return "CamelAwsLambdaMarker";
+ }
+ /**
+ * The maximum number of results to return.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: listFunctions listVersions listAliases listEventSourceMapping
+ *
+ * @return the name of the header {@code AwsLambdaMaxItems}.
+ */
+ public String awsLambdaMaxItems() {
+ return "CamelAwsLambdaMaxItems";
+ }
+ /**
+ * Whether the response has more results (is truncated).
+ *
+ * The option is a: {@code Boolean} type.
+ *
+ * Group: listFunctions listVersions listAliases listEventSourceMapping
+ *
+ * @return the name of the header {@code AwsLambdaIsTruncated}.
+ */
+ public String awsLambdaIsTruncated() {
+ return "CamelAwsLambdaIsTruncated";
+ }
+ /**
+ * The Amazon Resource Name (ARN) of the function.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: createFunction getFunction publishVersion createAlias getAlias
+ *
+ * @return the name of the header {@code AwsLambdaFunctionArn}.
+ */
+ public String awsLambdaFunctionArn() {
+ return "CamelAwsLambdaFunctionArn";
+ }
+ /**
+ * The HTTP status code of the function invocation.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: invokeFunction
+ *
+ * @return the name of the header {@code AwsLambdaStatusCode}.
+ */
+ public String awsLambdaStatusCode() {
+ return "CamelAwsLambdaStatusCode";
+ }
+ /**
+ * If present, indicates that an error occurred during function
+ * execution.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: invokeFunction
+ *
+ * @return the name of the header {@code AwsLambdaFunctionError}.
+ */
+ public String awsLambdaFunctionError() {
+ return "CamelAwsLambdaFunctionError";
+ }
+ /**
+ * The last 4 KB of the execution log.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: invokeFunction
+ *
+ * @return the name of the header {@code AwsLambdaLogResult}.
+ */
+ public String awsLambdaLogResult() {
+ return "CamelAwsLambdaLogResult";
+ }
}
static Lambda2EndpointBuilder endpointBuilder(String componentName, String path) {
class Lambda2EndpointBuilderImpl extends AbstractEndpointBuilder implements Lambda2EndpointBuilder, AdvancedLambda2EndpointBuilder {
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MQ2EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MQ2EndpointBuilderFactory.java
index c13bbcbff42e..9f54149fe63e 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MQ2EndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MQ2EndpointBuilderFactory.java
@@ -729,6 +729,54 @@ public interface MQ2EndpointBuilderFactory {
public String awsMQBrokerPubliclyAccessible() {
return "CamelAwsMQBrokerPubliclyAccessible";
}
+ /**
+ * The token for the next set of results.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: listBrokers
+ *
+ * @return the name of the header {@code AwsMQNextToken}.
+ */
+ public String awsMQNextToken() {
+ return "CamelAwsMQNextToken";
+ }
+ /**
+ * Whether the response has more results (is truncated).
+ *
+ * The option is a: {@code Boolean} type.
+ *
+ * Group: listBrokers
+ *
+ * @return the name of the header {@code AwsMQIsTruncated}.
+ */
+ public String awsMQIsTruncated() {
+ return "CamelAwsMQIsTruncated";
+ }
+ /**
+ * The Amazon Resource Name (ARN) of the broker.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: createBroker
+ *
+ * @return the name of the header {@code AwsMQBrokerArn}.
+ */
+ public String awsMQBrokerArn() {
+ return "CamelAwsMQBrokerArn";
+ }
+ /**
+ * The state of the broker.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: describeBroker
+ *
+ * @return the name of the header {@code AwsMQBrokerState}.
+ */
+ public String awsMQBrokerState() {
+ return "CamelAwsMQBrokerState";
+ }
}
static MQ2EndpointBuilder endpointBuilder(String componentName, String path) {
class MQ2EndpointBuilderImpl extends AbstractEndpointBuilder implements MQ2EndpointBuilder, AdvancedMQ2EndpointBuilder {
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MSK2EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MSK2EndpointBuilderFactory.java
index d6745b95cd25..ae1de2d30fe6 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MSK2EndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/MSK2EndpointBuilderFactory.java
@@ -677,6 +677,54 @@ public interface MSK2EndpointBuilderFactory {
public String awsMSKBrokerNodesGroupInfo() {
return "CamelAwsMSKBrokerNodesGroupInfo";
}
+ /**
+ * The token for the next set of results.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: listClusters
+ *
+ * @return the name of the header {@code AwsMSKNextToken}.
+ */
+ public String awsMSKNextToken() {
+ return "CamelAwsMSKNextToken";
+ }
+ /**
+ * The maximum number of results to return.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: listClusters
+ *
+ * @return the name of the header {@code AwsMSKMaxResults}.
+ */
+ public String awsMSKMaxResults() {
+ return "CamelAwsMSKMaxResults";
+ }
+ /**
+ * Whether the response has more results (is truncated).
+ *
+ * The option is a: {@code Boolean} type.
+ *
+ * Group: listClusters
+ *
+ * @return the name of the header {@code AwsMSKIsTruncated}.
+ */
+ public String awsMSKIsTruncated() {
+ return "CamelAwsMSKIsTruncated";
+ }
+ /**
+ * The state of the cluster.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: createCluster describeCluster
+ *
+ * @return the name of the header {@code AwsMSKClusterState}.
+ */
+ public String awsMSKClusterState() {
+ return "CamelAwsMSKClusterState";
+ }
}
static MSK2EndpointBuilder endpointBuilder(String componentName, String path) {
class MSK2EndpointBuilderImpl extends AbstractEndpointBuilder implements MSK2EndpointBuilder, AdvancedMSK2EndpointBuilder {
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/STS2EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/STS2EndpointBuilderFactory.java
index b0382626bfc6..f68744661906 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/STS2EndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/STS2EndpointBuilderFactory.java
@@ -608,6 +608,66 @@ public interface STS2EndpointBuilderFactory {
public String awsStsAssumeRoleDurationSeconds() {
return "CamelAwsStsAssumeRoleDurationSeconds";
}
+ /**
+ * The temporary access key ID.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: assumeRole getSessionToken getFederationToken
+ *
+ * @return the name of the header {@code AwsStsAccessKeyId}.
+ */
+ public String awsStsAccessKeyId() {
+ return "CamelAwsStsAccessKeyId";
+ }
+ /**
+ * The temporary secret access key.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: assumeRole getSessionToken getFederationToken
+ *
+ * @return the name of the header {@code AwsStsSecretKey}.
+ */
+ public String awsStsSecretKey() {
+ return "CamelAwsStsSecretKey";
+ }
+ /**
+ * The temporary session token.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: assumeRole getSessionToken getFederationToken
+ *
+ * @return the name of the header {@code AwsStsSessionToken}.
+ */
+ public String awsStsSessionToken() {
+ return "CamelAwsStsSessionToken";
+ }
+ /**
+ * The expiration date and time of the credentials.
+ *
+ * The option is a: {@code java.time.Instant} type.
+ *
+ * Group: assumeRole getSessionToken getFederationToken
+ *
+ * @return the name of the header {@code AwsStsExpiration}.
+ */
+ public String awsStsExpiration() {
+ return "CamelAwsStsExpiration";
+ }
+ /**
+ * The Amazon Resource Name (ARN) of the assumed role.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: assumeRole
+ *
+ * @return the name of the header {@code AwsStsAssumedRoleArn}.
+ */
+ public String awsStsAssumedRoleArn() {
+ return "CamelAwsStsAssumedRoleArn";
+ }
}
static STS2EndpointBuilder endpointBuilder(String componentName, String path) {
class STS2EndpointBuilderImpl extends AbstractEndpointBuilder implements STS2EndpointBuilder, AdvancedSTS2EndpointBuilder {
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sns2EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sns2EndpointBuilderFactory.java
index 764188f2e806..d0de8aff01a8 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sns2EndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sns2EndpointBuilderFactory.java
@@ -829,6 +829,42 @@ public interface Sns2EndpointBuilderFactory {
public String awsSnsMessageStructure() {
return "CamelAwsSnsMessageStructure";
}
+ /**
+ * The sequence number for FIFO topics.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsSnsSequenceNumber}.
+ */
+ public String awsSnsSequenceNumber() {
+ return "CamelAwsSnsSequenceNumber";
+ }
+ /**
+ * The number of failed messages in a batch publish operation.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsSnsFailedMessageCount}.
+ */
+ public String awsSnsFailedMessageCount() {
+ return "CamelAwsSnsFailedMessageCount";
+ }
+ /**
+ * The number of successful messages in a batch publish operation.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsSnsSuccessfulMessageCount}.
+ */
+ public String awsSnsSuccessfulMessageCount() {
+ return "CamelAwsSnsSuccessfulMessageCount";
+ }
}
static Sns2EndpointBuilder endpointBuilder(String componentName, String path) {
class Sns2EndpointBuilderImpl extends AbstractEndpointBuilder implements Sns2EndpointBuilder, AdvancedSns2EndpointBuilder {
diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sqs2EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sqs2EndpointBuilderFactory.java
index b8fef8057fd5..173a3880bf7a 100644
--- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sqs2EndpointBuilderFactory.java
+++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/Sqs2EndpointBuilderFactory.java
@@ -3435,6 +3435,78 @@ public interface Sqs2EndpointBuilderFactory {
public String awsSqsOperation() {
return "CamelAwsSqsOperation";
}
+ /**
+ * The token for the next set of results.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: listQueues
+ *
+ * @return the name of the header {@code AwsSqsNextToken}.
+ */
+ public String awsSqsNextToken() {
+ return "CamelAwsSqsNextToken";
+ }
+ /**
+ * The maximum number of results to return.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: listQueues
+ *
+ * @return the name of the header {@code AwsSqsMaxResults}.
+ */
+ public String awsSqsMaxResults() {
+ return "CamelAwsSqsMaxResults";
+ }
+ /**
+ * Whether the response has more results (is truncated).
+ *
+ * The option is a: {@code Boolean} type.
+ *
+ * Group: listQueues
+ *
+ * @return the name of the header {@code AwsSqsIsTruncated}.
+ */
+ public String awsSqsIsTruncated() {
+ return "CamelAwsSqsIsTruncated";
+ }
+ /**
+ * The sequence number for FIFO queues.
+ *
+ * The option is a: {@code String} type.
+ *
+ * Group: producer
+ *
+ * @return the name of the header {@code AwsSqsSequenceNumber}.
+ */
+ public String awsSqsSequenceNumber() {
+ return "CamelAwsSqsSequenceNumber";
+ }
+ /**
+ * The number of failed messages in a batch send operation.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: sendBatchMessage
+ *
+ * @return the name of the header {@code AwsSqsFailedMessageCount}.
+ */
+ public String awsSqsFailedMessageCount() {
+ return "CamelAwsSqsFailedMessageCount";
+ }
+ /**
+ * The number of successful messages in a batch send operation.
+ *
+ * The option is a: {@code Integer} type.
+ *
+ * Group: sendBatchMessage
+ *
+ * @return the name of the header {@code AwsSqsSuccessfulMessageCount}.
+ */
+ public String awsSqsSuccessfulMessageCount() {
+ return "CamelAwsSqsSuccessfulMessageCount";
+ }
}
static Sqs2EndpointBuilder endpointBuilder(String componentName, String path) {
class Sqs2EndpointBuilderImpl extends AbstractEndpointBuilder implements Sqs2EndpointBuilder, AdvancedSqs2EndpointBuilder {