gpt4 book ai didi

python - 如何在 Spyne 中使用结构化详细信息元素引发 SOAP 故障?

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:47 27 4
gpt4 key购买 nike

Spyne manual指出使用 Spyne 创建 SOAP 故障的正确方法是引发 spyne.model.fault.Fault 的实例(或您自己的子类):

@add_metaclass(ComplexModelMeta)
class Fault(ComplexModelBase, Exception):
# ...

我试图理解为什么它会子类化 ComplexModelBase .我最初的假设是我声明了我想要进入 SOAP Fault 的 <detail> 的元素。我的元素 Fault子类,像这样:

class MyApplicationError(Fault):
__namespace__ = 'http://myapplication.com/ns'
_type_info = [
('reason', Unicode),
]

然而,当实际引发这个异常时,看起来我必须将一个普通的字典传递给 detail构造函数的参数。

填充 detail 的最佳做法是什么?有一组结构化的数据?我什至在我的 Fault 中声明了这个结构吗?子类?
如果是,我该如何填写?如果不是,为什么 Fault子类 ComplexModelBase

最佳答案

Fault(detail={'foo': {'bar': 123}})

将序列化为:

<ns0:Fault xmlns:ns0="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>soap11env:Server</faultcode>
<faultstring>Fault</faultstring>
<faultactor></faultactor>
<detail>
<foo>
<bar>123</bar>
</foo>
</detail>
</ns0:Fault>

您可以在子类中为Fault 编写一个新的构造函数,以便更容易生成详细信息字典。例如:

class SuperFault(Fault):
def __init__(self, foo, bar):
super(SuperFault, self).__init__('Server.SuperFault', 'E001234',
detail={'SuperFault': {'foo': foo, 'bar': bar}})

请注意,由于某些愚蠢的限制,传递给 detail 的字典的长度必须为 1。如果这对您来说有问题,请提出问题。

关于python - 如何在 Spyne 中使用结构化详细信息元素引发 SOAP 故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28671069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com