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应用机器学习中的一些技巧

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

[css] 行内元素和块级元素有什么区别,如何相互转换?

[css] 行内元素和块级元素有什么区别,如何相互转换? 一般通过display属性来区分块级元素和行内元素,block代表块级元素,inline代表行内元素。 块级元素: 1、内容独占一行。 2、width和height可以设置。 3、margin和pa…

dubbo源码解析(一)

大家好,我是烤鸭: 今天和大家分享dubbo的源码解析。 1.SPI http://dubbo.apache.org/zh-cn/docs/source_code_guide/dubbo-spi.html介绍: SPI 全称为 Service Provider Interface,是一种服务发现机制。 SPI 的本质是将接口实现类的全限定名配…

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

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

[css] 说说你对低版本IE的盒子模型的理解

[css] 说说你对低版本IE的盒子模型的理解 一个CSS盒子由四部分组成,由内到外依次是:content、padding、border、margin。所谓盒子模型定义的是盒子宽高的计算方法,IE盒子模型的宽高为content、padding、border之和。而W3C盒子的宽高仅为cont…

Alibaba 开源工具 Arthas 使用

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

[css] 你是如何规划响应式布局的?

[css] 你是如何规划响应式布局的? 从项目角度来讲, PC 和 Mobile 是一个项目还是两个项目;从方法流派来讲, 有栅栏布局,固定 viewport,使用 rem/pt/vw 单位,使用定位百分比,修改为 …

Oracle 用户,角色,权限等

权限管理是 Oracle 系统的精华,不同用户登录到同一数据库中,可能看到不同数量的表,拥有不同的权限。Oracle 的权限分为系统权限和数据对象权限,共一百多种,如果单独对用户授权,很囧,有一些用户需…

Java 面试题(4)—— 多线程

Java实现多线程有哪几种方式。 implements Runnable, implements Callable,extends Thread Callable和Future、FutureTask的了解。 Callable和 Future 是juc包下的接口。 Callable 可以异步执行任务,一般和 ExecutorService 的submit方法一起使用。 Future 可以监听…

[css] 如何让大小不同的图片等比缩放不变形显示在固定大小的div里?写个例子

[css] 如何让大小不同的图片等比缩放不变形显示在固定大小的div里?写个例子 图片等比缩放 img{ object-fit: cover/contain;}div宽高比例固定,跟随屏幕变化而变化,利用padding垂直方向的属性来实现个人简介 我是歌谣,欢迎和大家一…

[css] 行内css和important哪个优先级高?

[css] 行内css和important哪个优先级高? !important 将覆盖行内css css优先级:行内css>id选择器(#)>伪类(:)>属性选择器([])>类选择器(.) > 类型选择器(div p a等) > 通用选择器(*)个人简介 我是歌谣,欢迎和大家一起交流…

Password

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

The temporary upload location [/tmp/tomcat.xxx/work/Tomcat/localhost/etc] is not valid

大家好&#xff0c;我是烤鸭: 下面又来踩坑实录了。主要是两个问题&#xff0c;第一是图片上传异常&#xff0c;第二是下载文件异常。其实都是在服务器上写入失败。有的人说是权限问题&#xff0c;但是这个一直没人动过。 由于过年放假&#xff0c;导致测试环境很长时间…

[css] 说说你对前端二倍图的理解?移动端使用二倍图比一倍图有什么好处?

[css] 说说你对前端二倍图的理解&#xff1f;移动端使用二倍图比一倍图有什么好处&#xff1f; 二倍图是指单位面积下设备像素与css像素个数之比为 4 的位图。移动端使用二倍图可以在Retina屏幕下保真展示。个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃…

人生苦短,我用python

0.10 |— 模块1&#xff1a;开发基础(23)0.11 |— 模块2&#xff1a;文件、函数、模块(29)0.12 |— 模块3&#xff1a;OO、网络编程(19)0.13 |— 模块4&#xff1a;并发编程(13)0.14 |— 模块5&#xff1a;Mysql数据库(16)0.15 |— 模块6&#xff1a;web前端开发(34)0.16 |— 模…

spring 多线程 事务 源码解析(一)

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享的是spring 多线程事务源码分析。 环境&#xff1a; spring-jdbc 5.0.4.REALEASE 今天分享一下spring事务的方法&#xff0c;这一篇还没涉及到多线程。 简单说一下doBegin的方法&#xff1a; 强转获取当前的事务对象&#…

[css] 你对视网膜(Retina)分辨率有了解吗?有没有在实际中使用过?

[css] 你对视网膜(Retina)分辨率有了解吗&#xff1f;有没有在实际中使用过&#xff1f; Retina分辨率指的是屏幕的物理分辨率达到了使得人眼难以看到单个物理像素&#xff1b;具体应用应该就是dpr > 1的屏幕适配&#xff0c;需要根据不同dpr给出合适尺寸的图片&#xff1b;…

Java学习之斐波那契数列实现

描述 一个斐波那契序列&#xff0c;F(0) 0, F(1) 1, F(n) F(n-1) F(n-2) (n>2)&#xff0c;根据n的值&#xff0c;计算斐波那契数F(n)&#xff0c;其中0≤n≤1000。 输入 输入数据的第一行为测试用例的个数t&#xff0c;接下来为t行&#xff0c;每行为一个整数n&#x…

[css] 移动端微信页面有哪些兼容性问题及解决方案是什么?

[css] 移动端微信页面有哪些兼容性问题及解决方案是什么&#xff1f; 1.rem方案通过reset js进行适配 2.vw 方案 搭配px to viewport进行适配个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 …

spring 多线程 事务的实际应用场景

大家好&#xff0c;我是烤鸭&#xff1a; 今天分享的是spring 多线程 事务的实际应用场景&#xff1a; 上一篇讲了大概的原理,主要是针对事务的开始和执行过程(数据库链接&#xff0c;隔离级别&#xff0c;threadlocal线程绑定)。https://blog.csdn.net/Angry_Mills/article/…