PySimpleSoap: как передать complexType в качестве параметра функции
У меня есть файл wsdl с функцией с именем ImportTransportDocument. Функция принимает 3 параметра, идентификатор сеанса, параметры и документ.
Вызов функции без параметров работает хорошо, но когда я пытаюсь передать параметр параметров, возникает исключение.
Параметр 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=) -> {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 ответ
Я нашел решение сам. Если в качестве параметра передается словарь, PySimpleSOAP ожидает именованные параметры:
self.result = self.client.ImportTransportDocument(sessionid=self.session_id, options=opt, base64data=base64.encodestring(doc))
Ура, Харальд