项目上要开发一个小工具,通过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:\test.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完美解决了传复杂参数的问题。

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

python通过webservice接口实现配置下发的更多相关文章

  1. 用Python写WebService接口并且调用

    一.用ladon框架封装Python为Webservice接口 另用soaplib实现请看:    http://www.jianshu.com/p/ad3c27d2a946 功能实现的同时,希望将接 ...

  2. 用ladon框架封装Python为Webservice接口以及调用接口的方法

    一.用ladon框架封装Python为Webservice接口 功能实现的同时,希望将接口开放给别人,而封装python接口的一个再简单不过的框架Ladon,而且提供不同的协议,包括SOAP和Json ...

  3. 关于python测试webservice接口的视频分享

    现在大公司非常流行用python做产品的测试框架,还有对于一些快速原型产品的开发也好,很好地支持OO编程,代码易读.Python的更新挺快的,尤其是第三方库. 对于测试人员,代码基础薄弱,用pytho ...

  4. webService 接口调用配置

    1.配置XML文件,如果新建一个XML文件需要在applicationContext.xm里面配置一下 <import resource="cxf-client.xml" / ...

  5. python调用webservice接口

    使用suds这个第三方模块 from suds.client import Clienturl = 'http://ip:port/?wsdl'cilent=Client(url)print cile ...

  6. python开发笔记-python调用webservice接口

    环境描述: 操作系统版本: root@9deba54adab7:/# uname -a Linux 9deba54adab7 --generic #-Ubuntu SMP Thu Dec :: UTC ...

  7. Python的Web编程[2] -> WebService技术[0] -> 利用 Python 调用 WebService 接口

    WebService技术 / WebService Technology 1 关于webservice / Constants WebService是一种跨编程语言和跨操作系统平台的远程调用技术. W ...

  8. python测试webservice接口

    1.下载库:https://pypi.python.org/pypi/suds-jurko 2.解压后,进入到解压目录,安装库:python3 setup.py install 3.测试获取手机归属地 ...

  9. python编写webservice接口

    1.pip install suds-jurko 2.pip install client #coding=utf-8 from suds.client import Client class Web ...

随机推荐

  1. bug:翻页

    本章主要分享下,个人测试经历中遇见过的翻页bug 一.列表翻页 1.bug1:去请求翻页page=0,从0页开始算.一般来说page=0 和 page=1的数据是一模一样,所以翻第2页时会发现和第1页 ...

  2. angular指令中@,=,&的区别

    当directive中的scope设置为一个对象的时候,该指令就有了一个独立的作用域,AngularJS提供了一种绑定策略用于隔离作用域和外部作用域进行通信. 1.@(or @attr) 使用@符号可 ...

  3. SE6新特性之集合Set、Map、WeakSet和WeakMap详解

    SE5的时候我们经常用数组或者类数组对象来操作数据,而对于一些使用惯了java之类语言的集合的开发人员来说,总有少了点什么的感觉,SE6提供Set和Map这两个集合.不仅从根本上为一些问题提供了解决方 ...

  4. spark在yarn-cluster模式,错误查找方法

    yarn logs -applicationId application_xxxx_xxx 可选(">exception")

  5. 使用Git 本地代码提交到 GitHub

    第一步:下载Git 工具 在官网下载 https://git-scm.com/ 第二部:注册官方账号 创建一个村代码的仓库 注册地址https://github.com/ 第三部:本地代码 通过Git ...

  6. SQLAlchemy复杂查询

    最近个人用python + flask搞了一个小项目,ORM用到的是SQLAlchemy.   SQLAlchemy的查询方式非常灵活,你所能想像到的复杂SQL 语句,基本上都可以实现.这里简单的总结 ...

  7. Problem F: 多少个最大值?

    Description 输入若干个int类型的整数,求它们的最大值及其个数. Input 输入 若干个int类型的整数,至文件尾为止. Output 输出只有一行:There are # maximu ...

  8. 享受Python和PHP动态类型检查语言的快感

    前言 写这文章的时候特地查了资料,以确保我没有说错关于Python和PHP的类型机制. 所以这里放一张图,关于强弱类型与动态/静态类型检查的区分 从分类上看,PHP属于弱类型语言,而Python属于强 ...

  9. layui + jfinal 实现上传下载

    1.需要把jfinal的环境配置好 2.导入相关的库文件 layui的库文件 就是这两个文件需要导入到自己的页面 注意:jfinal总会把路径拦截,所以需要静态文件处理.本人不太懂.就网上找了下,说w ...

  10. Lucene搜索引擎例子demo

    一.导入相应的jar包 KAnalyzer3.2.0Stable.jar lucene-analyzers-3.0.1.jar lucene-core-3.0.1.jar lucene-highlig ...