zoukankan      html  css  js  c++  java
  • python通过webservice接口实现配置下发

    项目上要开发一个小工具,通过webservice接口实现配置下发,考虑到python的第三方库对soap的良好支持,果断决定用python来完成这一使命。

    Python的支持webservice的第三方库是suds,官网上给出了详细用法说明,初始化如下

    from suds.client import Client
    url = 'http://localhost:7080/webservices/WebServiceTestBean?wsdl'
    client = Client(url)
    print client

    打印后可见到wsdl文档的所有方法和数据类型,调用具体方法的操作很简单:

    client.service.methodName()

    然后就和调用普通函数一样的传参和使用函数提供的功能即可。

    使用print client.last_received()函数可以看到收到的soap协议内容

    但实际应用中,碰到了几个问题:

    1、wsdl文档不是放在网络服务端,或为了隐藏wsdl的远程访问地址,把wsdl文档放在本地,对于本地,url处填写的方式为(以放在C盘为例):

    url='file:\c:	est.wsdl'

    2、仅仅调用服务的方法是非常简单,但实际应用中,所用到的方法参数往往非常复杂,有些是自定义的数据类型,类似于结构体,我用到的方法,更离谱的是结构体中还包含自定义数据类型的结构体。直接调用client.service.method来传参数肯定是不行了,参数类型的问题就没法解决。

    怎么办呢?suds提供了非常好的解决办法,使用factory工厂对象来初始化对象实例。使用client.factory.create函数创建对象实例后,直接对实例的参数进行初始化。更详细的说明需参考官方文档,本人使用的代码段贴出如下:

    def structParamSetting(ParamID,ColumnParamID,RowID,ParamValue,OperType):
    ParamItem=client.factory.create('SetParamItem')
    GWParamValue=client.factory.create('ParamValue')
    GWParamValue.ParamID=ParamID
    GWParamValue.ColumnParamID=ColumnParamID
    GWParamValue.RowID=RowID
    GWParamValue.ParamValue=ParamValue
    ParamItem.OperType=OperType
    ParamItem.ValueInfo=GWParamValue
    return ParamItem

    参数结构为ParamItem为自定义数据类型,其中包含ValueInfo和OperType两个字段,ValueInfo又为GWParamValue自定义数据类型,其中包含ParamID,ColumnParamID,RowID,ParamValue这几个字段。

    使用factory完美解决了传复杂参数的问题。

    主要的难点在于这两处,其他的都属于逻辑和算法优化问题,此处不述。

  • 相关阅读:
    za
    分享
    git
    javascript总结
    2019年IT行业的前景如何,JAVA和大数据适合女性么?
    java编程培训都学习哪些内容
    python中如何进行json转化
    Java技术分享:搭建Mybatis-generator工程
    2019年Java技术中当前流行的三大框架
    MySQL在阿里云服务器上的在线安装及配置
  • 原文地址:https://www.cnblogs.com/jingmu/p/8033679.html
Copyright © 2011-2022 走看看