spyne中不允许使用encodingStyle属性

时间:2014-07-30 21:00:35

标签: python xml soap wsdl spyne

我试图找出如何使用spyne为这种请求构建一个soap服务:

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:MyService">
<soapenv:Header/>
  <soapenv:Body>
    <urn:test_rpc soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
      <urn:in0>test</urn:in0>
    </urn:test_rpc>
  </soapenv:Body>
</soapenv:Envelope>

我的Testmethod看起来像这样:

@spyne.srpc(Unicode, _return=Result, _in_variable_names={"input": 'in0'}, _body_style='wrapped')
def test_rpc(input):
  return Result()

当我发送请求时,soap服务会回复以下Webfault:

Server raised fault: ':1:0:ERROR:SCHEMASV:SCHEMAV_CVC_COMPLEX_TYPE_3_2_1: Element '{urn:MyService}test_rpc', attribute '{http://schemas.xmlsoap.org/soap/envelope/}encodingStyle': The attribute '{http://schemas.xmlsoap.org/soap/envelope/}encodingStyle' is not allowed.' 

如何在不删除encodingStyle的情况下解决此问题? 简单对象访问协议(SOAP)1.1 W3C注释(http://www.w3.org/TR/2000/NOTE-SOAP-20000508/#_Toc478383495)的4.1.1节注意到“此属性[encodingStyle]可能出现在任何元素上,......”

1 个答案:

答案 0 :(得分:0)

从2.11开始,Spyne不支持encodingStyle属性。

如果你想实现它:

  1. 使spyne.interface.xml_schema生成的XSD适应
  2. 实现一个api,用于为不同的encodingStyle值插入不同的处理器。
  3. 为您需要的encodingStyle值实现不同的处理器。
  4. 如果你想解决它:

    1. 切换到软验证
    2. 根据ctx.in_object活动中ctx.in_document中的信息修改'method_call'
    3. 您可以在http://lists.spyne.io/listinfo/people加入进一步讨论。

      HTH,