From ed53c5ea4588c534ad4d2b77dbf7b884a48ee265 Mon Sep 17 00:00:00 2001 From: Soby Chacko Date: Thu, 21 Jul 2022 18:24:23 -0400 Subject: [PATCH] Fix container types for PulsarListener --- .../config/MethodPulsarListenerEndpoint.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/spring-pulsar/src/main/java/org/springframework/pulsar/config/MethodPulsarListenerEndpoint.java b/spring-pulsar/src/main/java/org/springframework/pulsar/config/MethodPulsarListenerEndpoint.java index ac3bf874..8c39760e 100644 --- a/spring-pulsar/src/main/java/org/springframework/pulsar/config/MethodPulsarListenerEndpoint.java +++ b/spring-pulsar/src/main/java/org/springframework/pulsar/config/MethodPulsarListenerEndpoint.java @@ -152,7 +152,7 @@ public class MethodPulsarListenerEndpoint extends AbstractPulsarListenerEndpo final Class type = methodParameter.getParameter().getType(); String typeName = null; - if (type.isAssignableFrom(List.class) || type.isAssignableFrom(Message.class) || type.isAssignableFrom(Messages.class)) { + if (isContainerType(type)) { final ResolvableType resolvableType = ResolvableType.forMethodParameter(methodParameters[0]); final ResolvableType generic = resolvableType.getGeneric(0); if (generic.getRawClass() != null) { @@ -188,9 +188,17 @@ public class MethodPulsarListenerEndpoint extends AbstractPulsarListenerEndpo } private Schema getRequiredSchema(MethodParameter methodParameter, PulsarContainerProperties pulsarContainerProperties) { - final ResolvableType resolvableType = ResolvableType.forMethodParameter(methodParameter); + ResolvableType resolvableType = ResolvableType.forMethodParameter(methodParameter); final Class rawClass = resolvableType.getRawClass(); - return JSONSchema.of(rawClass); + if (rawClass != null && isContainerType(rawClass)) { + resolvableType = resolvableType.getGeneric(0); + } + final Class rawClazz = resolvableType.getRawClass(); + return JSONSchema.of(rawClazz); + } + + private boolean isContainerType(Class rawClass) { + return rawClass.isAssignableFrom(List.class) || rawClass.isAssignableFrom(Message.class) || rawClass.isAssignableFrom(Messages.class); } protected HandlerAdapter configureListenerAdapter(PulsarMessagingMessageListenerAdapter messageListener) {