2

我有兴趣为 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(),])
4

2 回答 2

1

我在这本ZSI Cookbook中找到了答案,作者 Chris Hoobs,链接在ZSI 主页的底部:

5.4 异常
一个棘手的问题是如何在服务器上产生故障。使用提供的 ZSI v2.0 代码,这是不可能的。

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

于 2009-01-19T09:22:07.783 回答
0

抱歉无法回答问题。

我和 ZSI 吵了一阵子。

我现在使用 SUDS:https ://fedorahosted.org/suds/wiki ,一切都变得简单多了。

于 2009-01-15T17:58:21.703 回答