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/07/24 07:28:46 UTC

(camel) branch main updated: CAMEL-24249: camel-aws2 - fix copy-pasted validation messages in MSK/MQ/STS producers (#25060)

This is an automated email from the ASF dual-hosted git repository.

oscerd 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 0bb541f31c86 CAMEL-24249: camel-aws2 - fix copy-pasted validation messages in MSK/MQ/STS producers (#25060)
0bb541f31c86 is described below

commit 0bb541f31c86121f987361475a610bb7738f1e8c
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri Jul 24 09:28:40 2026 +0200

    CAMEL-24249: camel-aws2 - fix copy-pasted validation messages in MSK/MQ/STS producers (#25060)
    
    Several producers threw an IllegalArgumentException whose message named the
    wrong parameter, having been copy-pasted from a neighbouring check:
    
    - MSK2Producer.createCluster: the missing broker-nodes-number check reported
      "Kafka Version must be specified".
    - MQ2Producer: MISSING_BROKER_NAME ("Broker Name must be specified") was thrown
      for the broker *id* checks in delete/reboot/update/describe and for the
      configurationId check in updateBroker; only createBroker takes a name. Added
      MISSING_BROKER_ID and MISSING_CONFIGURATION_ID and used them for the id checks.
    - STS2Producer.getFederationToken: the missing federated-name check said
      "for assumeRole operation".
    
    Each check now names the parameter it guards. Added tests asserting the
    corrected messages in MSKProducerTest, MQProducerTest and STS2ProducerTest.
    
    Signed-off-by: Andrea Cosentino <an...@gmail.com>
    Co-authored-by: Claude Opus 4.8 <no...@anthropic.com>
---
 components/camel-aws/camel-aws2-mq/pom.xml              |  5 +++++
 .../org/apache/camel/component/aws2/mq/MQ2Producer.java | 12 +++++++-----
 .../apache/camel/component/aws2/mq/MQProducerTest.java  | 17 +++++++++++++++++
 components/camel-aws/camel-aws2-msk/pom.xml             |  5 +++++
 .../apache/camel/component/aws2/msk/MSK2Producer.java   |  2 +-
 .../camel/component/aws2/msk/MSKProducerTest.java       | 14 ++++++++++++++
 components/camel-aws/camel-aws2-sts/pom.xml             |  5 +++++
 .../apache/camel/component/aws2/sts/STS2Producer.java   |  2 +-
 .../camel/component/aws2/sts/STS2ProducerTest.java      |  8 ++++++++
 9 files changed, 63 insertions(+), 7 deletions(-)

diff --git a/components/camel-aws/camel-aws2-mq/pom.xml b/components/camel-aws/camel-aws2-mq/pom.xml
index b695c51f68b1..e4334f60360a 100644
--- a/components/camel-aws/camel-aws2-mq/pom.xml
+++ b/components/camel-aws/camel-aws2-mq/pom.xml
@@ -76,5 +76,10 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
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 a4a6fa103073..539616e6f77b 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
@@ -56,6 +56,8 @@ public class MQ2Producer extends DefaultProducer {
 
     private static final Logger LOG = LoggerFactory.getLogger(MQ2Producer.class);
     public static final String MISSING_BROKER_NAME = "Broker Name must be specified";
+    public static final String MISSING_BROKER_ID = "Broker Id must be specified";
+    public static final String MISSING_CONFIGURATION_ID = "Configuration Id must be specified";
 
     private transient String mqProducerToString;
     private HealthCheck producerHealthCheck;
@@ -257,7 +259,7 @@ public class MQ2Producer extends DefaultProducer {
                 brokerId = exchange.getIn().getHeader(MQ2Constants.BROKER_ID, String.class);
                 builder.brokerId(brokerId);
             } else {
-                throw new IllegalArgumentException(MISSING_BROKER_NAME);
+                throw new IllegalArgumentException(MISSING_BROKER_ID);
             }
             DeleteBrokerResponse result;
             try {
@@ -292,7 +294,7 @@ public class MQ2Producer extends DefaultProducer {
                 brokerId = exchange.getIn().getHeader(MQ2Constants.BROKER_ID, String.class);
                 builder.brokerId(brokerId);
             } else {
-                throw new IllegalArgumentException(MISSING_BROKER_NAME);
+                throw new IllegalArgumentException(MISSING_BROKER_ID);
             }
             RebootBrokerResponse result;
             try {
@@ -328,13 +330,13 @@ public class MQ2Producer extends DefaultProducer {
                 brokerId = exchange.getIn().getHeader(MQ2Constants.BROKER_ID, String.class);
                 builder.brokerId(brokerId);
             } else {
-                throw new IllegalArgumentException(MISSING_BROKER_NAME);
+                throw new IllegalArgumentException(MISSING_BROKER_ID);
             }
             if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(MQ2Constants.CONFIGURATION_ID))) {
                 configurationId = exchange.getIn().getHeader(MQ2Constants.CONFIGURATION_ID, ConfigurationId.class);
                 builder.configuration(configurationId);
             } else {
-                throw new IllegalArgumentException(MISSING_BROKER_NAME);
+                throw new IllegalArgumentException(MISSING_CONFIGURATION_ID);
             }
             UpdateBrokerResponse result;
             try {
@@ -369,7 +371,7 @@ public class MQ2Producer extends DefaultProducer {
                 brokerId = exchange.getIn().getHeader(MQ2Constants.BROKER_ID, String.class);
                 builder.brokerId(brokerId);
             } else {
-                throw new IllegalArgumentException(MISSING_BROKER_NAME);
+                throw new IllegalArgumentException(MISSING_BROKER_ID);
             }
             DescribeBrokerResponse result;
             try {
diff --git a/components/camel-aws/camel-aws2-mq/src/test/java/org/apache/camel/component/aws2/mq/MQProducerTest.java b/components/camel-aws/camel-aws2-mq/src/test/java/org/apache/camel/component/aws2/mq/MQProducerTest.java
index 091eb9fe7c20..35bc41f86f5b 100644
--- a/components/camel-aws/camel-aws2-mq/src/test/java/org/apache/camel/component/aws2/mq/MQProducerTest.java
+++ b/components/camel-aws/camel-aws2-mq/src/test/java/org/apache/camel/component/aws2/mq/MQProducerTest.java
@@ -39,6 +39,7 @@ import software.amazon.awssdk.services.mq.model.ListBrokersResponse;
 import software.amazon.awssdk.services.mq.model.UpdateBrokerResponse;
 import software.amazon.awssdk.services.mq.model.User;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class MQProducerTest extends CamelTestSupport {
@@ -172,6 +173,22 @@ public class MQProducerTest extends CamelTestSupport {
         assertEquals("1", resultGet.brokerId());
     }
 
+    @Test
+    void mqUpdateBrokerWithoutBrokerIdReportsThatParameter() {
+        assertThatThrownBy(() -> template.requestBody("direct:updateBroker", "body"))
+                .hasRootCauseInstanceOf(IllegalArgumentException.class)
+                .hasRootCauseMessage("Broker Id must be specified");
+    }
+
+    @Test
+    void mqUpdateBrokerWithoutConfigurationIdReportsThatParameter() {
+        // the broker id IS supplied, so the error must name the missing configuration id
+        assertThatThrownBy(() -> template.requestBodyAndHeader("direct:updateBroker", "body",
+                MQ2Constants.BROKER_ID, "1"))
+                .hasRootCauseInstanceOf(IllegalArgumentException.class)
+                .hasRootCauseMessage("Configuration Id must be specified");
+    }
+
     @Test
     public void mqDescribeBrokerTest() throws Exception {
 
diff --git a/components/camel-aws/camel-aws2-msk/pom.xml b/components/camel-aws/camel-aws2-msk/pom.xml
index 8fd7af9f44d5..3a3ded4de93a 100644
--- a/components/camel-aws/camel-aws2-msk/pom.xml
+++ b/components/camel-aws/camel-aws2-msk/pom.xml
@@ -78,5 +78,10 @@
             <artifactId>camel-test-spring-junit6</artifactId>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
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 84edeb597ff3..c100cbe5184d 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
@@ -176,7 +176,7 @@ public class MSK2Producer extends DefaultProducer {
                 Integer nodesNumber = exchange.getIn().getHeader(MSK2Constants.BROKER_NODES_NUMBER, Integer.class);
                 builder.numberOfBrokerNodes(nodesNumber);
             } else {
-                throw new IllegalArgumentException("Kafka Version must be specified");
+                throw new IllegalArgumentException("Number of Broker Nodes must be specified");
             }
             if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(MSK2Constants.BROKER_NODES_GROUP_INFO))) {
                 BrokerNodeGroupInfo brokerNodesGroupInfo
diff --git a/components/camel-aws/camel-aws2-msk/src/test/java/org/apache/camel/component/aws2/msk/MSKProducerTest.java b/components/camel-aws/camel-aws2-msk/src/test/java/org/apache/camel/component/aws2/msk/MSKProducerTest.java
index 3e9b1b4b8021..7c1e1b1b437f 100644
--- a/components/camel-aws/camel-aws2-msk/src/test/java/org/apache/camel/component/aws2/msk/MSKProducerTest.java
+++ b/components/camel-aws/camel-aws2-msk/src/test/java/org/apache/camel/component/aws2/msk/MSKProducerTest.java
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.aws2.msk;
 
+import java.util.Map;
+
 import org.apache.camel.BindToRegistry;
 import org.apache.camel.EndpointInject;
 import org.apache.camel.Exchange;
@@ -32,6 +34,7 @@ import software.amazon.awssdk.services.kafka.model.DescribeClusterResponse;
 import software.amazon.awssdk.services.kafka.model.ListClustersRequest;
 import software.amazon.awssdk.services.kafka.model.ListClustersResponse;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class MSKProducerTest extends CamelTestSupport {
@@ -99,6 +102,17 @@ public class MSKProducerTest extends CamelTestSupport {
         assertEquals(ClusterState.CREATING.name(), resultGet.state().toString());
     }
 
+    @Test
+    void mskCreateClusterWithoutBrokerNodesNumberReportsThatParameter() {
+        // the Kafka version IS supplied, so the error must name the missing broker-nodes count
+        assertThatThrownBy(() -> template.requestBodyAndHeaders("direct:createCluster", "body",
+                Map.of(
+                        MSK2Constants.CLUSTER_NAME, "test-kafka",
+                        MSK2Constants.CLUSTER_KAFKA_VERSION, "2.1.1")))
+                .hasRootCauseInstanceOf(IllegalArgumentException.class)
+                .hasRootCauseMessage("Number of Broker Nodes must be specified");
+    }
+
     @Test
     public void mskDeleteClusterTest() throws Exception {
 
diff --git a/components/camel-aws/camel-aws2-sts/pom.xml b/components/camel-aws/camel-aws2-sts/pom.xml
index 41f2a4d6a710..96b138110d63 100644
--- a/components/camel-aws/camel-aws2-sts/pom.xml
+++ b/components/camel-aws/camel-aws2-sts/pom.xml
@@ -74,5 +74,10 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
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 b6c288a71f9e..1a9d0c5a9a5b 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
@@ -199,7 +199,7 @@ public class STS2Producer extends DefaultProducer {
                 String federatedName = exchange.getIn().getHeader(STS2Constants.FEDERATED_NAME, String.class);
                 builder.name(federatedName);
             } else {
-                throw new IllegalArgumentException("Federated name needs to be specified for assumeRole operation");
+                throw new IllegalArgumentException("Federated name needs to be specified for getFederationToken operation");
             }
             try {
                 result = stsClient.getFederationToken(builder.build());
diff --git a/components/camel-aws/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/STS2ProducerTest.java b/components/camel-aws/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/STS2ProducerTest.java
index 8565e3cf7bd1..c520f5d73035 100644
--- a/components/camel-aws/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/STS2ProducerTest.java
+++ b/components/camel-aws/camel-aws2-sts/src/test/java/org/apache/camel/component/aws2/sts/STS2ProducerTest.java
@@ -28,6 +28,7 @@ import software.amazon.awssdk.services.sts.model.AssumeRoleResponse;
 import software.amazon.awssdk.services.sts.model.GetFederationTokenResponse;
 import software.amazon.awssdk.services.sts.model.GetSessionTokenResponse;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 
 public class STS2ProducerTest extends CamelTestSupport {
@@ -92,6 +93,13 @@ public class STS2ProducerTest extends CamelTestSupport {
         assertEquals("xxx", resultGet.credentials().accessKeyId());
     }
 
+    @Test
+    void stsGetFederationTokenWithoutFederatedNameReportsTheCorrectOperation() {
+        assertThatThrownBy(() -> template.requestBody("direct:getFederationToken", "body"))
+                .hasRootCauseInstanceOf(IllegalArgumentException.class)
+                .hasRootCauseMessage("Federated name needs to be specified for getFederationToken operation");
+    }
+
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {