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))