会查到这篇文章的,相信也不需要我介绍hessian了,只是其于python的实现,在官网上太草率了,甚至没有格式化好,以至于下下来的hessianlib.py根本无法用,好吧,我咬牙格式化好,让代码能跑起来,一切好像正常了,可是我需要的是测试通过hessian传递对象参数,以及传递byte[],这有点棘手了。
发现官网上说了那么一句话,关于hessian的python实现,已经转交给mustaine项目来处理,并且给出了google code地址:http://code.google.com/p/mustaine/
我把项目clone下来,可是居然没跑起来,于是从项目主页https://github.com/bgilmore/mustaine里面又下载了一份,安装,测试通过
url="http://example.com/hession4.0server/remote/helloSpring" proxy=HessianProxy(url) proxy.setName("zhangsan")#设置属性 print proxy.sayHello()#调用方法
接下来是测试如何传递类对象和字节数组,一番折腾后,结果如下:
类对象一直没测试通过,会在序列化的时候报错,希望有高手能讲解序列化类对象然后通过hessian传递的方法,这条路走不通的情况下,联系到上篇文章python使用SUDS调用webservice,中我曾经使用了字典传递类对象,于是一测试,居然通过!
addr={"tel":u"电话","fax":"02788889999","code":"ccc","street":"ddd"} proxy.setAddress(addr) print proxy.getAddress().fax
好了,不纠结这个了,字节数组我测了无穷多方法,都没通过(没文档害人啊!!!),最后在源码的protocol模块里面找到了一个Binary类,居然通过它就把java端需要的byte[]传递过去了
然后是一个小问题,得到的对象是一个Binary对象,并不具有可读性,简单,取该对象的属性value值即可
user={"name":"walker","password":"ppp","address":[addr],"blob":protocol.Binary("中华人民共和国")} proxy.setUser(user) print proxy.getUser().blob.value
需要小注意一下的是address属性,不能直接把addr传进去,而是要包到list里面,同样,取值的时候就要用索引器把它取出来了
顺便演示一下,把一个文件test.jpg通过hessian上传到服务器,再下载回来
url="http://example.com/hession4.0server/remote/helloSpring" proxy=HessianProxy(url) st=StringIO.StringIO() base64.encode(open("test.jpg","rb"), st) user={"name":"walker","password":"ppp","address":[addr],"blob":protocol.Binary(st.getvalue())} proxy.setUser(user) img=proxy.getUser().blob.value base64.decode(StringIO.StringIO(img), open("myjpg.jpg","wb")) print "done"