Hessian HessianProxy.invoke(HessianProxy.java:197)

Posted 孙晓凯

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hessian HessianProxy.invoke(HessianProxy.java:197)相关的知识,希望对你有一定的参考价值。

今天中午接到一个小需求:一订单系统的小伙伴需要访问我产品中心的一个表,那铁定不能直接读我PC(产品中心)的表啊,于是乎我需要写一个hessian接口给他。一顿神操作,不到十分钟,接口完成,如下所示:

//java bean
public class LogisticsLanguagesTrackingUrl
    int logistics_id;
    int languages_id;
    String pc_url;
    String mobile_url;
    String app_url;
 ...省略set,get,toString方法
 
//接口
public List<LogisticsLanguagesTrackingUrl> getLogisticsLanguagesTrackingUrlByLoidAndLaid(Integer loId, Integer laId)
//实现
@Override
	public List<LogisticsLanguagesTrackingUrl> getLogisticsLanguagesTrackingUrlByLoidAndLaid(Integer loId, Integer laId) throws Exception 
		return productsManager.getLLTU(loId,laId);
	

public List<LogisticsLanguagesTrackingUrl> getLLTU(int lo,int la) throws Exception 
		return productsDao.getLLTU(lo,la);
	

public List<LogisticsLanguagesTrackingUrl> getLLTU(int lo, int la) throws Exception 
		return mapper.getLogisticsLanguagesTBL(lo,la);
	
<select id="getLogisticsLanguagesTBL" resultType="com.litb.pc.common.entity.bean.resource.LogisticsLanguagesTrackingUrl">
		select * from logistics_languages_tracking_url
		where logistics_id = #loId
		and languages_id = #laId;
	</select>

一切都是那么的自然与随意。接下来就是干什么呢?测试?不存在的!直接在群里大吼一声,开发好了,并@订单的小伙伴。

过了大约一分钟吧,订单的小伙伴发回我一串包错信息并附加一个微笑的表情。

com.caucho.hessian.client.HessianConnectionException: 500: java.io.IOException: Server returned HTTP response code: 500 for URL: http://xxx:8083/products.api
	at com.caucho.hessian.client.HessianProxy.invoke(HessianProxy.java:197)
	at com.sun.proxy.$Proxy2.getLogisticsLanguagesTrackingUrlByLoidAndLaid(Unknown Source)

心想这还不简单吗,这不是500了吗,这不是链接异常了吗,那铁定是项目没有部署好呗。再次一顿神操作,依然报同样的错。此时已经意识到事情没有这么简单,先查看整体流程,发现没毛病,然后跟踪代码发现已调用mapper方法,返回Javabean的时候就报错,此时已经百思不得其解,这数据库和hessian链接有啥关系。

然后开始了漫长的查找错误的过程。。。。。

没查到,上个厕所,梳理一下hessian原理。突然恍然大悟,是不是我的Javabean没有序列化,回来一看,果然如此。

改成如下:

public class LogisticsLanguagesTrackingUrl implements Serializable 
    int logistics_id;
    int languages_id;
    String pc_url;
    String mobile_url;
    String app_url;
    

测试通过,一切正常 。
所以说这个原理是有用的,但是只懂原理不实践是屁用没有的,因为你实践的时候不一定能想到原理这档子事。

以上是关于Hessian HessianProxy.invoke(HessianProxy.java:197)的主要内容,如果未能解决你的问题,请参考以下文章

Hessian 2.0 序列化协议 - Hessian 2.0 Serialization Protocol 翻译

Hessian的使用

Hessian的使用

轻量级Rpc框架Hessian学习笔记

Hessian与Webservice的区别

Hessian入门(包括与Spring集成)