2015-06-24 7 views
0

У меня есть wsdl-файл с функцией ImportTransportDocument. Функция принимает 3 параметра, идентификатор сеанса, параметры и документ.PySimpleSoap: Как передать complexType как параметр функции

Вызов функции без параметров работает хорошо, но когда я пытаюсь отправить параметр 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 =, опции = {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)' 

Любые намеки?

Большое спасибо, Harald

ответ

1

Я нашел решение сам. Если словарь передается в качестве параметра, PySimpleSOAP ожидает именованные параметры:

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

Приветствия, Harald