| You are here: Inicio > Inmersión en Python > Servicios web SOAP > Depuración de servicios web SOAP | << >> | ||||
Inmersión en PythonPython de novato a experto |
|||||
Las bibliotecas de SOAP proporcionan una manera sencilla de comprobar lo que está sucediendo tras la escena.
Activar la depuración es simplemente cuestión de cambiar dos indicadores en la configuraciónl SOAPProxy.
>>> from SOAPpy import SOAPProxy >>> url = 'http://services.xmethods.net:80/soap/servlet/rpcrouter' >>> n = 'urn:xmethods-Temperature' >>> server = SOAPProxy(url, namespace=n)>>> server.config.dumpSOAPOut = 1
>>> server.config.dumpSOAPIn = 1 >>> temperature = server.getTemp('27502')
*** Outgoing SOAP ****************************************************** <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/1999/XMLSchema"> <SOAP-ENV:Body> <ns1:getTemp xmlns:ns1="urn:xmethods-Temperature" SOAP-ENC:root="1"> <v1 xsi:type="xsd:string">27502</v1> </ns1:getTemp> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ************************************************************************ *** Incoming SOAP ****************************************************** <?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <ns1:getTempResponse xmlns:ns1="urn:xmethods-Temperature" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:float">80.0</return> </ns1:getTempResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ************************************************************************ >>> temperature 80.0
La mayoría del documento de petición XML que se envía al servidor es una plantilla. Ignore todas las declaraciones de espacio de nombres; van a ser lo mismo (o parecido) en todas las invocaciones SOAP. El centro de la “llamada a función” es este fragmento dentro del elemento <Body>:
<ns1:getTempxmlns:ns1="urn:xmethods-Temperature"
SOAP-ENC:root="1"> <v1 xsi:type="xsd:string">27502</v1>
</ns1:getTemp>
| El nombre del elemento es a su vez el nombre de la función, getTemp. SOAPProxy utiliza getattr para despachar. En lugar de llamar a varios métodos locales diferentes basándose en el nombre del método, utiliza este último para construir el documento XML de petición. | |
| El elemento XML de la función está contenido en un espacio de nombres específico, que es el que especificamos cuando creamos el objeto SOAPProxy. No se preocupe por el SOAP-ENC:root; también sale de una plantilla. | |
| Los argumentos de la función se traducen también a XML. SOAPProxy hace uso de introspección sobre cada argumento para determinar el tipo de datos (en este caso una cadena). El tipo del argumento va en el atributo xsi:type, seguido por una cadena con el valor en sí. |
El documento XML devuelto es igualmente sencillo de entender, una vez que sabe lo que ha de ignorar. Concéntrese en este fragmento dentro del <Body>:
<ns1:getTempResponsexmlns:ns1="urn:xmethods-Temperature"
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <return xsi:type="xsd:float">80.0</return>
</ns1:getTempResponse>
<< Primeros pasos con SOAP |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
Presentación de WSDL >> |