From a2da6d2dc246f07eb7aed440bad2c1ed586d9b91 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fredrik=20Jons=C3=A9n?= Date: Wed, 11 Dec 2024 23:23:32 +0100 Subject: [PATCH] Fix deserializing lists with `@SnsNotificationMessage` (#1282) Fixes #1280 --- .../cloud/sqs/support/converter/SnsMessageConverter.java | 5 ++++- .../integration/SqsMessageConversionIntegrationTests.java | 6 +++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/support/converter/SnsMessageConverter.java b/spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/support/converter/SnsMessageConverter.java index 718c0e65b..3cc3759e6 100644 --- a/spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/support/converter/SnsMessageConverter.java +++ b/spring-cloud-aws-sqs/src/main/java/io/awspring/cloud/sqs/support/converter/SnsMessageConverter.java @@ -72,7 +72,10 @@ private Object fromGenericMessages(List> messages, Class ta Type resolvedType = getResolvedType(targetClass, conversionHint); Class resolvedClazz = ResolvableType.forType(resolvedType).resolve(); - return messages.stream().map(message -> fromGenericMessage(message, resolvedClazz, resolvedType)).toList(); + Object hint = targetClass.isAssignableFrom(List.class) && + conversionHint instanceof MethodParameter mp ? mp.nested() : conversionHint; + + return messages.stream().map(message -> fromGenericMessage(message, resolvedClazz, hint)).toList(); } private Object fromGenericMessage(GenericMessage message, Class targetClass, diff --git a/spring-cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/integration/SqsMessageConversionIntegrationTests.java b/spring-cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/integration/SqsMessageConversionIntegrationTests.java index ef1a4d78b..fb9ad300b 100644 --- a/spring-cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/integration/SqsMessageConversionIntegrationTests.java +++ b/spring-cloud-aws-sqs/src/test/java/io/awspring/cloud/sqs/integration/SqsMessageConversionIntegrationTests.java @@ -275,7 +275,7 @@ static class ResolvesPojoWithNotificationAnnotationListener { @SqsListener(queueNames = RESOLVES_POJO_FROM_NOTIFICATION_MESSAGE_QUEUE_NAME, id = "resolves-pojo-with-notification-message", factory = "defaultSqsListenerContainerFactory") void listen(@SnsNotificationMessage MyEnvelope myPojo) { - Assert.notNull((myPojo).data.firstField, "Received null message"); + assertThat(myPojo.getData().getFirstField()).isEqualTo("pojoNotificationMessage"); logger.debug("Received message {} from queue {}", myPojo, RESOLVES_POJO_FROM_NOTIFICATION_MESSAGE_QUEUE_NAME); latchContainer.resolvesPojoNotificationMessageLatch.countDown(); @@ -286,6 +286,10 @@ void listen(@SnsNotificationMessage List> myPojos) { Assert.notEmpty(myPojos, "Received empty messages"); logger.debug("Received messages {} from queue {}", myPojos, RESOLVES_POJO_FROM_NOTIFICATION_MESSAGE_LIST_QUEUE_NAME); + + for (MyEnvelope myPojo : myPojos) { + assertThat(myPojo.getData().getFirstField()).isEqualTo("pojoNotificationMessage"); + } latchContainer.resolvesPojoNotificationMessageListLatch.countDown(); } }