пена и тег выбора

как сгенерировать запрос к методу с аргументами "выбора"?

часть wsdl по адресу http://127.0.0.1/service?wsdl:

<xs:complexType name="ByA">
<xs:sequence>
...
</xs:sequence>
</xs:complexType>
<xs:complexType name="ByB">
<xs:sequence>
...
</xs:sequence>
</xs:complexType>

<xs:complexType name="GetMethodRequest">
<xs:choice>
<xs:element name="byA" type="s0:ByA" />
<xs:element name="byB" type="s0:ByB" />
</xs:choice>
</xs:complexType>

когда я делаю

from suds.client import Client
client = Client("http://127.0.0.1/service?wsdl")
print client

я понимаю

GetMethod ()

без всяких аргументов.

как я могу вызвать GetMethod с помощью byA или byB?


person Andrey Koltsov    schedule 11.05.2011    source источник


Ответы (3)


Это известная ошибка в пене https://fedorahosted.org/suds/ticket/342.

person Andrey Koltsov    schedule 12.05.2011

Я исправил это так:

class MyPlugin(DocumentPlugin):
    def setChoice(self, context):
        if not context.children:
            return
        for i in context.children:
            if i.name == "choice":
                for j in i.children:
                    i.parent.append(j)
            else:
                self.setChoice(i)

    def parsed(self, context):
        self.setChoice(context.document)


plugin = MyPlugin()
client = Client("http://127.0.0.1/service?wsdl", plugins=[plugin])
person Kedr    schedule 28.12.2015

Трудно понять, не видя всего wsdl, ваша ссылка ведет к вашей локальной машине.

Класс клиента Suds использует в качестве экземпляра класс обслуживания. переменная для взаимодействия с wsdl. Вы пробовали что-то подобное?

from suds.client import Client
client = Client("http://127.0.0.1/service?wsdl")
client.service.GetMethod("byA")

or

client.service.GetMethod("byB")

person supersighs    schedule 11.05.2011
comment
не работает ‹ns1: Body› ‹ns0: GetMethodRequest /› ‹/ ns1: Body› Мыльное тело пусто - person Andrey Koltsov; 11.05.2011
comment
Опять же, не уверен, не увидев wsdl. Описанный мной метод - это то, как suds вызывает методы веб-службы. - person supersighs; 11.05.2011
comment
Я знаю, как вызывать методы пены, я не понимаю, почему пена не показывает аргументы для выбора и не обрабатывает аргументы (тело мыла пусто) - person Andrey Koltsov; 11.05.2011
comment
Эндрю, ты когда-нибудь находил решение? - person trinth; 06.07.2012