Как использовать документ/литерал Soap11 (голое тело) со Spyne (SOAPAction не рассматривается)

Я использую spyne 2.11 с Django 1.4 и пытаюсь эмулировать веб-службу Apache Axis 1.4.

Мой клиент WS - это suds, и я получаю запросы WS с голым телом, т. Е. Аргумент не заключен в сообщение и HTTP-заголовок "SOAPAction".

Хотя я явно указываю _operation_name в декораторе srpc и _body_style='bare', Spyne не распознает операцию. Он по-прежнему пытается получить имя операции от первого дочернего элемента.

Как я могу поручить позвоночнику:

  1. учитывать SOAPHeader как имя_операции
  2. рассмотреть первый дочерний элемент SOAP-Env:Body как аргумент функции/операции?

person erny    schedule 23.11.2015    source источник
comment
Я также пробовал с 2.12.9. Кажется, у него такое же поведение.   -  person erny    schedule 23.11.2015


Ответы (1)


Я нашел следующее решение для этого:

class MySoap11(Soap11):

  def decompose_incoming_envelope(self, ctx, message=XmlDocument.REQUEST):
      res = super(MySoap11, self).decompose_incoming_envelope(ctx, message)
      method = ctx.transport.req['HTTP_SOAPACTION']
      method = method.replace('"', '')
      ctx.method_request_string = method
      return res

Затем используйте «MySoap11» при создании экземпляра приложения, например:

application = Application(..., in_protocol=MySoap11(validator='soft'), ...)

Но мне все еще нужно использовать _body_style='bare' в декораторе sprc, например:

@srpc(
    SomeComplexModel,       # noqa
    _returns=ResponseComplexModel,
    _body_style='bare',
)
def myMethod(param):
    ....

Кажется, это работает с spyne 2.12.11 и 2.11.0.

person erny    schedule 23.11.2015