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 c16407edf6aa CAMEL-24300: camel-aws2-ec2 - throw when pojoRequest=true
and the body is the wrong type (#25215)
c16407edf6aa is described below
commit c16407edf6aa9e9f19cb09c75d439e7ea9d74b9e
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Jul 29 13:20:10 2026 +0200
CAMEL-24300: camel-aws2-ec2 - throw when pojoRequest=true and the body is
the wrong type (#25215)
Child of CAMEL-24261. AWS2EC2Producer's nine operations
(createAndRunInstances,
startInstances, stopInstances, terminateInstances, rebootInstances,
monitorInstances, unmonitorInstances, createTags, deleteTags) only acted
when the
body was the matching request type under pojoRequest=true; any other body
silently
fell through with no AWS call and no error. Add the missing else that throws
IllegalArgumentException naming the required type, consistent with
CAMEL-23462.
A parameterized test covers all nine operations; verified to fail (silent
no-op)
before the fix. The shared 4.22 upgrade-guide entry was added with
CAMEL-24263.
Signed-off-by: Andrea Cosentino <[email protected]>
Co-authored-by: Claude Opus 4.8 <[email protected]>
---
components/camel-aws/camel-aws2-ec2/pom.xml | 5 +++
.../camel/component/aws2/ec2/AWS2EC2Producer.java | 27 ++++++++++++++++
.../camel/component/aws2/ec2/EC2ProducerTest.java | 37 ++++++++++++++++++++++
3 files changed, 69 insertions(+)
diff --git a/components/camel-aws/camel-aws2-ec2/pom.xml
b/components/camel-aws/camel-aws2-ec2/pom.xml
index 0994f2a0cac4..3ca83d4adf21 100644
--- a/components/camel-aws/camel-aws2-ec2/pom.xml
+++ b/components/camel-aws/camel-aws2-ec2/pom.xml
@@ -77,5 +77,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-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Producer.java
b/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Producer.java
index f0c99eb95d35..f32cb241e7c4 100644
---
a/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Producer.java
+++
b/components/camel-aws/camel-aws2-ec2/src/main/java/org/apache/camel/component/aws2/ec2/AWS2EC2Producer.java
@@ -160,6 +160,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Creating and running instances requests
performing");
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "createAndRunInstances operation requires
RunInstancesRequest in POJO mode");
}
} else {
RunInstancesRequest.Builder builder =
RunInstancesRequest.builder();
@@ -251,6 +254,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Starting instances with Ids [{}] ",
startInstancesRequest.instanceIds());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "startInstances operation requires
StartInstancesRequest in POJO mode");
}
} else {
StartInstancesRequest.Builder builder =
StartInstancesRequest.builder();
@@ -293,6 +299,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Stopping instances with Ids [{}] ",
stopInstancesRequest.instanceIds());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "stopInstances operation requires StopInstancesRequest
in POJO mode");
}
} else {
StopInstancesRequest.Builder builder =
StopInstancesRequest.builder();
@@ -335,6 +344,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Terminating instances with Ids [{}] ",
terminateInstancesRequest.instanceIds());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "terminateInstances operation requires
TerminateInstancesRequest in POJO mode");
}
} else {
TerminateInstancesRequest.Builder builder =
TerminateInstancesRequest.builder();
@@ -434,6 +446,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Reboot Instances command returned the error
code {}", ase.awsErrorDetails().errorCode());
throw ase;
}
+ } else {
+ throw new IllegalArgumentException(
+ "rebootInstances operation requires
RebootInstancesRequest in POJO mode");
}
} else {
RebootInstancesRequest.Builder builder =
RebootInstancesRequest.builder();
@@ -472,6 +487,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Start Monitoring instances with Ids [{}] ",
monitorInstancesRequest.instanceIds());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "monitorInstances operation requires
MonitorInstancesRequest in POJO mode");
}
} else {
MonitorInstancesRequest.Builder builder =
MonitorInstancesRequest.builder();
@@ -514,6 +532,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Stop Monitoring instances with Ids [{}] ",
unmonitorInstancesRequest.instanceIds());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "unmonitorInstances operation requires
UnmonitorInstancesRequest in POJO mode");
}
} else {
UnmonitorInstancesRequest.Builder builder =
UnmonitorInstancesRequest.builder();
@@ -556,6 +577,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Created tags [{}] ", createTagsRequest.tags());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "createTags operation requires CreateTagsRequest in
POJO mode");
}
} else {
Collection<Tag> tags;
@@ -605,6 +629,9 @@ public class AWS2EC2Producer extends DefaultProducer {
LOG.trace("Delete tags [{}] ", deleteTagsRequest.tags());
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "deleteTags operation requires DeleteTagsRequest in
POJO mode");
}
} else {
Collection<Tag> tags;
diff --git
a/components/camel-aws/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/EC2ProducerTest.java
b/components/camel-aws/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/EC2ProducerTest.java
index 7a124e29f7f9..05b00d086fff 100644
---
a/components/camel-aws/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/EC2ProducerTest.java
+++
b/components/camel-aws/camel-aws2-ec2/src/test/java/org/apache/camel/component/aws2/ec2/EC2ProducerTest.java
@@ -27,6 +27,8 @@ import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.component.mock.MockEndpoint;
import org.apache.camel.test.junit6.CamelTestSupport;
import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.CsvSource;
import
software.amazon.awssdk.services.ec2.model.DescribeInstanceStatusResponse;
import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse;
import software.amazon.awssdk.services.ec2.model.InstanceStateName;
@@ -40,6 +42,7 @@ import
software.amazon.awssdk.services.ec2.model.StopInstancesResponse;
import software.amazon.awssdk.services.ec2.model.TerminateInstancesResponse;
import software.amazon.awssdk.services.ec2.model.UnmonitorInstancesResponse;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -256,6 +259,24 @@ public class EC2ProducerTest extends CamelTestSupport {
assertEquals(MonitoringState.DISABLED,
resultGet.instanceMonitorings().get(0).monitoring().state());
}
+ @ParameterizedTest
+ @CsvSource({
+ "direct:createAndRunPojo,createAndRunInstances operation requires
RunInstancesRequest in POJO mode",
+ "direct:startPojo,startInstances operation requires
StartInstancesRequest in POJO mode",
+ "direct:stopPojo,stopInstances operation requires
StopInstancesRequest in POJO mode",
+ "direct:terminatePojo,terminateInstances operation requires
TerminateInstancesRequest in POJO mode",
+ "direct:rebootPojo,rebootInstances operation requires
RebootInstancesRequest in POJO mode",
+ "direct:monitorPojo,monitorInstances operation requires
MonitorInstancesRequest in POJO mode",
+ "direct:unmonitorPojo,unmonitorInstances operation requires
UnmonitorInstancesRequest in POJO mode",
+ "direct:createTagsPojo,createTags operation requires
CreateTagsRequest in POJO mode",
+ "direct:deleteTagsPojo,deleteTags operation requires
DeleteTagsRequest in POJO mode",
+ })
+ void pojoRequestWithWrongBodyTypeThrows(String route, String
expectedMessage) {
+ assertThatThrownBy(() -> template.requestBody(route, "not the expected
request type"))
+ .hasRootCauseInstanceOf(IllegalArgumentException.class)
+ .hasRootCauseMessage(expectedMessage);
+ }
+
@Override
protected RouteBuilder createRouteBuilder() {
return new RouteBuilder() {
@@ -288,6 +309,22 @@ public class EC2ProducerTest extends CamelTestSupport {
.to("mock:result");
from("direct:deleteTags").to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=deleteTags")
.to("mock:result");
+ from("direct:startPojo")
+
.to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=startInstances&pojoRequest=true");
+ from("direct:stopPojo")
+
.to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=stopInstances&pojoRequest=true");
+ from("direct:terminatePojo")
+
.to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=terminateInstances&pojoRequest=true");
+ from("direct:rebootPojo")
+
.to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=rebootInstances&pojoRequest=true");
+ from("direct:monitorPojo")
+
.to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=monitorInstances&pojoRequest=true");
+ from("direct:unmonitorPojo")
+
.to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=unmonitorInstances&pojoRequest=true");
+ from("direct:createTagsPojo")
+
.to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=createTags&pojoRequest=true");
+ from("direct:deleteTagsPojo")
+
.to("aws2-ec2://test?amazonEc2Client=#amazonEc2Client&operation=deleteTags&pojoRequest=true");
}
};
}