0

我正在将 spyne 2.11 与 Django 1.4 一起使用,并且我正在尝试模拟 Apache Axis 1.4 Web 服务。

我的 WS 客户端是 suds,我正在接收带有裸露主体的 WS 请求,即,参数未包含在消息内和“SOAPAction”http 标头中。

尽管我明确指定了 _operation_name un srpc 装饰器和 _body_style='bare',但 Spyne 无法识别该操作。它仍然尝试从元素的第一个子元素中获取操作名称。

我如何指导脊椎:

  1. 考虑 SOAPHeader 作为 operation_name
  2. 将 SOAP-Env:Body 的第一个孩子视为函数/操作参数?
4

1 回答 1

0

我为此找到了以下解决方案:

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'), ...)

但我仍然必须在 sprc 装饰器中使用 _body_style='bare' ,例如:

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

这似乎适用于 spyne 2.12.11 和 2.11.0。

于 2015-11-23T14:23:02.680 回答