Pregunta

Estoy interesado en escribir un cliente de Python para un servicio web, y para fines de prueba también sería muy interesante tener un servidor stub simple. Estoy usando Python 2.3 y ZSI 2.0.

Mi problema es que no logro devolver una excepción del servidor.

Si levanto una excepción del tipo usado para la falla de jabón en el wsdl, obtengo las excepciones de TypeError 'deben ser clases, instancias o cadenas (en desuso), no EmptyStringException_Def'. Pensé que esto significaba que el objeto de falla no era una subclase de Excepción, pero modificar el código generado de esta manera no ayudó, y por supuesto, no tener que modificar el código generado sería mucho mejor :)

Si devuelvo el objeto de falla como parte de la respuesta, simplemente se ignora.

No pude encontrar ninguna documentación sobre el manejo de fallas en ZSI. ¿Alguna pista?

Aquí hay un código de muestra para un servidor de un servicio muy simple con solo un método, spellBackwards, que debería devolver una falla de jabón si la cadena de entrada está vacía:

#!/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(),])
¿Fue útil?

Solución

He encontrado la respuesta en este ZSI Cookbook , de Chris Hoobs, vinculado en la parte inferior de la página de inicio de ZSI :

  

5.4 Excepciones
  Una pregunta espinosa es cómo generar las fallas en el servidor. Con el código ZSI v2.0 como   se proporciona, esto no es posible.

Supongo que esto es correcto ya que el documento está vinculado desde la página de inicio del proyecto.
Este documento también sugiere una solución alternativa, que consiste en parchar el archivo Fault.py en la distribución ZSI.
Probé la solución y funciona según lo prometido; parchear la biblioteca es una solución aceptable para mí, ya que necesito generar un servidor solo con fines de prueba (es decir, no necesitaré distribuir la biblioteca parcheada).

Otros consejos

disculpas por no poder responder la pregunta.

Luché con ZSI por un tiempo.

Ahora estoy usando SUDS: https://fedorahosted.org/suds/wiki , y todo se ha vuelto mucho más simple.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top