首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >添加xsi:类型为响应

添加xsi:类型为响应
EN

Stack Overflow用户
提问于 2022-03-05 09:00:20
回答 1查看 127关注 0票数 0

我使用的是spyne官方回购中提供的示例/compextype.py脚本,我得到了以下回复:

代码语言:javascript
复制
--------------- 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属性。

xsi:type="integer" >0

代码语言:javascript
复制
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()

使用所提供的示例,我如何修复它?

EN

回答 1

Stack Overflow用户

发布于 2022-03-08 07:59:19

Spyne添加了xsi:type仅在多态类型的情况下才会出现。

例如:如果WSDL中的类型表示Vehicle,但您返回一个名为Car的子类,并且在输出协议中启用了多态性,那么您将得到Car实例的xsi:type="nsprefix:Car"开始标记。

如果要重写此行为,则需要在自定义协议中重写to_parent函数,并将其作为输出协议传递给Application实例化。

PS:xsi:type标记在add_type == True 这里中添加

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71360844

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档