簡體   English   中英

添加 xsi:輸入 SOAP python spyne xml 響應

[英]add xsi:type in SOAP python spyne xml response

我正在使用 spyne 官方回購中提供的 example/complextype.py 腳本,我得到了以下響應:

--------------- RESPONSE ------------------------
 <xml version='1.0' encoding='UTF-8'?>
<soap11env:Envelope xmlns:soap11env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="spyne.examples.complex">
    <soap11env:Body>
        <tns:super_userResponse>
            <ns0:userid xmlns:ns0="user">0</ns0:userid>
            <ns0:username xmlns:ns0="user">root</ns0:username>
            <ns0:firstname xmlns:ns0="user">Super</ns0:firstname>
            <ns0:lastname xmlns:ns0="user">User</ns0:lastname>
         </tns:super_userResponse>
    </soap11env:Body>
</soap11env:Envelope>

我想了解的是如何添加 xsi:type 屬性

<ns0:userid xmlns:ns0="user" xsi:type="integer" >0</ns0:userid>

class Permission(ComplexModel):
    __namespace__ = "permission"

    app = String(values=['library', 'delivery', 'accounting'])
    perms = String(min_occurs=1, max_occurs=2, values=['read', 'write'])


class User(ComplexModel):
    __namespace__ = "user"
    
    userid = Integer
    username = String
    firstname = String
    lastname = String

    

user_database[0] = User(
    userid=0,
    username='root',
    firstname='Super',
    lastname='User',
    permissions=all_permissions
)

   
class UserManager(Service):

    @rpc(_returns=User , _body_style='bare' )
    def super_user(ctx):
        return user_database[0]

  
if __name__ == '__main__':
    from wsgiref.simple_server import make_server


    application = Application([UserManager], 'spyne.examples.complex',
                              in_protocol=Soap11(), out_protocol=Soap11())

    server = make_server('127.0.0.1', 8000, WsgiApplication(application))


    server.serve_forever()

使用提供的示例,我該如何解決?

Spyne 僅在出現歧義的情況下添加 xsi:type,這僅發生在多態類型的情況下。

例如。 如果 WSDL 中的類型為Vehicle但您返回一個名為Car的子 class 並且您在 output 協議中啟用了多態性,您將獲得 Car 實例的xsi:type="nsprefix:Car"開始標記。

如果要覆蓋此行為,則需要在自定義協議中覆蓋to_parent function 並將其作為 output 協議傳遞給Application實例化。

PS: 此處add_type == True時添加xsi:type標簽

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM