會查到這篇文章的,相信也不需要我介紹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"