Dubbo: Dubbo为什么总是报 java.util.List cannot be assigned from null 这个错误

Created on 22 Jun 2016  ·  4Comments  ·  Source: apache/dubbo

问题描述:
使用hibernate 查询结果集,对象中存在@onetoMany 的情况,使用lazy模式或者eager模式加载
在执行过程中sql都能完整的执行,而最终报异常的地方都是在com.alibaba.com.caucho.hessian.io.CollectionDeserializer.readLengthList这个地方
hibernate异常为failed to layzily initialize a collection ,no sesssion or session was closed

typquestion & discussion

All 4 comments

dubbo是远程调用 把对象组装好传输POJO 不要把Hibernate返回的对象直接用于传输
如果非要如此, 可以试试用JSON序列化/反序列化

特别是provider代码如果用到guava的lazy的集合视图,返回给调用方,会出现类似的反序列化失败的问题。因为延迟的集合实现,可能在consumer端压根不存在。

在for循环中调用,客户端四次请求,三次请求成功,一次序列化失败,数据都一样的,单个请求就没事,这个我很诧异

这是hessian序列化问题,准确说是因为使用了hibernate,hibernate一对多、多对多等不是原生的List/Set

解决方案:

  1. 不直接传输hibernate对象(POJO)
  2. 非要传输参见 #146
Was this page helpful?
0 / 5 - 0 ratings