2017-09-30 5 views
0

Im utilisant zeep SOAP client pour python, en essayant d'obtenir des données à wsdl_address. J'ai maintenant suivantes:comment spécifier xsi: type zeep python

ambCase = {'data1':'value1', 
     'data2':'value2'} 
client = zeep.Client(wsdl=WSDL_Address) 
result = client.service.MethodName(GUID, {'CaseDto':ambCase}) 

où ambCase est des données que je veux obtenir au serveur. La méthode MethodName nécessite 2 paramètres: le jeton GUID (qui ne pose aucun problème) et l'objet ambCase avec l'attribut xsi: type spécifié (dans mon cas, il devrait être 'CaseAmb'), et je ne peux pas le faire fonctionner, il échoue avec un erreur: zeep.exceptions.Fault: exception str() a échoué le code

produit ci-dessus ce xml (en-têtes exception):

<soap-env:Body> 
<ns0:AddCase xmlns:ns0="http://tempuri.org/"> 
    <ns0:guid>00000000-0000-0000-0000-000000000000</ns0:guid> 
    <ns0:caseDto/> 
</ns0:AddCase> 

Je suis assez nouveau pour SOAP et zeep, donc , quelqu'un peut-il aider?

Répondre

0

par essai et erreur la combinaison suivante a fonctionné:

objectType = client.get_type('ns6:someTypeName') # someTypeName will be in xsi:type attribute 
objectWrap = xsd.Element('xmlTagName',objectType) # xmlTagName - name of created xml element 
objectValue = objectWrap('param1',param2,param3[0]) # putting actual data values into object 
client = zeep.Client(wsdl) 
result = client.service.MethodName(objectValue) # calling some method with your object(with explicitly detrmined type) as param 

La chose est, si vous passez un dict comme méthode param, zeep créerons que lui-même objet (sans type), si vous voulez déterminer le type - créez cet objet par vous-même