zoukankan      html  css  js  c++  java
  • python调用hessian

    会查到这篇文章的,相信也不需要我介绍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"
  • 相关阅读:
    Flash代码执行原理与性能优化笔记
    服务器自建git
    列表删除
    mysql的隔离级别实践
    py2和py3的字符编码
    Django外键(ForeignKey)操作以及related_name的作用
    python多个装饰器嵌套
    git diff使用
    .gitignore 只包含几个文件
    三层菜单字典练习
  • 原文地址:https://www.cnblogs.com/walkerwang/p/2118448.html
Copyright © 2011-2022 走看看