python webservices:使用ZSI从服务器返回错误

2024-09-19 23:44:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我对编写一个web服务的python客户机很感兴趣,出于测试目的,拥有一个简单的存根服务器也非常有趣。我使用的是python2.3和zsi2.0。在

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

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

如果我将fault对象作为响应的一部分返回,它将被忽略。在

我找不到任何关于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(),])

Tags: 字符串代码fromimportself服务器inputresponse
2条回答

我在克里斯·胡布斯的ZSI Cookbook中找到了答案,链接在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.

我认为这是正确的,因为论文是从项目主页链接的。
本文还提出了一种解决方法,即故障.pyZSI发行版中的文件。
我测试了该解决方案,它如承诺的那样工作;修补库是我可以接受的解决方案,因为我需要生成一个仅用于测试目的的服务器(即,我不需要分发修补的库)。在

很抱歉不能回答这个问题。在

我和ZSI斗争了一段时间。在

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

相关问题 更多 >