首先,这是标题党,问题并不是出现在序列化上,这是报错的一部分:

Caused by: com.alibaba.dubbo.remoting.RemotingException: Failed to send response: Response [id=24, version=2.0.0, status=20, event=false, error=null, result=RpcResult [result=xxxService$7@57e8ec64, exception=null]], cause: java.lang.RuntimeException: Serialized class xxxService must implement java.io.Serializable
Java field: final xxxService xxxService$7.this$0
java.lang.RuntimeException: Serialized class xxxService must implement java.io.Serializable
Java field: final xxxService xxxService$7.this$0
at com.alibaba.com.caucho.hessian.io.JavaSerializer$FieldSerializer.serialize(JavaSerializer.java:315)
at com.alibaba.com.caucho.hessian.io.JavaSerializer.writeInstance(JavaSerializer.java:263)
at com.alibaba.com.caucho.hessian.io.JavaSerializer.writeObject(JavaSerializer.java:227)
at com.alibaba.com.caucho.hessian.io.Hessian2Output.writeObject(Hessian2Output.java:408)
at com.alibaba.dubbo.common.serialize.support.hessian.Hessian2ObjectOutput.writeObject(Hessian2ObjectOutput.java:92)
at com.alibaba.dubbo.rpc.protocol.dubbo.DubboCodec.encodeResponseData(DubboCodec.java:210)

  报了错的是注册给dubbo的service端,代码类似这样(https://github.com/saaavsaaa/warn-report/blob/master/src/test/java/TestObjectInstance.java):

class SService{
public A getA(){
A a = new A(){{setN("dto");}};
return a;
}
} class A{
protected String n; public A(){
n = "a";
} public String getN() {
return n;
} public void setN(String n) {
this.n = n;
}
}
    @Test
public void testSerializ(){
SService s = new SService();
A a = s.getA();
System.out.println(a.getN());
}

  这什么情况,虽然通过dubbo的网络传输是需要序列化的,但是你要我把sevice也实现Serializable是闹哪样,然后紧接着发现了个更奇怪的事:第二行Java field: final xxxService xxxService$7.this$0,哪来的field,哪也没定义过这玩意,怎么还有个this...,当然上面的精简代码是能一眼猜到问题在哪,不过原本的代码好几百行,查的这个费劲,其实看到这个精简代码大家也基本可以猜到问题在哪了:

A a = new A(){{setN("dto");}};

代码改成:

class SService{
public A getA(){
// A a = new A(){{setN("dto");}};
A a = new A();
a.setN("dto");
return a;
}
}

结果就正常了:

==========================================================

咱最近用的github:https://github.com/saaavsaaa

微信公众号:

转载请注明出处

用dubbo时遇到的一个序列化的坑的更多相关文章

  1. 12.源码分析—如何为SOFARPC写一个序列化?

    SOFARPC源码解析系列: 1. 源码分析---SOFARPC可扩展的机制SPI 2. 源码分析---SOFARPC客户端服务引用 3. 源码分析---SOFARPC客户端服务调用 4. 源码分析- ...

  2. java 学习笔记(三)ZooKeeper集群搭建实例,以及集成dubbo时的配置 (转)

    ZooKeeper集群搭建实例,以及集成dubbo时的配置 zookeeper是什么: Zookeeper,一种分布式应用的协作服务,是Google的Chubby一个开源的实现,是Hadoop的分布式 ...

  3. 懂得三境界-使用dubbo时请求超过问题

    引子 刚才下班回家路上,无意中听到大街上放的歌,歌词有这么一句:"毡房外又有驼铃声声响起,我知道那一定不是你".这一句我似乎听懂了歌者的魂牵梦绕和绝望,如果在十年前我大概只能感受出 ...

  4. qt之窗口换肤(一个qss的坑:当类属性发现变化时需要重置qss,使用rcc资源文件)

    1.相关文章 Qt 资源系统qt的moc,uic,rcc命令的使用 2.概要    毕业两年了,一直使用的是qt界面库来开发程序,使用过vs08.10.13等开发工具,并安装了qt的插件,最近在做客户 ...

  5. ios 仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View.

    仿新浪微博 UINavigationController 向左滑动时显示上一个控制器的View. 实现原理,UINavigationController 的 self.view显示时把当前显示的vie ...

  6. L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误(转)

    L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误   错误描述:“ L2TP连接尝试失败,因为安全层在初始化与远程计算机的协商时遇到了一个处理错误” 只有这个没有错误码. ...

  7. PHP进行数据库操作时遇到的一个问题

    PHP进行数据库操作时遇到的一个问题 昨天在进行数据库操作时,遇到了一个问题(用的是 wampserver 环境): <?php $link = @mysqli_connect('localho ...

  8. 启动多个eclipse 时,因为一个另一个启动报错,

    启动多个eclipse 时,因为一个另一个启动报错, 原因: 可能是 有一个 eclipse  中 的 tomcat  配置出错:preference中  tomcat 配置  context dec ...

  9. json 数据类型,后台在组数据时,错一个标点符号,前端都解析不出来。

    json 数据类型,后台在组数据时,错一个标点符号,前端都解析不出来.

随机推荐

  1. ABP文档 - 后台作业和工作者

    文档目录 本节内容: 简介 后台作业 关于作业持久化 创建一个后台作业 在队列里添加一个新作业 默认的后台作业管理器 后台作业存储 配置 禁用作业执行 Hangfire 集成 后台工作者 创建一个后台 ...

  2. ABP文档 - Mvc 视图

    文档目录 本节内容: 简介 AbpWebViewPage 基类 简介 ABP通过nuget包Abp.Web.Mvc集成到Mvc视图里,你可以像往常那样创建常规的视图. AbpWebViewPage 基 ...

  3. Node-Webkit打包

    1.node-webkit是什么? NW.js is an app runtime based on Chromium and node.js. You can write native apps i ...

  4. load和initialize方法

      一.load 方法什么时候调用: 在main方法还没执行的时候 就会 加载所有类,调用所有类的load方法. load方法是线程安全的,它使用了锁,我们应该避免线程阻塞在load方法. 在项目中使 ...

  5. 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?

    引言 你可能听说在Vue.js 2.0已经发布,并且在其中新添加如了一些新功能.其中一个功能就是"Virtual DOM". Virtual DOM是什么 在之前,React和Em ...

  6. 【云知道】究极秒杀Loadrunner乱码

    Loadrunner乱码一击必杀 之前有介绍一些简单的针对Loadrunner脚本或者调试输出内容中乱码的一些设置,但是并没能完全解决一些小伙伴的问题,因为那些设置实在能力有限,还是有很多做不到的事情 ...

  7. 游走 bzoj 3143

    游走(2s 128MB)walk [问题描述] [输入格式] [输出格式] [样例输入] 3 3 2 3 1 2 1 3 [样例输出] 3.333 [样例说明] 题解: 主要算法:贪心:高斯消元: 题 ...

  8. 远程连接mysql 1130错误解决方法

  9. Linux设备管理(四)_从sysfs回到ktype

    sysfs是一个基于ramfs的文件系统,在2.6内核开始引入,用来导出内核对象(kernel object)的数据.属性到用户空间.与同样用于查看内核数据的proc不同,sysfs只关心具有层次结构 ...

  10. KVM安装部署

    KVM安装部署 公司开始部署KVM,KVM的全称是kernel base virtual machine,对KVM虚拟化技术研究了一段时间, KVM是基于硬件的完全虚拟化,跟vmware.xen.hy ...