接下来就是我的问题了,希望认真看完我博客的朋友能跟我交流一下,Hessian是基于二进制传输的,很多前辈的示范例子都是在客户端造出一个一模一样的实体就可以接收服务器端的实体,为什么我在C#中可以这样,在java的测试客户端却不能这样呢?
接下来是我的java测试客户端
测试端的domain实体
public class PosInfo implements java.io.Serializable { private static final long serialVersionUID = 8922970610676835938L; private String posid; private String posname; private String lmodifydate; public String getPosid() { return posid; } public void setPosid(String posid) { this.posid = posid; } public String getPosname() { return posname; } public void setPosname(String posname) { this.posname = posname; } public String getLmodifydate() { return lmodifydate; } public void setLmodifydate(String lmodifydate) { this.lmodifydate = lmodifydate; } }
测试客户端创建一个同样的接口
public interface IPosService { public void savePosition(PosVO vo); public void updatePosition(PosVO vo); public PosInfo queryPositionById(String posId); public void deletePosition(String posId); public List queryPositions(); public List find(String arg0); public String test(String s); }
测试端的main方法进行测试
public class TestClient { public static void main(String[] args) throws Exception { // Hessian服务的url String url = "http://localhost:8080/*/remote/HessianService"; // 创建HessianProxyFactory实例 HessianProxyFactory factory = new HessianProxyFactory(); // 获得Hessian服务的远程引用 try { IPosService test = (IPosService) factory.create(IPosService.class, url); System.out.println("下面调用Hessian服务: "); String s=test.test("字符串测试"); System.out.println(s); List list=test.queryPositions(); System.out.println(list.size()); } catch (RuntimeException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 调用远程服务 } }
测试结果
下面调用Hessian服务: 字符串测试成功! 2010-3-26 14:13:52 com.caucho.hessian.io.SerializerFactory getDeserializer 警告: Hessian/Burlap: 'com.*.*.*.domain.PosInfo' is an unknown class in sun.misc.Launcher$AppClassLoader@19821f: java.lang.ClassNotFoundException: com.jdsy.manage.position.domain.PosInfo 17
字符串测试和list的size都能够得到,但是我得不到能和服务器端匹配的Bean,C#中已经实现但java却不行,看了很多别人的讲解,有的朋友也是直接对应就可以了,我不明白我缺失了哪个部分,请朋友们留言指点
最后总结一下:
开始时我遇到spring无法依赖注入dao层调用,提示dao.xxxx()不能调用。
为了这个我用了beanFactory注入,applicationContext注入,都没成功,而当时用get(),set()注入时,struts调用是可以实现的,可以在jsp中做出全查展示,所以我认为不是我的编码问题。
最后搞明白,其实原因是Hessian jar包的版本,我用的是4.0,而我项目中spring的版本却支持不了那么高,换了3.1.6就完全搞定了。
目前我仍在研究阶段,过一阵开始项目可能也就不会再深究了,所以希望大家多看多留言,谢谢。
注:*为公司名和项目名