Java SDK for DingTalk Stream Mode API, Compared with the webhook mode, it is easier to access the DingTalk platform
9
stars
5
forks
source link
在JDK21情况下,注册lambda声明的OpenDingTalkCallbackListener,发生异常:illegal callback implementation #8
Closed
tonnyp closed 8 months ago
问题现象:
在JDK21版本下,使用lambda方式声明了OpenDingTalkCallbackListener,并在registerCallbackListener的使用的场景,会抛异常com.dingtalk.open.app.api.OpenDingTalkAppException: illegal callback implementation 在JDK8~20版本,不会出现问题。
根因
com.dingtalk.open.app.api.callback.CallbackDescriptor#build 逻辑中调用com.dingtalk.open.app.api.common.LambdaUtils#isLambda判断了callback是否是lambda com.dingtalk.open.app.api.common.LambdaUtils#isLambda 的判断Lambda方法是获取callback的className,判断是否符合正则
.*\$\$Lambda\$[0-9]+/.*
在JDK8~20下,返回的是JdkCheck$$Lambda$14/0x0000007001000a10,正则可以匹配到 但是JDK21变更了className的值,返回内容为JdkCheck$$Lambda/0x0000008801002a00,正则匹配不到
修复
`
`
修改LambdaUtils `
`
1.8之后各个版本的lambda对象obj.getClass().getSimpleName()结果
`
`