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 8954f2de10a2 CAMEL-24289: camel-aws2-textract - throw when 
pojoRequest=true and the body is the wrong type (#25210)
8954f2de10a2 is described below

commit 8954f2de10a25e4c79a0e14b1897af7b72bf89bb
Author: Andrea Cosentino <[email protected]>
AuthorDate: Wed Jul 29 11:48:22 2026 +0200

    CAMEL-24289: camel-aws2-textract - throw when pojoRequest=true and the body 
is the wrong type (#25210)
    
    Child of CAMEL-24261. Textract2Producer's nine operations 
(detectDocumentText,
    analyzeDocument, analyzeExpense, startDocumentTextDetection, 
startDocumentAnalysis,
    startExpenseAnalysis, getDocumentTextDetection, getDocumentAnalysis,
    getExpenseAnalysis) 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-textract/pom.xml   |  5 +++
 .../component/aws2/textract/Textract2Producer.java | 27 ++++++++++++++++
 .../aws2/textract/Textract2ProducerTest.java       | 37 ++++++++++++++++++++++
 3 files changed, 69 insertions(+)

diff --git a/components/camel-aws/camel-aws2-textract/pom.xml 
b/components/camel-aws/camel-aws2-textract/pom.xml
index e2a2ba80efcd..452d5b6ebe35 100644
--- a/components/camel-aws/camel-aws2-textract/pom.xml
+++ b/components/camel-aws/camel-aws2-textract/pom.xml
@@ -78,5 +78,10 @@
             <version>${project.version}</version>
             <scope>test</scope>
         </dependency>
+        <dependency>
+            <groupId>org.assertj</groupId>
+            <artifactId>assertj-core</artifactId>
+            <scope>test</scope>
+        </dependency>
     </dependencies>
 </project>
\ No newline at end of file
diff --git 
a/components/camel-aws/camel-aws2-textract/src/main/java/org/apache/camel/component/aws2/textract/Textract2Producer.java
 
b/components/camel-aws/camel-aws2-textract/src/main/java/org/apache/camel/component/aws2/textract/Textract2Producer.java
index e00d9de3a567..aca4d9a02dd7 100644
--- 
a/components/camel-aws/camel-aws2-textract/src/main/java/org/apache/camel/component/aws2/textract/Textract2Producer.java
+++ 
b/components/camel-aws/camel-aws2-textract/src/main/java/org/apache/camel/component/aws2/textract/Textract2Producer.java
@@ -123,6 +123,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "detectDocumentText operation requires 
DetectDocumentTextRequest in POJO mode");
             }
         } else {
             DetectDocumentTextRequest.Builder request = 
DetectDocumentTextRequest.builder();
@@ -154,6 +157,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "analyzeDocument operation requires 
AnalyzeDocumentRequest in POJO mode");
             }
         } else {
             AnalyzeDocumentRequest.Builder request = 
AnalyzeDocumentRequest.builder();
@@ -194,6 +200,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "analyzeExpense operation requires 
AnalyzeExpenseRequest in POJO mode");
             }
         } else {
             AnalyzeExpenseRequest.Builder request = 
AnalyzeExpenseRequest.builder();
@@ -226,6 +235,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "startDocumentTextDetection operation requires 
StartDocumentTextDetectionRequest in POJO mode");
             }
         } else {
             StartDocumentTextDetectionRequest.Builder request = 
StartDocumentTextDetectionRequest.builder();
@@ -258,6 +270,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "startDocumentAnalysis operation requires 
StartDocumentAnalysisRequest in POJO mode");
             }
         } else {
             StartDocumentAnalysisRequest.Builder request = 
StartDocumentAnalysisRequest.builder();
@@ -297,6 +312,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "startExpenseAnalysis operation requires 
StartExpenseAnalysisRequest in POJO mode");
             }
         } else {
             StartExpenseAnalysisRequest.Builder request = 
StartExpenseAnalysisRequest.builder();
@@ -329,6 +347,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "getDocumentTextDetection operation requires 
GetDocumentTextDetectionRequest in POJO mode");
             }
         } else {
             GetDocumentTextDetectionRequest.Builder request = 
GetDocumentTextDetectionRequest.builder();
@@ -377,6 +398,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "getDocumentAnalysis operation requires 
GetDocumentAnalysisRequest in POJO mode");
             }
         } else {
             GetDocumentAnalysisRequest.Builder request = 
GetDocumentAnalysisRequest.builder();
@@ -425,6 +449,9 @@ public class Textract2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "getExpenseAnalysis operation requires 
GetExpenseAnalysisRequest in POJO mode");
             }
         } else {
             GetExpenseAnalysisRequest.Builder request = 
GetExpenseAnalysisRequest.builder();
diff --git 
a/components/camel-aws/camel-aws2-textract/src/test/java/org/apache/camel/component/aws2/textract/Textract2ProducerTest.java
 
b/components/camel-aws/camel-aws2-textract/src/test/java/org/apache/camel/component/aws2/textract/Textract2ProducerTest.java
index 445e41bc8c24..dba02346a12f 100644
--- 
a/components/camel-aws/camel-aws2-textract/src/test/java/org/apache/camel/component/aws2/textract/Textract2ProducerTest.java
+++ 
b/components/camel-aws/camel-aws2-textract/src/test/java/org/apache/camel/component/aws2/textract/Textract2ProducerTest.java
@@ -24,11 +24,14 @@ 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.core.SdkBytes;
 import 
software.amazon.awssdk.services.textract.model.DetectDocumentTextRequest;
 import 
software.amazon.awssdk.services.textract.model.DetectDocumentTextResponse;
 import software.amazon.awssdk.services.textract.model.Document;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
 
@@ -112,6 +115,24 @@ public class Textract2ProducerTest extends 
CamelTestSupport {
 
     }
 
+    @ParameterizedTest
+    @CsvSource({
+            "direct:detectDocumentTextPojo,detectDocumentText operation 
requires DetectDocumentTextRequest in POJO mode",
+            "direct:analyzeDocumentPojo,analyzeDocument operation requires 
AnalyzeDocumentRequest in POJO mode",
+            "direct:analyzeExpensePojo,analyzeExpense operation requires 
AnalyzeExpenseRequest in POJO mode",
+            "direct:startDocumentTextDetectionPojo,startDocumentTextDetection 
operation requires StartDocumentTextDetectionRequest in POJO mode",
+            "direct:startDocumentAnalysisPojo,startDocumentAnalysis operation 
requires StartDocumentAnalysisRequest in POJO mode",
+            "direct:startExpenseAnalysisPojo,startExpenseAnalysis operation 
requires StartExpenseAnalysisRequest in POJO mode",
+            "direct:getDocumentTextDetectionPojo,getDocumentTextDetection 
operation requires GetDocumentTextDetectionRequest in POJO mode",
+            "direct:getDocumentAnalysisPojo,getDocumentAnalysis operation 
requires GetDocumentAnalysisRequest in POJO mode",
+            "direct:getExpenseAnalysisPojo,getExpenseAnalysis operation 
requires GetExpenseAnalysisRequest 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() {
@@ -126,6 +147,22 @@ public class Textract2ProducerTest extends 
CamelTestSupport {
                 from("direct:detectDocumentTextOptions").to(
                         
"aws2-textract://test?textractClient=#amazonTextractClient&operation=detectDocumentText&s3Bucket=testbucket&s3Object=testobject.pdf")
                         .to("mock:result");
+                from("direct:analyzeDocumentPojo")
+                        
.to("aws2-textract://test?textractClient=#amazonTextractClient&operation=analyzeDocument&pojoRequest=true");
+                from("direct:analyzeExpensePojo")
+                        
.to("aws2-textract://test?textractClient=#amazonTextractClient&operation=analyzeExpense&pojoRequest=true");
+                from("direct:startDocumentTextDetectionPojo")
+                        
.to("aws2-textract://test?textractClient=#amazonTextractClient&operation=startDocumentTextDetection&pojoRequest=true");
+                from("direct:startDocumentAnalysisPojo")
+                        
.to("aws2-textract://test?textractClient=#amazonTextractClient&operation=startDocumentAnalysis&pojoRequest=true");
+                from("direct:startExpenseAnalysisPojo")
+                        
.to("aws2-textract://test?textractClient=#amazonTextractClient&operation=startExpenseAnalysis&pojoRequest=true");
+                from("direct:getDocumentTextDetectionPojo")
+                        
.to("aws2-textract://test?textractClient=#amazonTextractClient&operation=getDocumentTextDetection&pojoRequest=true");
+                from("direct:getDocumentAnalysisPojo")
+                        
.to("aws2-textract://test?textractClient=#amazonTextractClient&operation=getDocumentAnalysis&pojoRequest=true");
+                from("direct:getExpenseAnalysisPojo")
+                        
.to("aws2-textract://test?textractClient=#amazonTextractClient&operation=getExpenseAnalysis&pojoRequest=true");
             }
         };
     }

Reply via email to