gpt4 book ai didi

python 网络服务 : returning a fault from the server using ZSI

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

我有兴趣为 Web 服务编写一个 Python 客户端,并且出于测试目的,拥有一个简单的 stub 服务器也会非常有趣。我正在使用 python 2.3 和 ZSI 2.0。

我的问题是我无法从服务器返回异常。

如果我在 wsdl 中引发用于 soap 错误的类型的异常,我会得到 TypeError“异常必须是类、实例或字符串(已弃用),而不是 EmptyStringException_Def”。我认为这意味着故障对象不是 Exception 的子类,但以这种方式修改生成的代码并没有帮助 - 当然,不必修改生成的代码会好得多:)

如果我将错误对象作为响应的一部分返回,它就会被忽略。

我找不到任何关于 ZSI 中故障处理的文档。有什么提示吗?

这是一个非常简单的服务的服务器示例代码,只有一个方法 spellBackwards,如果输入字符串为空,它应该返回 soap 错误:

#!/usr/bin/env python
from ZSI.ServiceContainer import AsServer
from SpellBackwardsService_services_server import *
from SpellBackwardsService_services_types import *
class SpellBackwardsServiceImpl(SpellBackwardsService):
def soap_spellBackwards(self, ps):
response = SpellBackwardsService.soap_spellBackwards(self, ps)
input = self.request._in
if len(input) != 0:
response._out = input[::-1]
else:
e = ns0.EmptyStringException_Def("fault")
e._reason = "Empty input string"

# The following just produces an empty return message:
# response._fault = e

# The following causes TypeError
# raise e

return response

AsServer(port=8666, services=[SpellBackwardsServiceImpl(),])

最佳答案

我在这个 ZSI Cookbook 中找到了答案,作者 Chris Hoobs,链接在 ZSI home page 的底部:

5.4 Exceptions
A thorny question is how to generate the faults at the server. With the ZSI v2.0 code as it is provided, this is not possible.

我认为这是正确的,因为该论文是从项目主页链接的。
本文还提出了一种解决方法,即修补 ZSI 发行版中的 Fault.py 文件。
我测试了解决方法,它按 promise 工作;修补库对我来说是可以接受的解决方案,因为我需要生成一个仅用于测试目的的服务器(即我不需要分发修补后的库)。

关于python 网络服务 : returning a fault from the server using ZSI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/446912/

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