浏览 2261 次
锁定老帖子 主题:hessian无法调用远端的重载方法
该帖已经被评为隐藏帖
|
|
---|---|
作者 | 正文 |
发表时间:2008-12-09
最后修改:2008-12-09
这段时间在用hessian,发现无法很好的支持方法重载。原有的程序接口如下。 /** * @author sagahl * */ public interface DisCountService { /**双方验证签名的md5key*/ public String md5key = "xxxxxxxxxxxxx"; /** * 根据xx查询aDiscountQueryVO 查询 * @param DiscountQueryVO aDiscountQueryVO * @param signature --签名 ,对aDiscountQueryVO.userId 进行md5签名 * @return DiscountResultVO * */ public DiscountResultVO getDiscountBy(DiscountQueryVO aDiscountQueryVO,String signature); } 由于业务的需要接口的入参需要更改,但是又需要保留原有的接口方法名。于是定义接口如下: public interface DisCountService { /**双方验证签名的md5key*/ public String md5key = "xxxxxxxxxxxxxxxxxxxxxxxxxx"; /** * @param DiscountQueryVO aDiscountQueryVO * @param signature --签名 ,对aDiscountQueryVO.userId 进行md5签名 * @return DiscountResultVO * */ public DiscountResultVO getDiscountBy(DiscountQueryVO aDiscountQueryVO,String signature); /** * @param DiscountQueryVO aDiscountQueryTwoVO * @param signature --签名 ,对aDiscountQueryVO.userId 进行md5签名 * @return DiscountResultVO * */ public DiscountResultVO getDiscountBy(DiscountQueryTwoVO aDiscountQueryTwoVO,String signature); } 通过不同的入参调用服务端不同的方法。但是发现服务端实现了两个方法,但通过调用 public DiscountResultVO getDiscountBy(DiscountQueryTwoVO aDiscountQueryTwoVO,String signature); 发现在服务端实际调用的还是 public DiscountResultVO getDiscountBy(DiscountQueryVO aDiscountQueryVO,String signature); 让我很疑惑不解。看了hessian的代码后才发现原因。 hessian中HessianSkeleton中的 String methodName = in.readMethod(); Method method = getMethod(methodName); 是最终取得的反射的方法,methodName的值为getDiscountBy。getMethod(methodName)的实现是 protected Method getMethod(String mangledName) { return (Method) _methodMap.get(mangledName); } 而_methodMap的值是接口DisCountService中所有的方法。这个时候后取到的是第一个方法。 以上所述表明,无法调用方法重载的远端服务,至少会有可能不准确。提出的方案是将调用的方法的参数也传到服务端,再通过方法名和参数调用准确的方法。不知道是否合理。 新手发帖请各位指正!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-17
今天遇到同样的问题了,谢谢!
|
|
返回顶楼 | |