diff --git a/components/camel-aws/camel-aws2-rekognition/pom.xml b/components/camel-aws/camel-aws2-rekognition/pom.xml index b1482a3cc6859..f54bd288d583b 100644 --- a/components/camel-aws/camel-aws2-rekognition/pom.xml +++ b/components/camel-aws/camel-aws2-rekognition/pom.xml @@ -80,6 +80,11 @@ ${project.version} test + + org.assertj + assertj-core + test + diff --git a/components/camel-aws/camel-aws2-rekognition/src/main/java/org/apache/camel/component/aws2/rekognition/Rekognition2Producer.java b/components/camel-aws/camel-aws2-rekognition/src/main/java/org/apache/camel/component/aws2/rekognition/Rekognition2Producer.java index eca1651e528ae..881a74d6af2d2 100644 --- a/components/camel-aws/camel-aws2-rekognition/src/main/java/org/apache/camel/component/aws2/rekognition/Rekognition2Producer.java +++ b/components/camel-aws/camel-aws2-rekognition/src/main/java/org/apache/camel/component/aws2/rekognition/Rekognition2Producer.java @@ -188,6 +188,9 @@ private void associateFaces(RekognitionClient rekognitionClient, Exchange exchan } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "associateFaces operation requires AssociateFacesRequest in POJO mode"); } } else { AssociateFacesRequest.Builder builder = AssociateFacesRequest.builder(); @@ -237,6 +240,9 @@ private void compareFaces(RekognitionClient rekognitionClient, Exchange exchange } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "compareFaces operation requires CompareFacesRequest in POJO mode"); } } else { CompareFacesRequest.Builder builder = CompareFacesRequest.builder(); @@ -281,6 +287,9 @@ private void createCollection(RekognitionClient rekognitionClient, Exchange exch } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "createCollection operation requires CreateCollectionRequest in POJO mode"); } } else { CreateCollectionRequest.Builder builder = CreateCollectionRequest.builder(); @@ -313,6 +322,9 @@ private void createUser(RekognitionClient rekognitionClient, Exchange exchange) } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "createUser operation requires CreateUserRequest in POJO mode"); } } else { CreateUserRequest.Builder builder = CreateUserRequest.builder(); @@ -354,6 +366,9 @@ private void deleteCollection(RekognitionClient rekognitionClient, Exchange exch } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "deleteCollection operation requires DeleteCollectionRequest in POJO mode"); } } else { DeleteCollectionRequest.Builder builder = DeleteCollectionRequest.builder(); @@ -386,6 +401,9 @@ private void deleteFaces(RekognitionClient rekognitionClient, Exchange exchange) } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "deleteFaces operation requires DeleteFacesRequest in POJO mode"); } } else { DeleteFacesRequest.Builder builder = DeleteFacesRequest.builder(); @@ -422,6 +440,9 @@ private void deleteUser(RekognitionClient rekognitionClient, Exchange exchange) } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "deleteUser operation requires DeleteUserRequest in POJO mode"); } } else { DeleteUserRequest.Builder builder = DeleteUserRequest.builder(); @@ -463,6 +484,9 @@ private void describeCollection(RekognitionClient rekognitionClient, Exchange ex } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "describeCollection operation requires DescribeCollectionRequest in POJO mode"); } } else { DescribeCollectionRequest.Builder builder = DescribeCollectionRequest.builder(); @@ -495,6 +519,9 @@ private void detectFaces(RekognitionClient rekognitionClient, Exchange exchange) } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "detectFaces operation requires DetectFacesRequest in POJO mode"); } } else { DetectFacesRequest.Builder builder = DetectFacesRequest.builder(); @@ -531,6 +558,9 @@ private void detectLabels(RekognitionClient rekognitionClient, Exchange exchange } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "detectLabels operation requires DetectLabelsRequest in POJO mode"); } } else { DetectLabelsRequest.Builder builder = DetectLabelsRequest.builder(); @@ -581,6 +611,9 @@ private void detectModerationLabels(RekognitionClient rekognitionClient, Exchang } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "detectModerationLabels operation requires DetectModerationLabelsRequest in POJO mode"); } } else { DetectModerationLabelsRequest.Builder builder = DetectModerationLabelsRequest.builder(); @@ -628,6 +661,9 @@ private void detectProtectiveEquipment(RekognitionClient rekognitionClient, Exch } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "detectProtectiveEquipment operation requires DetectProtectiveEquipmentRequest in POJO mode"); } } else { DetectProtectiveEquipmentRequest.Builder builder = DetectProtectiveEquipmentRequest.builder(); @@ -667,6 +703,9 @@ private void detectText(RekognitionClient rekognitionClient, Exchange exchange) } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "detectText operation requires DetectTextRequest in POJO mode"); } } else { DetectTextRequest.Builder builder = DetectTextRequest.builder(); @@ -704,6 +743,9 @@ private void disassociateFaces(RekognitionClient rekognitionClient, Exchange exc } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "disassociateFaces operation requires DisassociateFacesRequest in POJO mode"); } } else { DisassociateFacesRequest.Builder builder = DisassociateFacesRequest.builder(); @@ -749,6 +791,9 @@ private void getCelebrityInfo(RekognitionClient rekognitionClient, Exchange exch } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "getCelebrityInfo operation requires GetCelebrityInfoRequest in POJO mode"); } } else { GetCelebrityInfoRequest.Builder builder = GetCelebrityInfoRequest.builder(); @@ -781,6 +826,9 @@ private void getMediaAnalysisJob(RekognitionClient rekognitionClient, Exchange e } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "getMediaAnalysisJob operation requires GetMediaAnalysisJobRequest in POJO mode"); } } else { GetMediaAnalysisJobRequest.Builder builder = GetMediaAnalysisJobRequest.builder(); @@ -813,6 +861,9 @@ private void indexFaces(RekognitionClient rekognitionClient, Exchange exchange) } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "indexFaces operation requires IndexFacesRequest in POJO mode"); } } else { IndexFacesRequest.Builder builder = IndexFacesRequest.builder(); @@ -866,6 +917,9 @@ private void listCollections(RekognitionClient rekognitionClient, Exchange excha } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "listCollections operation requires ListCollectionsRequest in POJO mode"); } } else { ListCollectionsRequest.Builder builder = ListCollectionsRequest.builder(); @@ -902,6 +956,9 @@ private void listMediaAnalysisJobs(RekognitionClient rekognitionClient, Exchange } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "listMediaAnalysisJobs operation requires ListMediaAnalysisJobsRequest in POJO mode"); } } else { ListMediaAnalysisJobsRequest.Builder builder = ListMediaAnalysisJobsRequest.builder(); @@ -938,6 +995,9 @@ private void listFaces(RekognitionClient rekognitionClient, Exchange exchange) t } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "listFaces operation requires ListFacesRequest in POJO mode"); } } else { ListFacesRequest.Builder builder = ListFacesRequest.builder(); @@ -986,6 +1046,9 @@ private void listUsers(RekognitionClient rekognitionClient, Exchange exchange) t } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "listUsers operation requires ListUsersRequest in POJO mode"); } } else { ListUsersRequest.Builder builder = ListUsersRequest.builder(); @@ -1026,6 +1089,9 @@ private void recognizeCelebrities(RekognitionClient rekognitionClient, Exchange } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "recognizeCelebrities operation requires RecognizeCelebritiesRequest in POJO mode"); } } else { RecognizeCelebritiesRequest.Builder builder = RecognizeCelebritiesRequest.builder(); @@ -1058,6 +1124,9 @@ private void searchFaces(RekognitionClient rekognitionClient, Exchange exchange) } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "searchFaces operation requires SearchFacesRequest in POJO mode"); } } else { SearchFacesRequest.Builder builder = SearchFacesRequest.builder(); @@ -1102,6 +1171,9 @@ private void searchFacesByImage(RekognitionClient rekognitionClient, Exchange ex } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "searchFacesByImage operation requires SearchFacesByImageRequest in POJO mode"); } } else { SearchFacesByImageRequest.Builder builder = SearchFacesByImageRequest.builder(); @@ -1150,6 +1222,9 @@ private void searchUsers(RekognitionClient rekognitionClient, Exchange exchange) } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "searchUsers operation requires SearchUsersRequest in POJO mode"); } } else { SearchUsersRequest.Builder builder = SearchUsersRequest.builder(); @@ -1198,6 +1273,9 @@ private void searchUsersByImage(RekognitionClient rekognitionClient, Exchange ex } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "searchUsersByImage operation requires SearchUsersByImageRequest in POJO mode"); } } else { SearchUsersByImageRequest.Builder builder = SearchUsersByImageRequest.builder(); @@ -1246,6 +1324,9 @@ private void startMediaAnalysisJob(RekognitionClient rekognitionClient, Exchange } Message message = getMessageForResponse(exchange); message.setBody(result); + } else { + throw new IllegalArgumentException( + "startMediaAnalysisJob operation requires StartMediaAnalysisJobRequest in POJO mode"); } } else { StartMediaAnalysisJobRequest.Builder builder = StartMediaAnalysisJobRequest.builder(); diff --git a/components/camel-aws/camel-aws2-rekognition/src/test/java/org/apache/camel/component/aws2/rekognition/Rekognition2ProducerTest.java b/components/camel-aws/camel-aws2-rekognition/src/test/java/org/apache/camel/component/aws2/rekognition/Rekognition2ProducerTest.java index 8b2eff105565f..8283c88562b8d 100644 --- a/components/camel-aws/camel-aws2-rekognition/src/test/java/org/apache/camel/component/aws2/rekognition/Rekognition2ProducerTest.java +++ b/components/camel-aws/camel-aws2-rekognition/src/test/java/org/apache/camel/component/aws2/rekognition/Rekognition2ProducerTest.java @@ -24,8 +24,11 @@ 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.rekognition.model.*; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -496,6 +499,42 @@ public void process(Exchange exchange) { assertEquals("new-job-id", result.jobId()); } + @ParameterizedTest + @CsvSource({ + "direct:associateFacesPojo,associateFaces operation requires AssociateFacesRequest in POJO mode", + "direct:compareFacesPojo,compareFaces operation requires CompareFacesRequest in POJO mode", + "direct:createCollectionPojo,createCollection operation requires CreateCollectionRequest in POJO mode", + "direct:createUserPojo,createUser operation requires CreateUserRequest in POJO mode", + "direct:deleteCollectionPojo,deleteCollection operation requires DeleteCollectionRequest in POJO mode", + "direct:deleteFacesPojo,deleteFaces operation requires DeleteFacesRequest in POJO mode", + "direct:deleteUserPojo,deleteUser operation requires DeleteUserRequest in POJO mode", + "direct:describeCollectionPojo,describeCollection operation requires DescribeCollectionRequest in POJO mode", + "direct:detectFacesPojo,detectFaces operation requires DetectFacesRequest in POJO mode", + "direct:detectLabelsPojo,detectLabels operation requires DetectLabelsRequest in POJO mode", + "direct:detectModerationLabelsPojo,detectModerationLabels operation requires DetectModerationLabelsRequest in POJO mode", + "direct:detectProtectiveEquipmentPojo,detectProtectiveEquipment operation requires DetectProtectiveEquipmentRequest in POJO mode", + "direct:detectTextPojo,detectText operation requires DetectTextRequest in POJO mode", + "direct:disassociateFacesPojo,disassociateFaces operation requires DisassociateFacesRequest in POJO mode", + "direct:getCelebrityInfoPojo,getCelebrityInfo operation requires GetCelebrityInfoRequest in POJO mode", + "direct:getMediaAnalysisJobPojo,getMediaAnalysisJob operation requires GetMediaAnalysisJobRequest in POJO mode", + "direct:indexFacesPojo,indexFaces operation requires IndexFacesRequest in POJO mode", + "direct:listCollectionsPojo,listCollections operation requires ListCollectionsRequest in POJO mode", + "direct:listMediaAnalysisJobsPojo,listMediaAnalysisJobs operation requires ListMediaAnalysisJobsRequest in POJO mode", + "direct:listFacesPojo,listFaces operation requires ListFacesRequest in POJO mode", + "direct:listUsersPojo,listUsers operation requires ListUsersRequest in POJO mode", + "direct:recognizeCelebritiesPojo,recognizeCelebrities operation requires RecognizeCelebritiesRequest in POJO mode", + "direct:searchFacesPojo,searchFaces operation requires SearchFacesRequest in POJO mode", + "direct:searchFacesByImagePojo,searchFacesByImage operation requires SearchFacesByImageRequest in POJO mode", + "direct:searchUsersPojo,searchUsers operation requires SearchUsersRequest in POJO mode", + "direct:searchUsersByImagePojo,searchUsersByImage operation requires SearchUsersByImageRequest in POJO mode", + "direct:startMediaAnalysisJobPojo,startMediaAnalysisJob operation requires StartMediaAnalysisJobRequest 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() { @@ -582,6 +621,60 @@ public void configure() { from("direct:startMediaAnalysisJob") .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=startMediaAnalysisJob") .to("mock:result"); + from("direct:associateFacesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=associateFaces&pojoRequest=true"); + from("direct:compareFacesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=compareFaces&pojoRequest=true"); + from("direct:createCollectionPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=createCollection&pojoRequest=true"); + from("direct:createUserPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=createUser&pojoRequest=true"); + from("direct:deleteCollectionPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=deleteCollection&pojoRequest=true"); + from("direct:deleteFacesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=deleteFaces&pojoRequest=true"); + from("direct:deleteUserPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=deleteUser&pojoRequest=true"); + from("direct:describeCollectionPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=describeCollection&pojoRequest=true"); + from("direct:detectFacesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=detectFaces&pojoRequest=true"); + from("direct:detectLabelsPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=detectLabels&pojoRequest=true"); + from("direct:detectModerationLabelsPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=detectModerationLabels&pojoRequest=true"); + from("direct:detectProtectiveEquipmentPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=detectProtectiveEquipment&pojoRequest=true"); + from("direct:detectTextPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=detectText&pojoRequest=true"); + from("direct:disassociateFacesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=disassociateFaces&pojoRequest=true"); + from("direct:getCelebrityInfoPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=getCelebrityInfo&pojoRequest=true"); + from("direct:getMediaAnalysisJobPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=getMediaAnalysisJob&pojoRequest=true"); + from("direct:indexFacesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=indexFaces&pojoRequest=true"); + from("direct:listCollectionsPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=listCollections&pojoRequest=true"); + from("direct:listMediaAnalysisJobsPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=listMediaAnalysisJobs&pojoRequest=true"); + from("direct:listFacesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=listFaces&pojoRequest=true"); + from("direct:listUsersPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=listUsers&pojoRequest=true"); + from("direct:recognizeCelebritiesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=recognizeCelebrities&pojoRequest=true"); + from("direct:searchFacesPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=searchFaces&pojoRequest=true"); + from("direct:searchFacesByImagePojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=searchFacesByImage&pojoRequest=true"); + from("direct:searchUsersPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=searchUsers&pojoRequest=true"); + from("direct:searchUsersByImagePojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=searchUsersByImage&pojoRequest=true"); + from("direct:startMediaAnalysisJobPojo") + .to("aws2-rekognition://test?awsRekognitionClient=#awsRekognitionClient&operation=startMediaAnalysisJob&pojoRequest=true"); } }; }