首页 > 解决方案 > 使用 Spyne,尝试将生成的多个命名空间压缩到 SOAP 请求中的单个命名空间

问题描述

我有以下 SOAPUI 使用 Spyne 请求的 ComplexModel 方法生成的 SOAP 请求。

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
        xmlns:ava="Namespace-1"
        xmlns:book="spyne.example.django.models">
       <soapenv:Header/>
       <soapenv:Body>
          <ava:GetChangesRequest>
             <book:RequestIds>String1</book:RequestIds>
             <book:From>2019-09-22</book:From>
             <!--Optional:-->
             <book:StartIndex>0</book:StartIndex>
          </ava:GetChangesRequest>
       </soapenv:Body>
    </soapenv:Envelope>

请求的 ComplexModel 如下。

class GetChangesRequest(ComplexModel):
    RequestIds = Unicode.customize(min_occurs=1)
    From = Date.customize(min_occurs=1)
    StartIndex = Integer.customize(default=0, min_occurs=0)

@rpc 定义是

 @rpc(
        GetChangesRequest,
        _returns=GetChangesResponse,
        _in_message_name='GetChangesRequest',
        _out_message_name='GetChangesResponse',
        _body_style='bare',
    )

现在我希望避免在请求中使用这些多个命名空间。

关注这个 Stackoverflow 帖子从 Spyne 响应变量中删除命名空间

并且能够以我想要的方式管理自定义响应。但是无法通过 Spyne 为 SOAP 请求找到任何此类方法。

这里的任何指示都会有所帮助。

标签: pythonpython-3.xsoaprequestspyne

解决方案


您需要让tns传递给应用程序的参数与GetChangesRequest命名空间值相同。

IE

class GetChangesRequest(ComplexModel):
    __namespace__ = 'Namespace-1'

    RequestIds = Unicode.customize(min_occurs=1)
    From = Date.customize(min_occurs=1)
    StartIndex = Integer.customize(default=0, min_occurs=0)

推荐阅读