【问题标题】:remove outertag from spyne wsdl input and output从 spyne wsdl 输入和输出中删除外标签
【发布时间】:2021-03-19 07:10:56
【问题描述】:

我正在使用 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, max_length=64, nillable=False)
    productId = String(min_occurs=1, max_length=64, nillable=False)

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

class InventoryService(Service):

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

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

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

下面是我通过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>

【问题讨论】:

    标签: wsdl spyne


    【解决方案1】:

    使用

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

    【讨论】:

    • 虽然此代码可以解决问题,including an explanation 说明如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的答案添加解释并说明适用的限制和假设。
    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 2020-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多