Merge pull request #206 from zhangjidi2016/master
[ISSUE #151] Fix the Infinite loop in DefaultRocketMQListenerContainer
diff --git a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java
index ecf2354..25ec320 100644
--- a/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java
+++ b/rocketmq-spring-boot/src/main/java/org/apache/rocketmq/spring/support/DefaultRocketMQListenerContainer.java
@@ -376,33 +376,33 @@
private Type getMessageType() {
Class<?> targetClass = AopProxyUtils.ultimateTargetClass(rocketMQListener);
- Type[] interfaces = targetClass.getGenericInterfaces();
- Class<?> superclass = targetClass.getSuperclass();
- while ((Objects.isNull(interfaces) || 0 == interfaces.length) && Objects.nonNull(superclass)) {
- interfaces = superclass.getGenericInterfaces();
- superclass = targetClass.getSuperclass();
- }
- if (Objects.nonNull(interfaces)) {
- for (Type type : interfaces) {
- if (type instanceof ParameterizedType) {
- ParameterizedType parameterizedType = (ParameterizedType) type;
- if (Objects.equals(parameterizedType.getRawType(), RocketMQListener.class)) {
- Type[] actualTypeArguments = parameterizedType.getActualTypeArguments();
- if (Objects.nonNull(actualTypeArguments) && actualTypeArguments.length > 0) {
- return actualTypeArguments[0];
- } else {
- return Object.class;
- }
+ Type matchedGenericInterface = null;
+ while (Objects.nonNull(targetClass)) {
+ Type[] interfaces = targetClass.getGenericInterfaces();
+ if (Objects.nonNull(interfaces)) {
+ for (Type type : interfaces) {
+ if (type instanceof ParameterizedType
+ && Objects.equals(((ParameterizedType) type).getRawType(), RocketMQListener.class)) {
+ matchedGenericInterface = type;
+ break;
}
}
}
-
- return Object.class;
- } else {
+ targetClass = targetClass.getSuperclass();
+ }
+ if (Objects.isNull(matchedGenericInterface)) {
return Object.class;
}
+
+ Type[] actualTypeArguments = ((ParameterizedType) matchedGenericInterface).getActualTypeArguments();
+ if (Objects.nonNull(actualTypeArguments) && actualTypeArguments.length > 0) {
+ return actualTypeArguments[0];
+ }
+ return Object.class;
}
+
+
private void initRocketMQPushConsumer() throws MQClientException {
Assert.notNull(rocketMQListener, "Property 'rocketMQListener' is required");
Assert.notNull(consumerGroup, "Property 'consumerGroup' is required");