从 spyne wsdl 输入和输出中删除外标签

问题描述

我正在使用 spyne 创建我的网络服务。

#urls.py
urlpatterns = [

    url(
        r'^InventoryService.wsdl',DjangoView.as_view(
            name="InventoryService",services=[InventoryService],tns='InventoryService',in_protocol=Soap12(validator='lxml'),out_protocol=Soap12(),cache_wsdl=False
        )
    ),]

views.py

#views.py 
spyne.const.RESULT_SUFFIX =''
spyne.const.REQUEST_SUFFIX ='Request'

class GetFilterValuesRequest(ComplexModel):
    id = String(min_occurs=1,max_length=64,nillable=False)
    password = String(min_occurs=0,nillable=False)
    productId = String(min_occurs=1,nillable=False)

class FilterValues(ComplexModel):
    productId = String(min_occurs=1,default='55',nillable=False)

class InventoryService(Service):

    @rpc(GetFilterValuesRequest,_returns=FilterValues,)
    def getFilterValues(ctx,GetFilterValuesRequest):
        return FilterValues(productId='33',)

我想从输入中删除外部的“GetFilterValuesRequest”并将输出响应中的“getFilterValues”更新为“FilterValues”。

我将添加我当前的输入和输出以及我预期的输入和输出

以下是我通过soapui调用这个请求时的当前输入输出

#Current input
<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:inv="InventoryService" xmlns:core="core.views">
   <soap:Header/>
   <soap:Body>
      <inv:getFilterValuesRequest>
         <!--Optional:-->
         <inv:GetFilterValuesRequest>
            <core:id>?</core:id>
            <!--Optional:-->
            <core:password>?</core:password>
            <core:productId>?</core:productId>
         </inv:GetFilterValuesRequest>
      </inv:getFilterValuesRequest>
   </soap:Body>
</soap:Envelope>

#Current output
<soap12env:Envelope xmlns:soap12env="http://www.w3.org/2003/05/soap-envelope" xmlns:tns="InventoryService" xmlns:s0="core.views">
   <soap12env:Body>
      <tns:getFilterValuesResponse>
         <tns:getFilterValues>
            <s0:productId>33</s0:productId>
         </tns:getFilterValues>
      </tns:getFilterValuesResponse>
   </soap12env:Body>
</soap12env:Envelope>

以下是我在soap ui中的预期输出

#Expected input 

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:inv="InventoryService" xmlns:core="core.views">
   <soap:Header/>
   <soap:Body>
         <inv:GetFilterValuesRequest>
            <core:id>?</core:id>
            <!--Optional:-->
            <core:password>?</core:password>
            <core:productId>?</core:productId>
         </inv:GetFilterValuesRequest>
   </soap:Body>
</soap:Envelope>


#Expected output

<soap12env:Envelope xmlns:soap12env="http://www.w3.org/2003/05/soap-envelope" xmlns:tns="InventoryService" xmlns:s0="core.views">
   <soap12env:Body>
      <tns:GetFilterValuesResponse>
         <tns:FilterValues>
            <s0:productId>33</s0:productId>
         </tns:FilterValues>
      </tns:GetFilterValuesResponse>
   </soap12env:Body>
</soap12env:Envelope>

解决方法

使用

@rpc(GetFilterValuesRequest,_returns=FilterValues,_body_style = "bare" )