Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >stacktrace: java.lang.ClassCastException: java.util.HashMap cannot be cast to[通俗易懂]

stacktrace: java.lang.ClassCastException: java.util.HashMap cannot be cast to[通俗易懂]

作者头像
全栈程序员站长
发布于 2022-09-30 01:42:25
发布于 2022-09-30 01:42:25
1.5K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

今天线上发了好几封预警邮件,邮件内容如下:

看了下项目报错的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        ApiResult<WithdrawResultDto> withdrawResult = loanApiService.queryWithdrawResult(contractNo);
        WithdrawResultDto withdraw = withdrawResult.getData();

ApiResult 的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class ApiResult<T> implements Serializable {
    private static final long serialVersionUID = 1L;
    private boolean success;
    private String code;
    private String message;
    private String requestId;
    private T data;

    private ApiResult() {
    }
 }

发现逻辑上是完全没有问题的,报错是第二行代码,又看了下日志,终于发现了问题的原因:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[NettyClientWorker-thread-13{New I/O client worker #1-13}]  |-|WARN  |-|2018-12-19T16:42:37.938+08:00  |-|c.a.c.c.h.i.SerializerFactory[652]  |-|Hessian/Burla
p: 'com.xxxx.malm.api.protoss.dto.WithdrawResultDto' is an unknown class in org.springframework.boot.loader.LaunchedURLClassLoader@507b79f7:
java.lang.ClassNotFoundException: com.mljr.malm.api.protoss.dto.WithdrawResultDto  |-|
[DubboServerHandler-10.8.104.106:24475-thread-199]  |-|INFO  |-|2018-12-19T16:42:37.940+08:00  |-|c.m.a.b.a.d.s.i.DeductionServiceImpl[268]  |-|【撤销结
算单】查询数据返回信息:{"code":"0","data":{"payUsStatus":2,"no":"18121710054227356449","withholdingRequire":1,"withdrawType":0,"lendingWay":1
,"withdrawStatus":3},"message":"成功","success":true};业务编号为18121710054227356449  |-|
[DubboServerHandler-10.8.104.106:24475-thread-199]  |-|ERROR  |-|2018-12-19T16:42:37.940+08:00  |-|c.m.a.b.a.d.f.BgisDeductionFacadeImpl[96]  |-|【结算
单撤销】系统异常,异常原因:  |-|
java.lang.ClassCastException: java.util.HashMap cannot be cast to com.xxxx.malm.api.mac.dto.WithdrawResultDto
at com.xxxx.acs.xxxx.apps.deduction.service.impl.DeductionServiceImpl.isCancelByTerm(DeductionServiceImpl.java:273)
at com.xxxx.acs.xxxx.apps.deduction.service.impl.DeductionServiceImpl.cancelDeduction(DeductionServiceImpl.java:245)
at com.xxxx.acs.xxxx.apps.deduction.biz.impl.DeductionBizImpl.cancelDeductionBill(DeductionBizImpl.java:110)
at com.xxxx.acs.xxxx.apps.deduction.facade.BgisDeductionFacadeImpl.cancelDeductionBill(BgisDeductionFacadeImpl.java:88)
at com.alibaba.dubbo.common.bytecode.Wrapper107.invokeMethod(Wrapper107.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:69)
at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:69)
at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:69)
at com.alibaba.dubbo.rpc.filter.AccessLogFilter.invoke(AccessLogFilter.java:154)
at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:69)

前面的warning 信息指出:‘com.xxxx.malm.api.protoss.dto.WithdrawResultDto’ is an unknown class… 后面报 ClassCastException 的却是com.xxxx.malm.api.mac.dto.WithdrawResultDto。

看到这里,我忽然就想到了,应该是其他组的api 中涉及的dto 修改了路径,但是我们用的还是低版本的老路径,在执行下面的代码时,相当于类型的转换(从T到WithdrawResultDto):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
WithdrawResultDto withdraw = withdrawResult.getData();

因为转换的时候涉及到读取对象的全路径,全路径不一致,就报错了。

最后就是我们升级下 调用的 api 的版本,使用新路径就好了?

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月9日 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Dubbo服务提供者发布过程
首先ServiceConfig类拿到对外提供服务的实际类ref(如:HelloServiceImpl),然后通过ProxyFactory类的getInvoker方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成具体服务到Invoker的转化。接下来就是Invoker转换到Exporter的过程。
搜云库技术团队
2019/10/18
5070
dubbo源码学习一:基础知识及使用的相关技术
Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合),我们可以非常容易地通过Dubbo来构建分布式服务,并根据自己实际业务应用场景来选择合适的集群容错模式,这个对于很多应用都是迫切希望的,只需要通过简单的配置就能够实现分布式服务调用,也就是说服务提供方(Provider)发布的服务可以天然就是集群服务。
BUG弄潮儿
2022/06/30
1970
dubbo源码学习一:基础知识及使用的相关技术
dubbo SPI机制源码分析
dubbo是微内核架构,SPI是dubbo的架构根基 什么是微内核?还是开闭原则的应用。把核心流程架构固定,但流程各个节点对重新改进是开放的,也可以说是面下接口编程。具体实现方法就是SPI(servi
技术蓝海
2018/04/26
1.7K0
Java学习笔记——dubbo服务之底层通讯协议Protocol
我们先来找到通讯协议的入口点吧。通过Protocol接口查找通讯协议入口点,我们根据接口的export方法搜索发现入口了,在ServiceConfig的doExportUrlsFor1Protocol方法,如下图:
慕容千语
2019/06/11
1.2K0
Dubbo Filter机制概述
从上文可知,在服务的调用或消费端发送请求命令中,Dubbo引入过滤器链机制来实现功能的包装(或扩展)。Dubbo很多功能,例如泛化调用、并发控制等都是基于Filter机制实现的,系统默认的Filter在/dubbo-rpc-api/src/main/resources/META-INF/dubbo/internal/com.alibaba.dubbo.rpc.Filter文件中定义,内容如下:
丁威
2019/06/10
1.3K0
org.apache.ibatis.exceptions.TooManyResultsException的异常排查过程
在查阅测试环境业务日志中的ERROR级别的日志时,发现了有一个Mybatis相关的异常错误org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 13。
翎野君
2023/05/12
8850
spring-boot-devtools cannot be cast to类型转换异常java.lang.ClassCastException
在使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A。 同一个类如果使用了不同的类加载器,就会产生这样的错误,所以解决方案就是让通用Mapper和实体类使用相同的类加载器即可。 DevTools 默认会对 IDE 中引入的所有项目使用 restart 类加载器,对于引入的 jar 包使用 base 类加载器,因此只要保证通用Mapper的jar包使用 restart 类加载器即可。
小贝壳
2020/03/05
4K0
Dubbo剖析-整体架构分析
工欲善其事,必先利其器,前面通过几篇文章简单的介绍了如何使用Dubbo搭建一个简单的分布式系统,在接下来的的一段时间就来研究Dubbo原理设计,本文作为原理设计的开篇先整体介绍下dubbo的架构。
加多
2018/09/06
8060
Dubbo剖析-整体架构分析
Java8 dubbo 调用 Collectors.toMap代码片发生的异常(IllegalStateException: Duplicate key)
然后,这段代码是被dubbo中的线程执行的,所以,当时只抛了一句话,并没有堆栈信息,后面的日志都没有打印。以至于线程无缘无故后面的都不执行了,线程直接挂掉。
MickyInvQ
2020/09/27
9760
Java8 dubbo 调用 Collectors.toMap代码片发生的异常(IllegalStateException: Duplicate key)
dubbo入门学习
官方网址:http://dubbo.apache.org/zh-cn/index.html
别先生
2019/08/06
9150
dubbo消费方服务调用过程源码分析
dubbo PRC服务调用过程很复杂,这里准备通过分析一个典型rpc方法调用的调用栈来说明调用过程。说它典型,是因为本次分析的调用场景很典型简单 先定义一个接口 public interface DemoService { public String sayHello(String name); } 然后一个服务实现类 public class DemoServiceImpl implements DemoService { public String sayHello(S
技术蓝海
2018/04/26
5.5K4
com.alibaba.dubbo.remoting.TimeoutException: Waiting server-side response timeout 的解决
控制台打印的日志如下 严重: Servlet.service() for servlet [springmvc] in context with path [] threw exception [Request processing failed; nested exception is com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method findAllUser in the service com.bjsxt.dubbo.serv
时间静止不是简史
2020/07/27
9870
Dubbo 报错 Data length too large
39889058 > 39889057 可以发现是生效的,不再爆出异常了 解决方案2: dubbo.properties中添加一行 dubbo.protocol.dubbo.payload=39889058
王小明_HIT
2020/02/17
2.8K0
排查是什么意思_nacos有了为什么要用dubbo
Apache Dubbo是Alibaba开源的高性能RPC框架,在国内有非常多的用户。
全栈程序员站长
2022/08/04
3890
Dubbo RPC在Provider端是如何跑起来的
dubbo RCP请求到达provider后,首先经过数据接收、解码(NettyWokerThread/NioEventLoop),然后传递到RPC后续流程(DubboServerHandler),即filter、service invoke过程,service invoke过程也就是执行真正服务的逻辑,执行完毕后再经过编码作为响应返回给RPC调用者。
luoxn28
2020/07/14
4700
一次线上MySQL死锁告警原因排查
项目场景:一次线上MySQL死锁告警原因排查 最近处理了一次线上数据告警,记录一下。
河岸飞流
2022/05/10
1.8K0
一次线上MySQL死锁告警原因排查
Dubbo源码学习--服务发布(ProxyFactory、Invoker)
本文介绍了Dubbo服务发布的Invoker生成过程,主要包括了Dubbo服务引用的生成、服务发布时生成Invoker、服务调用时生成Invoker以及动态拓展点的实现。此外,还介绍了如何使用Nutz.Dao对服务进行编排,包括服务引用的获取、服务发布和调用等。
YGingko
2017/12/28
2.1K0
Dubbo源码学习--服务发布(ProxyFactory、Invoker)
聊聊dubbo的Filter
dubbo-2.7.2/dubbo-rpc/dubbo-rpc-api/src/main/java/org/apache/dubbo/rpc/Filter.java
code4it
2019/06/17
1.2K0
聊聊dubbo的Filter
dubbo源码之Proxy、Transporter和Exchanger执行过程
解析部分com.alibaba.dubbo.config.spring.schema.DubboBeanDefinitionParser#parse(org.w3c.dom.Element, org.springframework.beans.factory.xml.ParserContext, java.lang.Class, boolean):
山行AI
2019/07/16
3960
dubbo源码之Proxy、Transporter和Exchanger执行过程
当Dubbo遇上Arthas:排查问题的实践
Arthas是Alibaba开源的应用诊断利器,9月份开源以来,Github Star数三个月超过6000。
kirito-moe
2019/11/05
6130
推荐阅读
相关推荐
Dubbo服务提供者发布过程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验