Dubbo遇到的异常-frozen class (cannot edit)
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)
问题分析
- 初步判断和dubbo版本无关,应该是一个bug。报错的原因是再次尝试查找动态生成的类时,应该能找到,实际上因为classloader的原因无法找到。即com.alibaba.dubbo.validation.support.jvalidation.JValidator第163行:
parameterClass = (Class<?>) Class.forName(parameterClassName, true, clazz.getClassLoader());
这里应该能够找到parameterClass,而不是再次抛出ClassNotFoundException。 - 出现ClassNotFoundException的原因,是由于在生成参数类XXXService_GetNameParameter的时候,没有传入该参数的接口的classLoader(即clazz.getClassLoader),而是使用了默认的Context ClassLoader。
- 建议修改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)相关推荐
- 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 参考 ...
- JMeter中添加dubbo相关插件异常问题解决
从网上下载了一个dubbo的插件,然后放到JMeter的/lib/ext目录下: 然后启动直接异常 发现启动不了,然后下载了一个全新的JMeter3.2将dubbo插件放到同样的目录,启动,没有问题: ...
- 【Dubbo】序列化异常—— com.esotericsoftware.kryo.KryoException: Buffer underflow
Dubbo服务通常依赖一个jar包来表示服务签名,其中包含了服务的接口定义. 服务的提供者(服务端)需实现这些接口: 服务的调用者(客户端)可以通过这些接口调用服务. 问题 此文提到的异常 " ...
- com.alibaba.dubbo.remoting.TimeoutException异常的解决方法
今天写商品分类和规格使用redis进行缓存的时候碰到一个头疼的BUG,早上刚开机的时候运行没有任何问题,电脑运行的东西多了之后,突然就给我报了个bug,头疼了一下午,后来找到个大牛解决了,原来是调用S ...
- frozen class (cannot edit)
跑应用程序时除了这个错,具体来说我是加载swagger的apiReader时报的错,网上找了一下没有类似的错,推测是找不到类的关系,去target目录看了一下,果然没有生成相应的class文件,于是删 ...
- apache dubbo 自定义全局统一的异常处理器
项目使用过的是apache dubbo 2.7.1, 封装了自定义全局统一的异常处理器. 统一异常处理器 需要实现javax.ws.rs.ext.ExceptionMapper接口. import o ...
- 面试官问我,使用Dubbo有没有遇到一些坑?我笑了。
作者:肥朝 来自:feichao_java 前言 17年的时候,因为一时冲动没把持住(当然最近也有粉丝叫我再冲动一把再更新一波),结合面试题写了一个系列的Dubbo源码解析.目前公众号大部分粉丝都是之 ...
- dubbo超时重试和异常处理
dubbo超时重试和异常处理 参考: https://www.cnblogs.com/ASPNET2008/p/7292472.html https://www.tuicool.com/article ...
- Dubbo自定义异常message过长解决
title: Dubbo自定义异常message过长解决 tags: dubbo exception message attachment encode categories: dubbo date: ...
最新文章
- MySQL 用 limit 为什么会影响性能?
- python如何使用ppip安装xlwt_Python中xlrd和xlwt模块使用方法
- Android Studio 3.5 Canary 12 发布
- java gson 工具类_gson工具类将Java类转换为json的使用
- mysql @value := 用法
- C++ Primer 5th笔记(chap 17 标准库特殊设施)控制输入格式
- 阿里PK拼多多-万祥军:丰收节交易会电商谋定农产品市场
- tbase同步mysql_mysql主从同步
- 如何修复 WordPress 中的 HTTP 错误
- 稀疏矩阵的加,减,乘,转置
- “MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。”的解决方案
- javascript的caller,callee,call,apply
- 平面设计计算机基本配置,平面设计电脑配置要求
- “传递关爱 感恩社会” ——美斯坦福2017年捐资助学仪式隆重举行
- 程序设计 :题解+总结
- 域服务器性能要求,ad域服务器配置要求
- magisk卸载内置软件_Win10自带软件怎么卸载 Win10自带软件卸载方法【详细教程】...
- 2023年全国最新工会考试精选真题及答案43
- html字体标签设计,36个重要的HTML标签
- 马斯克推荐的「50种认知偏差」,这是我见过的最爆笑的解读!
热门文章
- iTween基础之功能简介及插件下载
- 洛谷P2658 汽车拉力比赛
- Libtool library used but ‘LIBTOOL‘ is undefined
- 《NFL橄榄球》:印第安纳波利斯小马·橄榄1号位
- 美国访问学者生活中有哪些饮食文化特点?
- php 7编译 phar,解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory...
- 学习C语言时候的代码
- 小米支付Java高级工程师面试
- 2021泰迪杯数据分析技能赛B题-肥料登记数据分析
- java断言有什么用_Java断言及使用