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) {