PySimpleSoap:如何将complexType作为函数参数传递

时间:2015-06-24 12:39:17

标签: python soap wsdl

我有一个带有一个名为ImportTransportDocument的函数的wsdl文件。 该函数有3个参数,一个会话ID,选项和一个文档。

调用没有选项的函数效果很好,但是当我尝试提交options参数时会抛出异常。

options参数是一个复杂的类型。

我必须以哪种格式提交复杂类型? 我尝试了一个简单的字符串和一本字典而没有成功。

wsdl包含以下信息:

   <element name="ImportTransportDocument">
   <complexType>
    <sequence>
     <element name="sessionid" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
     <element name="options" type="eakte2:transportoption" minOccurs="0" maxOccurs="1" nillable="true"/>
     <element name="base64data" type="xsd:base64Binary" minOccurs="0" maxOccurs="1" nillable="true"/>
    </sequence>
   </complexType>
  </element>
    ....
<complexType name="transportoption">
   <sequence>
     <element name="distribution" type="xsd:string" minOccurs="1" maxOccurs="1"/>
     <element name="dekadenmeldung" type="xsd:string" minOccurs="1" maxOccurs="1"/>
     <element name="storno" type="xsd:string" minOccurs="0" maxOccurs="1" nillable="true"/>
   </sequence>
  </complexType>

调用.help()方法显示

ImportTransportDocument(sessionid =,options = {u'distribution':, u'dekadenmeldung':, u'storno':},base64data =)   - &GT; {u'message':,u'message2':}:

使用

调用该函数
    opt = {'distribution': '', 'dekadenmeldung': 'true', 'storno': 'true'}
    self.result = self.client.ImportTransportDocument(self.session_id, opt, base64.encodestring(doc))

给出以下例外:

 File "/Library/Python/2.7/site-packages/pysimplesoap/client.py", line 181, in <lambda>
return lambda *args, **kwargs: self.wsdl_call(attr, *args, **kwargs)
 File "/Library/Python/2.7/site-packages/pysimplesoap/client.py", line 346, in wsdl_call
return self.wsdl_call_with_args(method, args, kwargs)
 File "/Library/Python/2.7/site-packages/pysimplesoap/client.py", line 367, in wsdl_call_with_args
method, params = self.wsdl_call_get_params(method, input, args, kwargs)
 File "/Library/Python/2.7/site-packages/pysimplesoap/client.py", line 390, in wsdl_call_get_params
raise KeyError('Unhandled key %s. use client.help(method)' % key)
KeyError: u'Unhandled key options. use client.help(method)'

任何提示?

非常感谢, 哈拉尔德

1 个答案:

答案 0 :(得分:1)

I found the solution myself. If a dictionary is passed as a parameter, PySimpleSOAP expects named parameters:

self.result = self.client.ImportTransportDocument(sessionid=self.session_id, options=opt, base64data=base64.encodestring(doc))

Cheers, Harald