веб-сервисы python: возврат ошибки с сервера с использованием ZSI - PullRequest
2 голосов
/ 15 января 2009

Я заинтересован в написании 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(),])

Ответы [ 2 ]

1 голос
/ 19 января 2009

Я нашел ответ в этой Поваренной книге ZSI , написанной Крисом Хубсом, внизу домашней страницы ZSI :

5.4 Исключения
Сложный вопрос - как генерировать ошибки на сервере. С кодом ZSI v2.0 в качестве это предусмотрено, это невозможно.

Я предполагаю, что это правильно, так как статья связана с домашней страницей проекта.
В этой статье также предлагается обходной путь, который заключается в исправлении файла Fault.py в дистрибутиве ZSI.
Я протестировал обходной путь, и он работает, как и обещал; исправление библиотеки является для меня приемлемым решением, поскольку мне нужно создать сервер только для целей тестирования (т.е. мне не нужно распространять исправленную библиотеку).

0 голосов
/ 15 января 2009

извинения за невозможность ответить на вопрос.

Я некоторое время боролся с ZSI.

Я сейчас использую SUDS: https://fedorahosted.org/suds/wiki, и все стало намного проще.

...