0

Django 1.4 で spyne 2.11 を使用しており、Apache Axis 1.4 Web サービスをエミュレートしようとしています。

私の WS クライアントは suds で、WS リクエストをベアボディで受信しています。つまり、引数がメッセージ内と「SOAPAction」http ヘッダーでラップされていません。

srpc デコレーターに _operation_name を明示的に指定し、_body_style='bare' を指定しても、Spyne はその操作を認識しません。要素の最初の子から操作名を取得しようとします。

スパインに次のように指示するにはどうすればよいですか。

  1. operation_name として SOAPHeader を考慮する
  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 に答える