升级dubbo2.7.15版本报找不到JSONValidator问题处理

导读:本篇文章讲解 升级dubbo2.7.15版本报找不到JSONValidator问题处理,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

 现象:

由于安全漏洞,升级dubbo 2.7.15版本时,报找不到com/alibaba/fastjson/JSONValidator,导致某个服务无法启动,但有些服务确实正常启动。

具体错误信息如下:

Caused by: java.lang.NoClassDefFoundError: com/alibaba/fastjson/JSONValidator
        at org.apache.dubbo.rpc.cluster.configurator.parser.ConfigParser.isJsonArray(ConfigParser.java:221) ~[dubbo-2.7.15.jar:2.7.15]
        at org.apache.dubbo.rpc.cluster.configurator.parser.ConfigParser.parseConfigurators(ConfigParser.java:47) ~[dubbo-2.7.15.jar:2.7.15]
        at org.apache.dubbo.registry.integration.AbstractConfiguratorListener.genConfiguratorsFromRawRule(AbstractConfiguratorListener.java:78) ~[dubbo-2.7.15.jar:2.7.15]
        at org.apache.dubbo.registry.integration.AbstractConfiguratorListener.initWith(AbstractConfiguratorListener.java:48) ~[dubbo-2.7.15.jar:2.7.15]
        at org.apache.dubbo.registry.integration.RegistryProtocol$ProviderConfigurationListener.<init>(RegistryProtocol.java:753) ~[dubbo-2.7.15.jar:2.7.15]
        at org.apache.dubbo.registry.integration.RegistryProtocol.<init>(RegistryProtocol.java:142) ~[dubbo-2.7.15.jar:2.7.15]
        at org.apache.dubbo.registry.integration.InterfaceCompatibleRegistryProtocol.<init>(InterfaceCompatibleRegistryProtocol.java:38) ~[dubbo-2.7.15.jar:2.7.15]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_251]
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_251]
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_251]
        at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_251]
        at org.apache.dubbo.common.extension.ExtensionLoader.createExtension(ExtensionLoader.java:661) ~[dubbo-2.7.15.jar:2.7.15]

 原因

经过跟踪代码调试,发现问题的关键。
(1)在AbstractConfiguratorListener初始化治理信息时,会调dubbo-admin中治理信息;
(2)如果存在治理规则,会调ConfigParser.isJsonArray方法判断规则是否为JSONArray,其中使用的fastjson的JSONValidator。
(3)而我们的parent-pom排除了fastjson,所以会报错,导致应用无法启动。
(4)2.7.15版本对代码做了升级,如下:
升级dubbo2.7.15版本报找不到JSONValidator问题处理

 

为什么其他服务启动成功了呢?

原因是,我们这个服务之前由于内部测试,在admin中增加了权重规则。 

在应用启动,从ZK中读取/dubbo/config/dubbo/loan-user-account.configurators时,获取到了值,如下
 
configs:
- addresses:
  - *******
  enabled: true
  parameters:
    weight: 0
  side: provider
  type: weight
enabled: false
key: *******
scope: application
 
将规则删除前后,ZK数据变化如下:
 
升级dubbo2.7.15版本报找不到JSONValidator问题处理

 

 升级dubbo2.7.15版本报找不到JSONValidator问题处理

 

然后服务启动成功,这也是为什么其他服务升级没问题,这个服务升级出现问题的原因。 

 

最后的解决办法

方法一:删除admin中的配置,但admin后续使用需要注意,可能应用会起不来。
方法二:增加JSONValidator的门面,替代fastjson。

 

出现问题不可怕,关键是具备势必解决问题的心态和方法。— me 

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/16195.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!