web-dev-qa-db-fra.com

Créer python serveur de savon basé sur wsdl

J'ai un fichier wsdl décrivant le serveur de communication-client sur un produit Java. J'implémente un nouveau serveur basé sur Python qui implémentera les mêmes services .

Connaissez-vous une méthode pour créer le code serveur Python basé sur le wsdl, qui ne nécessite pas que j'écrive tous les types complexes impliqués?

Aussi, quel Api recommandez-vous?

28
inversus

En ce qui concerne SOAP support, Python n'est malheureusement plus avec "piles incluses". Le support côté client est acceptable mais côté serveur, vous êtes fondamentalement tout seul.

Vous voudrez peut-être regarder les éléments suivants pour commencer:

http://wiki.python.org/moin/WebServices

http://pywebsvcs.sourceforge.net/

http://doughellmann.com/2009/09/01/evaluating-tools-for-developing-with-soap-in-python.html

Si vous voulez vraiment emprunter cette voie, il semble que ZSI soit l'outil à utiliser, même si j'ai des doutes qu'il fonctionnera avec les 2 dernières .x Python.

En utilisant Python 2.6.6, j'ai essayé d'utiliser ZSI 2.0 pour créer un service Web à partir du WSDL. J'ai reçu des avertissements "le module a été déprécié" lors de la génération du code avec wsdl2py et wsdl2dispatch, a dû installer séparément PyXML et pirater mon sys.path juste pour le résoudre en premier, sinon j'ai "module ext.reader n'existe pas" puis pour finir avec une décevante "ZSI: EvaluateException Got None pour nillable (False), minOccurs (1) element" erreur sur un "Bonjour tout le monde!" WS avec un élément requis.

Passé à ZSI 2.1_a1 qui n'a plus besoin de PyXML et wsdl2py fait tout (ce que wsdl2dispatch l'a fait pour 2.0) mais s'est toujours retrouvé dans une impasse avec des erreurs "ZSI: EvaluateException Got None for nillable (False), minOccurs (1) element".

L'expérience n'a pas été très amusante mais il m'a suffi de me faire une opinion sur ce que Python a à offrir pour SOAP services Web ... ce qui est pas grand chose (et c'était juste pour les services web de base rien de spécial comme spécifications WS- * ). YMMV!

EDIT: J'ai récemment rencontré cette SO question , et bien qu'orientée par rapport à un client solution, il mentionne également quelques bibliothèques pour la construction de services SOAP.

16
Bogdan

Cette question n'a pas reçu suffisamment d'attention.

La réponse actuellement acceptée est bonne, mais sa réponse est "non". N'y a-t-il vraiment pas de solution générale raisonnablement entretenue?

Malheureusement, je ne pense pas que la réponse négative soit due au manque d'attention à la question. Il n'y a vraiment pas de support pour WSDL en python. Si vous voulez éviter la complexité de créer votre propre enveloppe de savon à partir de zéro, la seule chose que je peux vous recommander est de créer un exemple d'enveloppe à l'aide de l'un des nombreux outils de services Web de savon (soapui par exemple), puis de l'utiliser comme chaîne de modèle (je sais, horrible) dans votre python

[~ # ~] mise à jour [~ # ~] vous pouvez utiliser spyne . C'est un python boîte à outils RPC qui, entre autres protocoles, prend en charge SOAP. Il créera le WSDL pour vous, mais si votre objectif est de mettre en œuvre le service décrit par le WSDL que vous avez déjà, vous devrez alors affinez votre service spyne (écrit en python) jusqu'à ce que le WSDL généré corresponde à l'original

17
Francisco Meza