Serialized class com.xxx.xxxService must implement java.io.Serializable

大家好,我是烤鸭:

    使用dubbo的时候,遇到如下的问题。
    Serialized class com.xxx.xxxService must implement java.io.Serializable

1.  异常

dubbo无论使用哪个协议传递参数的时候,都需要参数实现序列化接口。
所以提示这个很大原因在于传递的参数没有实现序列化,但是一般都提示参数,为什么提示service 没有实现序列化。
以下是我使用test方法时的异常信息。

com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method updateObuStatus in the service com.etc.service.car.RpcEtcCarInfoService. Tried 3 times of the providers [168.1.1.68:20888] (1/1) from the registry 168.1.1.26:2181 on the consumer 192.168.191.1 using the dubbo version 2.6.2. Last error is: Failed to invoke remote method: updateObuStatus, provider: dubbo://168.1.1.68:20888/com.etc.service.car.RpcEtcCarInfoService?anyhost=true&application=etc-highway-card&check=false&default.timeout=600000&dubbo=2.6.2&generic=false&interface=com.etc.service.car.RpcEtcCarInfoService&methods=updateCarStatus,queryCustomerInfoByCar,zolCreditQuery,updateObuStatus&pid=61936&register.ip=192.168.191.1&remote.timestamp=1572940684076&revision=2.2.0&side=consumer&timeout=60000&timestamp=1572998190117, cause: Failed to send message Request [id=2, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=updateObuStatus, parameterTypes=[class com.etc.dto.UpdateObuStatusRequest], arguments=[UpdateObuStatusRequest(carNum=111, vehicleNo=null, vehicleColor=null, tenantId=null, obuActiveTime=null, obuActiveNo=1111, remark=null)], attachments={path=com.etc.service.car.RpcEtcCarInfoService, interface=com.etc.service.car.RpcEtcCarInfoService, version=0.0.0, timeout=60000}]] to /168.1.1.68:20888, cause: Serialized class com.etc.highway.CreditLogServiceTest must implement java.io.SerializableJava field: final com.etc.highway.CreditLogServiceTest com.etc.highway.CreditLogServiceTest$1.this$0at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:102)at com.alibaba.dubbo.rpc.cluster.support.AbstractClusterInvoker.invoke(AbstractClusterInvoker.java:238)at com.alibaba.dubbo.rpc.cluster.support.wrapper.MockClusterInvoker.invoke(MockClusterInvoker.java:75)at com.alibaba.dubbo.rpc.proxy.InvokerInvocationHandler.invoke(InvokerInvocationHandler.java:52)at com.alibaba.dubbo.common.bytecode.proxy13.updateObuStatus(proxy13.java)at com.etc.highway.CreditLogServiceTest.getOfflineDataList(CreditLogServiceTest.java:41)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:498)at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:73)at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83)at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)at org.junit.runners.ParentRunner.run(ParentRunner.java:363)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)at org.junit.runner.JUnitCore.run(JUnitCore.java:137)at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to send message Request [id=2, version=2.0.0, twoway=true, event=false, broken=false, data=RpcInvocation [methodName=updateObuStatus, parameterTypes=[class com.etc.dto.UpdateObuStatusRequest], arguments=[UpdateObuStatusRequest(carNum=111, vehicleNo=null, vehicleColor=null, tenantId=null, obuActiveTime=null, obuActiveNo=1111, remark=null)], attachments={path=com.etc.service.car.RpcEtcCarInfoService, interface=com.etc.service.car.RpcEtcCarInfoService, version=0.0.0, timeout=60000}]] to /168.1.1.68:20888, cause: Serialized class com.etc.highway.CreditLogServiceTest must implement java.io.SerializableJava field: final com.etc.highway.CreditLogServiceTest com.etc.highway.CreditLogServiceTest$1.this$0at com.alibaba.dubbo.remoting.transport.netty.NettyChannel.send(NettyChannel.java:110)at com.alibaba.dubbo.remoting.transport.AbstractClient.send(AbstractClient.java:265)at com.alibaba.dubbo.remoting.transport.AbstractPeer.send(AbstractPeer.java:53)at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeChannel.request(HeaderExchangeChannel.java:115)at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeClient.request(HeaderExchangeClient.java:90)at com.alibaba.dubbo.rpc.protocol.dubbo.ReferenceCountExchangeClient.request(ReferenceCountExchangeClient.java:83)at com.alibaba.dubbo.rpc.protocol.dubbo.DubboInvoker.doInvoke(DubboInvoker.java:95)at com.alibaba.dubbo.rpc.protocol.AbstractInvoker.invoke(AbstractInvoker.java:148)at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)at com.alibaba.dubbo.rpc.protocol.dubbo.filter.FutureFilter.invoke(FutureFilter.java:54)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)at com.alibaba.dubbo.rpc.filter.ConsumerContextFilter.invoke(ConsumerContextFilter.java:48)at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:72)at com.alibaba.dubbo.rpc.listener.ListenerInvokerWrapper.invoke(ListenerInvokerWrapper.java:77)at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:56)at com.alibaba.dubbo.rpc.cluster.support.FailoverClusterInvoker.doInvoke(FailoverClusterInvoker.java:78)... 35 more
Caused by: java.lang.RuntimeException: Serialized class com.etc.highway.CreditLogServiceTest must implement java.io.SerializableJava field: final com.etc.highway.CreditLogServiceTest com.etc.highway.CreditLogServiceTest$1.this$0at com.alibaba.com.caucho.hessian.io.JavaSerializer$FieldSerializer.serialize(JavaSerializer.java:300)at com.alibaba.com.caucho.hessian.io.JavaSerializer.writeInstance(JavaSerializer.java:280)at com.alibaba.com.caucho.hessian.io.JavaSerializer.writeObject(JavaSerializer.java:247)at com.alibaba.com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:391)at com.alibaba.dubbo.common.serialize.hessian2.Hessian2ObjectOutput.writeObject(Hessian2ObjectOutput.java:88)at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.encodeRequestData(DubboCodec.java:176)at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encodeRequest(ExchangeCodec.java:234)at com.alibaba.dubbo.remoting.exchange.codec.ExchangeCodec.encode(ExchangeCodec.java:71)at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCountCodec.encode(DubboCountCodec.java:38)at com.alibaba.dubbo.remoting.transport.netty.NettyCodecAdapter$InternalEncoder.encode(NettyCodecAdapter.java:80)at org.jboss.netty.handler.codec.oneone.OneToOneEncoder.handleDownstream(OneToOneEncoder.java:66)at com.alibaba.dubbo.remoting.transport.netty.NettyHandler.writeRequested(NettyHandler.java:98)at org.jboss.netty.channel.Channels.write(Channels.java:611)at org.jboss.netty.channel.Channels.write(Channels.java:578)at org.jboss.netty.channel.AbstractChannel.write(AbstractChannel.java:251)at com.alibaba.dubbo.remoting.transport.netty.NettyChannel.send(NettyChannel.java:100)... 51 more
Caused by: java.lang.IllegalStateException: Serialized class com.etc.highway.CreditLogServiceTest must implement java.io.Serializableat com.alibaba.com.caucho.hessian.io.SerializerFactory.getDefaultSerializer(SerializerFactory.java:395)at com.alibaba.com.caucho.hessian.io.SerializerFactory.getSerializer(SerializerFactory.java:369)at com.alibaba.com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:389)at com.alibaba.com.caucho.hessian.io.JavaSerializer$FieldSerializer.serialize(JavaSerializer.java:298)... 66 more

2.  分析

极大的可能在于service用了rpc中的request对象构建了匿名内部类
所以提示  Java field: final xxx.this$0
JDK8 以后,匿名内部类默认用 final 修饰。
这个 UpdateObuStatusRequest 是本来rpc-api的jar中的需要传参数的对象,错误代码如下,但是在调用的时候,使用了匿名内部类。

    @Autowiredprivate RpcEtcCarInfoService rpcEtcCarInfoService;@Testpublic void test() throws InterruptedException {// 2.通知teacherUpdateObuStatusRequest updateObuStatusRequest = new UpdateObuStatusRequest() {{this.setCarNum("111");this.setObuActiveNo("1111");}};ExterResponse exterResponse = rpcEtcCarInfoService.updateObuStatus(updateObuStatusRequest);System.out.println(JSON.toJSONString(exterResponse));}

跟了下源码,可以看到的是。在使用netty进行 消息发送的时候,对参数进行序列化,用反射获取的是匿名内部类的对应的当前类的对象。刚调用 send 方法的时候,看到的request 对象的参数是对的。

进行序列化的时候。发现这个object是当前测试类的对象。

好吧,下次注意。另外不建议匿名内部类的写法

由于创建的对象用final 修饰后,直接进入了常量池,生存时间不再和调用方法是一样的,容易造成 leak memory(内存泄露)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CS229 7.1应用机器学习中的一些技巧

本文所讲述的是怎么样去在实践中更好的应用机器学习算法,比如如下经验风险最小化问题: 当求解最优的 后,发现他的预测误差非常之大,接下来如何处理来使得当前的误差尽可能的小呢?这里给出以下几个选项,下面…

8号团队-团队任务三:每日立会(2018-11-27)

团队信息: 1.团队序号 8 2.开发软件 飞机大战 3.今日整理人:徐浩茗 职位:项目经理 学号:2016035107247 4.本次团队会议共有8人参加 无缺席 团队汇报: (截图)如下 . 4.燃尽图 5.本次会议中遇…

Alibaba 开源工具 Arthas 使用

大家好,我是烤鸭: 很长时间没更新了,最近太忙了,只能抽空水点文章了,今天给大家介绍的是阿里的开源工具 Arthas 的使用。 1. 开源地址 Arthas 是Alibaba开源的Java诊断工具 https://github.com/alibaba/arthas 中文说…

Password

题目 题解 由打表得对于任意\(i \geq 1\)&#xff0c;都有第\(i1\)行和第\(i3\)行相等、 于是我们可以分块维护一下。 然后做完了。 代码 #include <iostream> #include <cstdlib> #include <cstdio> #include <cstring> #include <algorithm>us…

[maven] springboot将jar包打包到指定目录

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下springboot将jar包打包到指定目录下。 由于之前上线都是一个打包到一个jar&#xff0c;由于服务多了&#xff0c;1个包100多M&#xff0c;哪怕是小版本上线都需要重新上传jar包。 1.目的 将不常用的比如spring,druid等不常…

springboot启动后卡住 无日志的几种情况

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下springboot启动后无日志的问题。 1.场景复现 springboot项目启动后卡住无日志&#xff0c;肯定是报错了或者其他原因&#xff0c;并且日志没有打印出来。 1.1 说一下比较通用常见的场景。 检查一下 是否 exc…

VMware下Centos7快速搭建vsftpd

最简单快捷的实现ftp的功能,不考虑安全问题. 1.配置防火墙和selinux vi /etc/selinux/config # This file controls the state of SELinux on the system. # SELINUX can take one of these three values: # enforcing - SELinux security policy is enforced. # per…

PMP读书笔记(第1章)

大家好&#xff0c;我是烤鸭&#xff1a;     今天做一个PMP的读书笔记。 第一章 引论1.1 概述指南和目的1.1.1 项目管理标准1.1.2 通用词汇1.1.3 道德与专业行为规范1.2 概述指南和目的1.2.1 项目1.2.2 项目管理的重要性1.2.3 项目、项目集、项目组合以及运营管理之间的关…

PMP读书笔记(第2章)

大家好&#xff0c;我是烤鸭&#xff1a;     今天做一个PMP的读书笔记。 第二章 项目运行环境2.1 概述2.2 事业环境因素2.2.1 组织内部的事业环境因素2.2.2 组织外部的事业环境因素2.3 组织过程资产2.3.1 过程、政策和程序2.3.2 组织知识库2.4 组织系统2.4.1 概述2.4.2 组…

do文件的编写(转)

以前在使用ModelSim进行仿真的时候&#xff0c;一直是使用其GUI进行操作的&#xff0c;但是这样很繁琐也很费时。故希望学习其自动化仿真do文件&#xff0c;下面是学习的一些总结。 一、编写基本的do文件 下面按照实际仿真的步骤来说明do文件中需要用到的各个tcl命令。 1、quit…

PMP读书笔记(第4章)

大家好&#xff0c;我是烤鸭&#xff1a;     今天做一个PMP的读书笔记。 第四章 项目整合管理概述项目整合管理的核心概念项目整合管理的发展趋势和新兴实践裁剪时需要考虑的因素在敏捷或适应型环境中需要考虑的因素4.1 制定项目章程4.1.1 制定项目章程&#xff1a;输入4.…

php中foreach循环遍历二维数组

最近在用tp3.2框架&#xff0c;在查询的时候用到了select()&#xff0c;这条语句返回的是二维数组&#xff0c;所以在对返回的数据做处理时&#xff0c;遇到了些麻烦&#xff0c;百度了下foreach&#xff0c;终于用foreach解决了数据的筛选问题 &#xff08;因为不知道该怎么设…

PMP读书笔记(第6章)

大家好&#xff0c;我是烤鸭&#xff1a;     今天做一个PMP的读书笔记。 第六章 项目进度管理项目进度管理项目进度管理的核心概念项目进度管理的发展趋势和新兴实践裁剪考虑因素关于敏捷/适应型环境的考虑因素6.1 规划进度管理6.1.1 规划进度管理&#xff1a;输入6.1.1.1…

connect ECONNREFUSED 151.101.0.133:443 | spawn xxx ENOENT

大家好&#xff1a; 我是烤鸭&#xff0c;今天分享一个node项目打包失败的问题。 1. 问题复现 之前一直出现node项目打包失败的情况&#xff0c;使用测试环境的jenkins没问题&#xff0c;生产的有问题。基本可以排除代码层面的问题。 报错信息如图。另外说一下出现了 con…

Python(八) 函数、模块

函数 定义函数 1、意义&#xff1a;函数是实现某个功能的一些代码&#xff0c;提高代码的复用性。 2、定义:用def关键字定义函数&#xff0c; 3、函数组成&#xff1a;函数由函数名、形参、函数体、调用函数&#xff08;里面会有函数体&#xff09;组成 4、要使用函数&#xff…

PMP读书笔记(第7章)

大家好&#xff0c;我是烤鸭&#xff1a;     今天做一个PMP的读书笔记。 第七章 项目成本管理项目成本管理项目成本管理的核心概念项目成本管理的趋势和新兴实践裁剪考虑因素关于敏捷/适应型环境的考虑因素7.1 规划成本管理7.1.1 规划成本管理&#xff1a;输入7.1.1.1 项目…

PMP 第六版 p25 矩阵图 方便记忆 口诀

大家好&#xff0c;我是烤鸭&#xff1a;     这是我第六版PMP矩阵图和自己总结的方便记忆的方法。 记忆方法&#xff1a; 首先是6大管理过程&#xff0c;10大知识领域。这个需要背下来。 过程&#xff1a;启动-规划-执行-监控-收尾 知识领域&#xff1a;整合-范围-进度-…

IntelliJ Idea注释模板--类注释、方法注释

刚从Eclipse切换到IntelliJ Idea&#xff0c;之前使用eclipse时用到了注释模板&#xff0c;包括类注释和方法注释&#xff0c;现在分别讲一下在Intellij Idea中如何进行配置&#xff0c;作为备忘 一. 类注释模板配置 1. 配置效果 2. 配置方法 【File】-->【settings】-->…

maven 关于使用 snapshot 的坑

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享一下maven项目引入"快照"版依赖的问题。 1. snapshot 和 realease 顾名思义 就是 快照和稳定版。快照是不稳定的开发版本&#xff0c;不定时更新。稳定版不会有这个问题。 不定时更新有什么危害。 maven install…

PMP读书笔记(第11章)

大家好&#xff0c;我是烤鸭&#xff1a;     今天做一个PMP的读书笔记。 第十一章 项目风险管理项目风险管理项目风险管理的核心概念项目风险管理的趋势和新兴实践裁剪考虑因素在敏捷或适应型环境中需要考虑的因素11.1 规划风险管理11.1.1 规划风险管理&#xff1a;输入11…