我有兴趣为 web 服务编写一个 python 客户端,并且为了测试目的,拥有一个简单的存根服务器也会非常有趣。我正在使用 python 2.3 和 ZSI 2.0。
我的问题是我无法从服务器返回异常。
如果我在 wsdl 中引发用于肥皂故障的类型的异常,我会得到 TypeError '异常必须是类、实例或字符串(已弃用),而不是 EmptyStringException_Def'。我认为这意味着错误对象不是 Exception 的子类,但是以这种方式修改生成的代码并没有帮助——当然,不必修改生成的代码会好得多:)
如果我将故障对象作为响应的一部分返回,它就会被忽略。
我在 ZSI 中找不到任何有关故障处理的文档。有什么提示吗?
下面是一个非常简单的服务服务器的示例代码,它只有一个方法,spellBackwards,如果输入字符串为空,它应该返回一个肥皂错误:
#!/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(),])