From 011870b89091ebd5837c5f83d2d1397d05ba287e Mon Sep 17 00:00:00 2001 From: Timon Back Date: Fri, 3 May 2024 15:22:33 +0200 Subject: [PATCH] fix(core): extract payload in generics from correct index (#743) --- .../common/payload/TypeToClassConverter.java | 2 +- .../payload/TypeToClassConverterTest.java | 19 +++++++++++++++++++ .../src/main/resources/application.properties | 4 +++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/payload/TypeToClassConverter.java b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/payload/TypeToClassConverter.java index 50fcdd568..d00895cb7 100644 --- a/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/payload/TypeToClassConverter.java +++ b/springwolf-core/src/main/java/io/github/springwolf/core/asyncapi/scanners/common/payload/TypeToClassConverter.java @@ -50,7 +50,7 @@ private Class extractActualGenericClass(ParameterizedType parameterType, Stri String typeName = rawParameterTypeName; while (type instanceof ParameterizedType && extractableClassToArgumentIndex.containsKey(typeName)) { - Integer index = extractableClassToArgumentIndex.get(rawParameterTypeName); + Integer index = extractableClassToArgumentIndex.get(typeName); type = ((ParameterizedType) type).getActualTypeArguments()[index]; diff --git a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/TypeToClassConverterTest.java b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/TypeToClassConverterTest.java index dba6ee821..ab2f53b99 100644 --- a/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/TypeToClassConverterTest.java +++ b/springwolf-core/src/test/java/io/github/springwolf/core/asyncapi/scanners/common/payload/TypeToClassConverterTest.java @@ -10,6 +10,7 @@ import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.Collection; +import java.util.HashMap; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -23,6 +24,10 @@ class TypeToClassConverterTest { { SpringwolfConfigProperties properties = new SpringwolfConfigProperties(); properties.setPayload(new SpringwolfConfigProperties.Payload()); + properties + .getPayload() + .setExtractableClasses(new HashMap<>(properties.getPayload().getExtractableClasses())); + properties.getPayload().getExtractableClasses().put(TestClass.CustomPair.class.getName(), 1); typeToClassConverter = new TypeToClassConverter(properties); } @@ -72,6 +77,16 @@ void getPayloadTypeWithMessageOfListOfString() throws NoSuchMethodException { assertThat(result).isEqualTo(String.class); } + @Test + void getPayloadTypeWithMessageOfListOfCustomPair() throws NoSuchMethodException { + Method m = TestClass.class.getDeclaredMethod("consumeWithMessageOfCustomPair", Message.class); + + Class result = typeToClassConverter.extractClass(extractFrom(m)); + + // payload is extracted from the second generic argument + assertThat(result).isEqualTo(Double.class); + } + @Test void getPayloadTypeWithMessageOfString() throws NoSuchMethodException { Method m = TestClass.class.getDeclaredMethod("consumeWithMessageOfString", Message.class); @@ -112,6 +127,8 @@ public void consumeWithMessageOfStringExtends(Message value) { public void consumeWithMessageOfListOfString(Message> value) {} + public void consumeWithMessageOfCustomPair(Message> value) {} + public void consumeWithMessageOfString(Message value) {} public void consumeWithCustomType(MyType value) {} @@ -121,6 +138,8 @@ public MyType(String payload) { super(payload); } } + + public interface CustomPair {} } private Type extractFrom(Method method) { diff --git a/springwolf-examples/springwolf-kafka-example/src/main/resources/application.properties b/springwolf-examples/springwolf-kafka-example/src/main/resources/application.properties index f11ff52dd..89c7ee71d 100644 --- a/springwolf-examples/springwolf-kafka-example/src/main/resources/application.properties +++ b/springwolf-examples/springwolf-kafka-example/src/main/resources/application.properties @@ -36,7 +36,7 @@ springwolf.docket.info.contact.name=springwolf springwolf.docket.info.contact.email=example@example.com springwolf.docket.info.contact.url=https://github.com/springwolf/springwolf-core springwolf.docket.info.license.name=Apache License 2.0 -springwolf.payload.extractable-classes.java.util.List=0 +springwolf.payload.extractable-classes.org.apache.kafka.clients.consumer.ConsumerRecord=1 # Springwolf kafka configuration springwolf.docket.servers.kafka-server.protocol=kafka @@ -53,3 +53,5 @@ springwolf.plugin.kafka.publishing.producer.properties.sasl.mechanism=PLAIN # For debugging purposes logging.level.io.github.springwolf=DEBUG + +