Django 如何将Soap11 document/literal(body bare)与Spyne一起使用(未考虑SOAPAction)
我正在Django1.4中使用Spyne2.11,并试图模拟ApacheAxis1.4Web服务 我的WS-client是suds,我接收的WS-requests没有正文,即参数没有包装在in消息和“SOAPAction”http头中 虽然我明确指定了_operation\u name un srpc decorator和_body\u style='bare',但Spyne无法识别该操作。它仍然尝试从元素的第一个子元素获取操作名 我如何指导spine:Django 如何将Soap11 document/literal(body bare)与Spyne一起使用(未考虑SOAPAction),django,web-services,soap,spyne,Django,Web Services,Soap,Spyne,我正在Django1.4中使用Spyne2.11,并试图模拟ApacheAxis1.4Web服务 我的WS-client是suds,我接收的WS-requests没有正文,即参数没有包装在in消息和“SOAPAction”http头中 虽然我明确指定了_operation\u name un srpc decorator和_body\u style='bare',但Spyne无法识别该操作。它仍然尝试从元素的第一个子元素获取操作名 我如何指导spine: 将SOAPHeader作为操作名称考虑在
我找到了以下解决方案:
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 decorator中使用_body_style='bare',例如:
@srpc(
SomeComplexModel, # noqa
_returns=ResponseComplexModel,
_body_style='bare',
)
def myMethod(param):
....
这似乎适用于Spyne2.12.11和2.11.0。我也尝试了2.12.9。它似乎也有同样的行为。