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 946da97ecb61 CAMEL-24303: camel-aws2-redshift - throw when
pojoRequest=true and the body is the wrong type
946da97ecb61 is described below
commit 946da97ecb61522a72e3d3a42c796f84a30abcb1
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Jul 29 18:45:06 2026 +0200
CAMEL-24303: camel-aws2-redshift - throw when pojoRequest=true and the body
is the wrong type
Child of CAMEL-24261 (completing CAMEL-23462 across the AWS2 producers).
RedshiftData2Producer's ten operations 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. Each branch now throws IllegalArgumentException
naming the
required request type, consistent with the CAMEL-23462 Bedrock fix. A
parameterized
test covers all ten operations. Behaviour change documented in the 4.22
upgrade
guide (added with CAMEL-24263). Main only, matching the CAMEL-23462
precedent.
Closes #25227
Co-authored-by: Claude Opus 4.8 <[email protected]>
---
components/camel-aws/camel-aws2-redshift/pom.xml | 5 +++
.../aws2/redshift/data/RedshiftData2Producer.java | 30 ++++++++++++++++
.../redshift/data/RedshiftData2ProducerTest.java | 40 ++++++++++++++++++++++
3 files changed, 75 insertions(+)
diff --git a/components/camel-aws/camel-aws2-redshift/pom.xml
b/components/camel-aws/camel-aws2-redshift/pom.xml
index b7fee8c4e367..bd653d7bbf2b 100644
--- a/components/camel-aws/camel-aws2-redshift/pom.xml
+++ b/components/camel-aws/camel-aws2-redshift/pom.xml
@@ -74,5 +74,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-redshift/src/main/java/org/apache/camel/component/aws2/redshift/data/RedshiftData2Producer.java
b/components/camel-aws/camel-aws2-redshift/src/main/java/org/apache/camel/component/aws2/redshift/data/RedshiftData2Producer.java
index f0fb7d14d37c..827afeba073d 100644
---
a/components/camel-aws/camel-aws2-redshift/src/main/java/org/apache/camel/component/aws2/redshift/data/RedshiftData2Producer.java
+++
b/components/camel-aws/camel-aws2-redshift/src/main/java/org/apache/camel/component/aws2/redshift/data/RedshiftData2Producer.java
@@ -102,6 +102,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "listDatabases operation requires ListDatabasesRequest
in POJO mode");
}
} else {
ListDatabasesRequest.Builder builder =
ListDatabasesRequest.builder();
@@ -156,6 +159,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "listSchemas operation requires ListSchemasRequest in
POJO mode");
}
} else {
ListSchemasRequest.Builder builder = ListSchemasRequest.builder();
@@ -217,6 +223,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "listStatements operation requires
ListStatementsRequest in POJO mode");
}
} else {
ListStatementsRequest.Builder builder =
ListStatementsRequest.builder();
@@ -263,6 +272,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "listTables operation requires ListTablesRequest in
POJO mode");
}
} else {
ListTablesRequest.Builder builder = ListTablesRequest.builder();
@@ -328,6 +340,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "describeTable operation requires DescribeTableRequest
in POJO mode");
}
} else {
DescribeTableRequest.Builder builder =
DescribeTableRequest.builder();
@@ -394,6 +409,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "executeStatement operation requires
ExecuteStatementRequest in POJO mode");
}
} else {
ExecuteStatementRequest.Builder builder =
ExecuteStatementRequest.builder();
@@ -465,6 +483,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "batchExecuteStatement operation requires
BatchExecuteStatementRequest in POJO mode");
}
} else {
BatchExecuteStatementRequest.Builder builder =
BatchExecuteStatementRequest.builder();
@@ -530,6 +551,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "cancelStatement operation requires
CancelStatementRequest in POJO mode");
}
} else {
CancelStatementRequest.Builder builder =
CancelStatementRequest.builder();
@@ -563,6 +587,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "describeStatement operation requires
DescribeStatementRequest in POJO mode");
}
} else {
DescribeStatementRequest.Builder builder =
DescribeStatementRequest.builder();
@@ -596,6 +623,9 @@ public class RedshiftData2Producer extends DefaultProducer {
}
Message message = getMessageForResponse(exchange);
message.setBody(result);
+ } else {
+ throw new IllegalArgumentException(
+ "getStatementResult operation requires
GetStatementResultRequest in POJO mode");
}
} else {
GetStatementResultRequest.Builder builder =
GetStatementResultRequest.builder();
diff --git
a/components/camel-aws/camel-aws2-redshift/src/test/java/org/apache/camel/component/aws2/redshift/data/RedshiftData2ProducerTest.java
b/components/camel-aws/camel-aws2-redshift/src/test/java/org/apache/camel/component/aws2/redshift/data/RedshiftData2ProducerTest.java
index 944c95cf438e..29df1ef60010 100644
---
a/components/camel-aws/camel-aws2-redshift/src/test/java/org/apache/camel/component/aws2/redshift/data/RedshiftData2ProducerTest.java
+++
b/components/camel-aws/camel-aws2-redshift/src/test/java/org/apache/camel/component/aws2/redshift/data/RedshiftData2ProducerTest.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.redshiftdata.model.BatchExecuteStatementResponse;
import
software.amazon.awssdk.services.redshiftdata.model.CancelStatementResponse;
import
software.amazon.awssdk.services.redshiftdata.model.DescribeStatementResponse;
@@ -38,6 +40,7 @@ import
software.amazon.awssdk.services.redshiftdata.model.ListSchemasResponse;
import
software.amazon.awssdk.services.redshiftdata.model.ListStatementsResponse;
import software.amazon.awssdk.services.redshiftdata.model.ListTablesResponse;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class RedshiftData2ProducerTest extends CamelTestSupport {
@@ -222,6 +225,25 @@ public class RedshiftData2ProducerTest extends
CamelTestSupport {
assertEquals(10, resultGet.totalNumRows());
}
+ @ParameterizedTest
+ @CsvSource({
+ "direct:listDatabasesPojo,listDatabases operation requires
ListDatabasesRequest in POJO mode",
+ "direct:listSchemasPojo,listSchemas operation requires
ListSchemasRequest in POJO mode",
+ "direct:listStatementsPojo,listStatements operation requires
ListStatementsRequest in POJO mode",
+ "direct:listTablesPojo,listTables operation requires
ListTablesRequest in POJO mode",
+ "direct:describeTablePojo,describeTable operation requires
DescribeTableRequest in POJO mode",
+ "direct:executeStatementPojo,executeStatement operation requires
ExecuteStatementRequest in POJO mode",
+ "direct:batchExecuteStatementPojo,batchExecuteStatement operation
requires BatchExecuteStatementRequest in POJO mode",
+ "direct:cancelStatementPojo,cancelStatement operation requires
CancelStatementRequest in POJO mode",
+ "direct:describeStatementPojo,describeStatement operation requires
DescribeStatementRequest in POJO mode",
+ "direct:getStatementResultPojo,getStatementResult operation
requires GetStatementResultRequest 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() {
@@ -260,6 +282,24 @@ public class RedshiftData2ProducerTest extends
CamelTestSupport {
from("direct:getStatementResult")
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=getStatementResult")
.to("mock:result");
+ from("direct:listSchemasPojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=listSchemas&pojoRequest=true");
+ from("direct:listStatementsPojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=listStatements&pojoRequest=true");
+ from("direct:listTablesPojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=listTables&pojoRequest=true");
+ from("direct:describeTablePojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=describeTable&pojoRequest=true");
+ from("direct:executeStatementPojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=executeStatement&pojoRequest=true");
+ from("direct:batchExecuteStatementPojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=batchExecuteStatement&pojoRequest=true");
+ from("direct:cancelStatementPojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=cancelStatement&pojoRequest=true");
+ from("direct:describeStatementPojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=describeStatement&pojoRequest=true");
+ from("direct:getStatementResultPojo")
+
.to("aws2-redshift-data://test?awsRedshiftDataClient=#awsRedshiftDataClient&operation=getStatementResult&pojoRequest=true");
}
};
}