2017-08-01 4 views
0

je besoin d'une bibliothèque SOAP python qui peut gérer les pièces jointes multipart. Ma compréhension est que ceci n'est pas supporté par SOAPpy ou par de la mousse mais qu'il est supporté par ZSI et zeep. Cependant, bien que SOAPpy marche bien avec le fichier WSDL que j'ai besoin d'utiliser, ZSI et zeep me donnent des erreurs. Voici le fichier WSDL: http://nva1wss.webex.com/nbr/services/NBRStorageService?wsdl. J'ai ouvert le fichier dans SoapUI et utilisé l'option "Check WSI Compliance" et il a passé toutes les vérifications.Python SOAP WSDL fonctionne en SOAPpy mais pas ZSI ou zeep

Voici mes erreurs:

zeep.exceptions.NamespaceError: Impossible de résoudre le type {} NBRStorageService DataHandler. Aucun schéma disponible pour l'espace de noms u'NBRStorageService '.

ZSI.generate.WsdlGeneratorError: impossible de trouver l'importation pour le schéma "NBRStorageService", éventuellement attribut @schemaLocation manquant.

---- ---- Mise à jour Infos

Basé sur la sortie verbeuse de zeep Je crois que le problème avec le WSDL est qu'il utilise un type de données que zeep ne parvient pas à résoudre dans le document de schéma au http://schemas.xmlsoap.org/soap/encoding/. Voici la définition du type de données dans le WSDL:

<wsdl:types> 
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="https://nva1wss.webex.com/nbr/services/NBRStorageService"> 
     <import namespace="NBRStorageService"/> 
     <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> 
     <complexType name="ArrayOf_tns1_DataHandler"> 
      <complexContent> 
       <restriction base="soapenc:Array"> 
        <attribute ref="soapenc:arrayType" 
        wsdl:arrayType="tns1:DataHandler[]"/> 
       </restriction> 
      </complexContent> 
     </complexType> 
    </schema> 
</wsdl:types> 

Ce WSDL semble avoir été généré avec Apache Axis 1.4.

Toutes les idées sur la façon de contourner cela? Ou si quelqu'un a des recommandations spécifiques pour les changements côté serveur, je ne peux pas les faire, mais je peux certainement les communiquer aux développeurs qui gèrent le serveur.

Merci!

Répondre

0

D'accord. Je l'ai corrigé!

Alors, je l'ai fait quelques recherches, et je trouve que cela est un problème commun avec l'axe généré WSDL de. Le type DataHandler n'est pas supposé être dans l'espace de noms tns1. Il est supposé être dans l'espace de noms apachesoap. Donc, j'ai changé l'espace de noms dans le WSDL, et cela n'a toujours pas fonctionné. J'ai donc creusé un peu plus, et j'ai découvert que "DataHandler est un type de plate-forme spécifique qu'aucune plate-forme autre qu'Axis ne comprendra", et que la solution consiste à la changer en un type d'octet.

Donc, voici la section du WSDL que j'ai modifié localement et travaille maintenant:

<wsdl:types> 
    <schema xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="https://nva1wss.webex.com/nbr/services/NBRStorageService"> 
     <import namespace="NBRStorageService"/> 
     <import namespace="http://schemas.xmlsoap.org/soap/encoding/"/> 
     <complexType name="ArrayOf_tns1_DataHandler"> 
      <complexContent> 
       <restriction base="soapenc:Array"> 
        <attribute ref="soapenc:arrayType" 
        wsdl:arrayType="soapenc:byte[]"/> 
       </restriction> 
      </complexContent> 
     </complexType> 
    </schema> 
</wsdl:types> 

Et, BOOM! Ça marche! Je suis maintenant en mesure de télécharger et de gérer les pièces jointes comme décrit ici: http://docs.python-zeep.org/en/master/attachments.html