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 d908eff42a7b CAMEL-24283: camel-aws2-comprehend - throw when 
pojoRequest=true and the body is the wrong type (#25194)
d908eff42a7b is described below

commit d908eff42a7bccbde77663bc77f3fc8c1f8c94e5
Author: Andrea Cosentino <[email protected]>
AuthorDate: Tue Jul 28 15:01:24 2026 +0200

    CAMEL-24283: camel-aws2-comprehend - throw when pojoRequest=true and the 
body is the wrong type (#25194)
    
    Child of CAMEL-24261. Comprehend2Producer's nine operations 
(detectDominantLanguage,
    detectEntities, detectKeyPhrases, detectSentiment, detectSyntax, 
detectPiiEntities,
    detectToxicContent, classifyDocument, containsPiiEntities) 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, sending a wrong-typed body 
to
    pojoRequest=true routes and asserting the message; 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-comprehend/pom.xml |  5 ++++
 .../aws2/comprehend/Comprehend2Producer.java       | 27 +++++++++++++++++
 .../aws2/comprehend/Comprehend2ProducerTest.java   | 35 ++++++++++++++++++++++
 3 files changed, 67 insertions(+)

diff --git a/components/camel-aws/camel-aws2-comprehend/pom.xml 
b/components/camel-aws/camel-aws2-comprehend/pom.xml
index e1633f93e4f7..65ff9100df6b 100644
--- a/components/camel-aws/camel-aws2-comprehend/pom.xml
+++ b/components/camel-aws/camel-aws2-comprehend/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>
diff --git 
a/components/camel-aws/camel-aws2-comprehend/src/main/java/org/apache/camel/component/aws2/comprehend/Comprehend2Producer.java
 
b/components/camel-aws/camel-aws2-comprehend/src/main/java/org/apache/camel/component/aws2/comprehend/Comprehend2Producer.java
index 6ba657380b8f..9c36499c663e 100644
--- 
a/components/camel-aws/camel-aws2-comprehend/src/main/java/org/apache/camel/component/aws2/comprehend/Comprehend2Producer.java
+++ 
b/components/camel-aws/camel-aws2-comprehend/src/main/java/org/apache/camel/component/aws2/comprehend/Comprehend2Producer.java
@@ -147,6 +147,9 @@ public class Comprehend2Producer extends DefaultProducer {
                     message.setHeader(Comprehend2Constants.DETECTED_LANGUAGE, 
topLanguage.languageCode());
                     
message.setHeader(Comprehend2Constants.DETECTED_LANGUAGE_SCORE, 
topLanguage.score());
                 }
+            } else {
+                throw new IllegalArgumentException(
+                        "detectDominantLanguage operation requires 
DetectDominantLanguageRequest in POJO mode");
             }
         } else {
             DetectDominantLanguageRequest.Builder request = 
DetectDominantLanguageRequest.builder();
@@ -181,6 +184,9 @@ public class Comprehend2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result.entities());
+            } else {
+                throw new IllegalArgumentException(
+                        "detectEntities operation requires 
DetectEntitiesRequest in POJO mode");
             }
         } else {
             DetectEntitiesRequest.Builder request = 
DetectEntitiesRequest.builder();
@@ -211,6 +217,9 @@ public class Comprehend2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result.keyPhrases());
+            } else {
+                throw new IllegalArgumentException(
+                        "detectKeyPhrases operation requires 
DetectKeyPhrasesRequest in POJO mode");
             }
         } else {
             DetectKeyPhrasesRequest.Builder request = 
DetectKeyPhrasesRequest.builder();
@@ -243,6 +252,9 @@ public class Comprehend2Producer extends DefaultProducer {
                 message.setBody(result);
                 message.setHeader(Comprehend2Constants.DETECTED_SENTIMENT, 
result.sentimentAsString());
                 
message.setHeader(Comprehend2Constants.DETECTED_SENTIMENT_SCORE, 
result.sentimentScore());
+            } else {
+                throw new IllegalArgumentException(
+                        "detectSentiment operation requires 
DetectSentimentRequest in POJO mode");
             }
         } else {
             DetectSentimentRequest.Builder request = 
DetectSentimentRequest.builder();
@@ -275,6 +287,9 @@ public class Comprehend2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result.syntaxTokens());
+            } else {
+                throw new IllegalArgumentException(
+                        "detectSyntax operation requires DetectSyntaxRequest 
in POJO mode");
             }
         } else {
             DetectSyntaxRequest.Builder request = 
DetectSyntaxRequest.builder();
@@ -305,6 +320,9 @@ public class Comprehend2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result.entities());
+            } else {
+                throw new IllegalArgumentException(
+                        "detectPiiEntities operation requires 
DetectPiiEntitiesRequest in POJO mode");
             }
         } else {
             DetectPiiEntitiesRequest.Builder request = 
DetectPiiEntitiesRequest.builder();
@@ -335,6 +353,9 @@ public class Comprehend2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result.resultList());
+            } else {
+                throw new IllegalArgumentException(
+                        "detectToxicContent operation requires 
DetectToxicContentRequest in POJO mode");
             }
         } else {
             DetectToxicContentRequest.Builder request = 
DetectToxicContentRequest.builder();
@@ -366,6 +387,9 @@ public class Comprehend2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result);
+            } else {
+                throw new IllegalArgumentException(
+                        "classifyDocument operation requires 
ClassifyDocumentRequest in POJO mode");
             }
         } else {
             ClassifyDocumentRequest.Builder request = 
ClassifyDocumentRequest.builder();
@@ -400,6 +424,9 @@ public class Comprehend2Producer extends DefaultProducer {
                 }
                 Message message = getMessageForResponse(exchange);
                 message.setBody(result.labels());
+            } else {
+                throw new IllegalArgumentException(
+                        "containsPiiEntities operation requires 
ContainsPiiEntitiesRequest in POJO mode");
             }
         } else {
             ContainsPiiEntitiesRequest.Builder request = 
ContainsPiiEntitiesRequest.builder();
diff --git 
a/components/camel-aws/camel-aws2-comprehend/src/test/java/org/apache/camel/component/aws2/comprehend/Comprehend2ProducerTest.java
 
b/components/camel-aws/camel-aws2-comprehend/src/test/java/org/apache/camel/component/aws2/comprehend/Comprehend2ProducerTest.java
index 85918b65c557..cbf5f2d1916f 100644
--- 
a/components/camel-aws/camel-aws2-comprehend/src/test/java/org/apache/camel/component/aws2/comprehend/Comprehend2ProducerTest.java
+++ 
b/components/camel-aws/camel-aws2-comprehend/src/test/java/org/apache/camel/component/aws2/comprehend/Comprehend2ProducerTest.java
@@ -26,6 +26,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.comprehend.model.DetectDominantLanguageRequest;
 import software.amazon.awssdk.services.comprehend.model.DetectSentimentRequest;
 import 
software.amazon.awssdk.services.comprehend.model.DetectSentimentResponse;
@@ -35,6 +37,7 @@ import 
software.amazon.awssdk.services.comprehend.model.KeyPhrase;
 import software.amazon.awssdk.services.comprehend.model.PiiEntity;
 import software.amazon.awssdk.services.comprehend.model.SyntaxToken;
 
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -222,6 +225,24 @@ public class Comprehend2ProducerTest extends 
CamelTestSupport {
         assertFalse(results.isEmpty());
     }
 
+    @ParameterizedTest
+    @CsvSource({
+            "direct:detectDominantLanguagePojo,detectDominantLanguage 
operation requires DetectDominantLanguageRequest in POJO mode",
+            "direct:detectEntitiesPojo,detectEntities operation requires 
DetectEntitiesRequest in POJO mode",
+            "direct:detectKeyPhrasesPojo,detectKeyPhrases operation requires 
DetectKeyPhrasesRequest in POJO mode",
+            "direct:detectSentimentPojo,detectSentiment operation requires 
DetectSentimentRequest in POJO mode",
+            "direct:detectSyntaxPojo,detectSyntax operation requires 
DetectSyntaxRequest in POJO mode",
+            "direct:detectPiiEntitiesPojo,detectPiiEntities operation requires 
DetectPiiEntitiesRequest in POJO mode",
+            "direct:detectToxicContentPojo,detectToxicContent operation 
requires DetectToxicContentRequest in POJO mode",
+            "direct:classifyDocumentPojo,classifyDocument operation requires 
ClassifyDocumentRequest in POJO mode",
+            "direct:containsPiiEntitiesPojo,containsPiiEntities operation 
requires ContainsPiiEntitiesRequest 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() {
@@ -254,6 +275,20 @@ public class Comprehend2ProducerTest extends 
CamelTestSupport {
                 from("direct:detectToxicContent")
                         
.to("aws2-comprehend://test?comprehendClient=#amazonComprehendClient&operation=detectToxicContent&languageCode=en")
                         .to("mock:result");
+                from("direct:detectEntitiesPojo")
+                        
.to("aws2-comprehend://test?comprehendClient=#amazonComprehendClient&operation=detectEntities&pojoRequest=true");
+                from("direct:detectKeyPhrasesPojo")
+                        
.to("aws2-comprehend://test?comprehendClient=#amazonComprehendClient&operation=detectKeyPhrases&pojoRequest=true");
+                from("direct:detectSyntaxPojo")
+                        
.to("aws2-comprehend://test?comprehendClient=#amazonComprehendClient&operation=detectSyntax&pojoRequest=true");
+                from("direct:detectPiiEntitiesPojo")
+                        
.to("aws2-comprehend://test?comprehendClient=#amazonComprehendClient&operation=detectPiiEntities&pojoRequest=true");
+                from("direct:detectToxicContentPojo")
+                        
.to("aws2-comprehend://test?comprehendClient=#amazonComprehendClient&operation=detectToxicContent&pojoRequest=true");
+                from("direct:classifyDocumentPojo")
+                        
.to("aws2-comprehend://test?comprehendClient=#amazonComprehendClient&operation=classifyDocument&pojoRequest=true");
+                from("direct:containsPiiEntitiesPojo")
+                        
.to("aws2-comprehend://test?comprehendClient=#amazonComprehendClient&operation=containsPiiEntities&pojoRequest=true");
             }
         };
     }

Reply via email to