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