dubbo版本2.5.4

dubbo开启消费端参数校验时,validation = "true"

会报如下异常:

[CurrentUser(userId=200887212, username=15210165164)] [http-nio-8837-exec-9] [WARN ] [com.alibaba.dubbo.validation.support.jvalidation.JValidator] warn 62 -  [DUBBO] net.wecash.postloan.core.service.PLRepaymentPlanService_GetRepaymentPlanByOrderIdParameter: frozen class (cannot edit), dubbo version: 2.5.4, current host: 10.41.42.56 java.lang.RuntimeException: net.wecash.postloan.core.service.PLRepaymentPlanService_GetRepaymentPlanByOrderIdParameter: frozen class (cannot edit)

该问题在升级的dubbo版本中得到了解决 目前可用dubbo版本 2.7.2

同问题链接:https://github.com/apache/dubbo/issues/796

问题描述

使用Spring Boot构建web app,Controller中通过dubbo消费端远程调用服务端,使用注解进行参数校验,如getName(@NotNull String id)。
在调用过程中始终报错:

java.lang.RuntimeException: XXXService_GetNameParameter: frozen class (cannot edit)
at javassist.ClassPool.checkNotFrozen(ClassPool.java:617) ~[javassist-3.21.0-GA.jar:?]
at javassist.ClassPool.makeClass(ClassPool.java:859) ~[javassist-3.21.0-GA.jar:?]
at javassist.ClassPool.makeClass(ClassPool.java:836) ~[javassist-3.21.0-GA.jar:?]
at com.alibaba.dubbo.validation.support.jvalidation.JValidator.getMethodParameterBean(JValidator.java:166)

问题分析

  1. 初步判断和dubbo版本无关,应该是一个bug。报错的原因是再次尝试查找动态生成的类时,应该能找到,实际上因为classloader的原因无法找到。即com.alibaba.dubbo.validation.support.jvalidation.JValidator第163行:
    parameterClass = (Class<?>) Class.forName(parameterClassName, true, clazz.getClassLoader());
    这里应该能够找到parameterClass,而不是再次抛出ClassNotFoundException。
  2. 出现ClassNotFoundException的原因,是由于在生成参数类XXXService_GetNameParameter的时候,没有传入该参数的接口的classLoader(即clazz.getClassLoader),而是使用了默认的Context ClassLoader。
  3. 建议修改JValidator第202行为:
    parameterClass = ctClass.toClass(clazz.getClassLoader(), null);传入接口的classLoader,保证其一致性。

老版本dubbo此处代码:

parameterClass = ctClass.toClass();

新版本dubbo 此处的代码:

parameterClass = ctClass.toClass(clazz.getClassLoader(), (ProtectionDomain)null);

Dubbo遇到的异常-frozen class (cannot edit)相关推荐

  1. dubbo服务RpcException异常:Tried 3 times of the providers 或com.alibaba.dubbo.remoting.TimeoutException

    dubbo服务RpcException异常:Tried 3 times of the providers 或com.alibaba.dubbo.remoting.TimeoutException 参考 ...

  2. JMeter中添加dubbo相关插件异常问题解决

    从网上下载了一个dubbo的插件,然后放到JMeter的/lib/ext目录下: 然后启动直接异常 发现启动不了,然后下载了一个全新的JMeter3.2将dubbo插件放到同样的目录,启动,没有问题: ...

  3. 【Dubbo】序列化异常—— com.esotericsoftware.kryo.KryoException: Buffer underflow

    Dubbo服务通常依赖一个jar包来表示服务签名,其中包含了服务的接口定义. 服务的提供者(服务端)需实现这些接口: 服务的调用者(客户端)可以通过这些接口调用服务. 问题 此文提到的异常 " ...

  4. com.alibaba.dubbo.remoting.TimeoutException异常的解决方法

    今天写商品分类和规格使用redis进行缓存的时候碰到一个头疼的BUG,早上刚开机的时候运行没有任何问题,电脑运行的东西多了之后,突然就给我报了个bug,头疼了一下午,后来找到个大牛解决了,原来是调用S ...

  5. frozen class (cannot edit)

    跑应用程序时除了这个错,具体来说我是加载swagger的apiReader时报的错,网上找了一下没有类似的错,推测是找不到类的关系,去target目录看了一下,果然没有生成相应的class文件,于是删 ...

  6. apache dubbo 自定义全局统一的异常处理器

    项目使用过的是apache dubbo 2.7.1, 封装了自定义全局统一的异常处理器. 统一异常处理器 需要实现javax.ws.rs.ext.ExceptionMapper接口. import o ...

  7. 面试官问我,使用Dubbo有没有遇到一些坑?我笑了。

    作者:肥朝 来自:feichao_java 前言 17年的时候,因为一时冲动没把持住(当然最近也有粉丝叫我再冲动一把再更新一波),结合面试题写了一个系列的Dubbo源码解析.目前公众号大部分粉丝都是之 ...

  8. dubbo超时重试和异常处理

    dubbo超时重试和异常处理 参考: https://www.cnblogs.com/ASPNET2008/p/7292472.html https://www.tuicool.com/article ...

  9. Dubbo自定义异常message过长解决

    title: Dubbo自定义异常message过长解决 tags: dubbo exception message attachment encode categories: dubbo date: ...

最新文章

  1. MySQL 用 limit 为什么会影响性能?
  2. python如何使用ppip安装xlwt_Python中xlrd和xlwt模块使用方法
  3. Android Studio 3.5 Canary 12 发布
  4. java gson 工具类_gson工具类将Java类转换为json的使用
  5. mysql @value := 用法
  6. C++ Primer 5th笔记(chap 17 标准库特殊设施)控制输入格式
  7. 阿里PK拼多多-万祥军:丰收节交易会电商谋定农产品市场
  8. tbase同步mysql_mysql主从同步
  9. 如何修复 WordPress 中的 HTTP 错误
  10. 稀疏矩阵的加,减,乘,转置
  11. “MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。”的解决方案
  12. javascript的caller,callee,call,apply
  13. 平面设计计算机基本配置,平面设计电脑配置要求
  14. “传递关爱 感恩社会” ——美斯坦福2017年捐资助学仪式隆重举行
  15. 程序设计 :题解+总结
  16. 域服务器性能要求,ad域服务器配置要求
  17. magisk卸载内置软件_Win10自带软件怎么卸载 Win10自带软件卸载方法【详细教程】...
  18. 2023年全国最新工会考试精选真题及答案43
  19. html字体标签设计,36个重要的HTML标签
  20. 马斯克推荐的「50种认知偏差」,这是我见过的最爆笑的解读!

热门文章

  1. iTween基础之功能简介及插件下载
  2. 洛谷P2658 汽车拉力比赛
  3. Libtool library used but ‘LIBTOOL‘ is undefined
  4. 《NFL橄榄球》:印第安纳波利斯小马·橄榄1号位
  5. 美国访问学者生活中有哪些饮食文化特点?
  6. php 7编译 phar,解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory...
  7. 学习C语言时候的代码
  8. 小米支付Java高级工程师面试
  9. 2021泰迪杯数据分析技能赛B题-肥料登记数据分析
  10. java断言有什么用_Java断言及使用