记录一次Dubbo升级导致的StackOverflowError问题

371

在一次使用中 同时采用了Mybatis plus 和 Dubbo
并且对同一个service进行操作的时候 出现的该问题,初步判定可能是实例化检查 泛型导致重复递归。抛出的StackOverflowError:
image
注:该问题在3.0.11版本未出现

以下为问题复现,部分摘抄自Github上另一位发现问题的兄弟:
https://github.com/apache/dubbo/issues/11560

Environment
Dubbo version: 3.1.x
Operating System version: macOs 13.1
Java version: 1.8

Original class com.baomidou.mybatisplus.extension.conditions.AbstractChainWrapper in mybatis-plus-extension
1.Defines a class like

public abstract class DemoService4<T, R, Param extends DemoService5<T, R, Param>> {
    public DemoService4() {
    }

    public DemoService5<T, R, Param> getWrapper() {
        return null;
    }

}

2.Define another class like

public abstract class DemoService5<T, R, Children extends DemoService5<T, R, Children>> {
}

Actual Behavior
image-1677051174707

image-1677051419843

checkType 陷入了一个递归检查泛形的循环…从而导致了堆栈溢出。

目前已知的解决:
1.将DubboService 与 Mybatis plus 实现的类分开 或者 包装一下;
2.升级版本 3.1.6 关闭检查部分 或者 降版本至3.0.11;
3.等待Dubbo 后续版本迭代。