jurko example consumir consume python soap suds

example - python suds jurko timeout



Espuma de jabón y el temido esquema tipo error No encontrado (3)

Estoy usando la última versión de espuma ( https://fedorahosted.org/suds/ ) por primera vez y me estoy estancando en el primer paso.

suds.TypeNotFound: Type not found: ''(schema, http://www.w3.org/2001/XMLSchema, )''

Ahora, sé que esto está bien cubierto en el mundo de la espuma ( https://fedorahosted.org/suds/wiki/TipsAndTricks#Schema-TypeNotFound y Python / Suds: tipo no encontrado: ''xs: complexType'' ) pero esto parece ligeramente diferente porque (a) se supone que el esquema se enlaza automáticamente después de la versión 0.3.4 y (b) incluso utilizando explícitamente la solución temporal, todavía no funciona.

from suds.client import Client from suds.xsd.sxbasic import Import url = ''file:wsdl.wsdl'' Import.bind(''http://schemas.xmlsoap.org/soap/encoding/'') client = Client(url, cache = None)

con el wsdl:

<?xml version="1.0" encoding="utf-8"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://ws.client.com/Members.asmx" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" targetNamespace="http://ws.client.com/Members.asmx" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <s:schema elementFormDefault="qualified" targetNamespace="http://ws.client.com/Members.asmx"> <s:element name="GetCategoriesResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="GetCategoriesResult"> <s:complexType> <s:sequence> <s:element ref="s:schema" /> <s:any /> </s:sequence> </s:complexType> </s:element> </s:sequence> </s:complexType> </s:element> </s:schema> </wsdl:types> </wsdl:definitions>

produce la excepción anterior.


Lo hicimos funcionar y espero que lo hayas hecho, aunque es un poco peculiar. Tal vez una ubicación o filtro explícito ayude. P.ej:

imp = Import(''http://schemas.xmlsoap.org/soap/encoding/'', location=''http://schemas.xmlsoap.org/soap/encoding/'') imp.filter.add(''http://ws.client.com/Members.asmx'') client = Client(url,plugins=[ImportDoctor(imp)]


Me estaba golpeando la cabeza por un tiempo en este caso. Finalmente resolví el problema usando la siguiente sintaxis:

from suds.xsd.doctor import ImportDoctor, Import url = ''http://somedomain.com/filename.php?wsdl'' imp = Import(''http://schemas.xmlsoap.org/soap/encoding/'') imp.filter.add(''http://some/namespace/A'') doctor = ImportDoctor(imp) client = Client(url, doctor=doctor)

Es importante que comience con la url. Abra ese archivo en su navegador y le proporcionará las definiciones wsdl. Asegúrese de tener la url correcta ingresada aquí y de que realmente se abra un archivo XML. También importa el? Wsdl al final de la url.

En segundo lugar, imp = Import(''http://schemas.xmlsoap.org/soap/encoding/'') importará el esquema SOAP estándar.

En tercer lugar, imp.filter.add(''http:somedomain.com/A'') agregará su espacio de nombre específico. Puede encontrar esta ubicación del espacio de nombres abriendo la url que definió anteriormente en url= y buscando la sección <wsdl:import namespace="http://somedomain.com/A" .

También tenga en cuenta http vs https en sus URL.


Para aquellos que todavía están preocupados por este problema. Este enlace https://bitbucket.org/jurko/suds/issue/20/typenotfound-schema puede proporcionar información útil. La solución sería así:

from suds.client import Client from suds.xsd.doctor import Import, ImportDoctor url = ''http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl'' imp = Import(''http://www.w3.org/2001/XMLSchema'', location=''http://www.w3.org/2001/XMLSchema.xsd'') imp.filter.add(''http://WebXml.com.cn/'') client = Client(url, doctor=ImportDoctor(imp))