Programación Web en cliente

Leyendo un documento WSDL

Una vez tenemos la dirección del documento WSDL, vamos a estudiar este documento para ver que acciones podemos realizar (muchas veces los desarrolladores de Web services dejan una documentación web -mucho más amigable que leer directamente el documento WSDL- sobre los métodos y tipos a usar, pero esto no es obligatorio). Lo primero que debemos hacer es fijarnos en los elementos , buscaremos los de tipo SOAP, dentro de estos veremos los elementos que nos van a decir los métodos que podemos usar. Seguidamente estudiaremos los elementos (que será la especificación de los mensajes enviados y recibidos en el método) que se referencien dentro de la etiqueta , y por último los tipos de datos a utilizar en los mensajes, especificados dentro de las etiquetas .

En la siguiente versión recortada del documento WSDL del Web service Currency Convertor podemos observar como dentro de la etiqueta de tipo portType < wsdl:portType name = "CurrencyConvertorSoap" > encontramos donde ConversionRate será el método que usemos. Este método espera como mensajes los de tipo ConversionRateSoapIn, que usa elementos del tipo ConversionRate . El elemento ConversionRate esta compuesto de otros dos elementos (FromCurrency y ToCurrency), del tipo Currency, que pueden tomar los valores USD (dolar), EUR (Euro), etc.

<?xml version="1.0" encoding="utf-8"?>
<wsdl:definitions xmlns:http = "http://schemas.xmlsoap.org/wsdl/http/"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" >
   ...
   <wsdl:types>
      <s:schema elementFormDefault="qualified"
         targetNamespace="http://www.webserviceX.NET/">
         <s:element name="ConversionRate">
         <s:complexType>
         <s:sequence>
         <s:element minOccurs="1" maxOccurs="1"
            name="FromCurrency" type="tns:Currency" />
         <s:element minOccurs="1" maxOccurs="1"
            name="ToCurrency" type="tns:Currency" />
         ...
         <s:simpleType name="Currency">
         <s:restriction base="s:string">
         <s:enumeration value="AFA" />
         ...
         <s:enumeration value="EUR" />
         ...
         <s:enumeration value="USD" />
         ...
         <s:element name="ConversionRateResponse">
         <s:complexType>
         <s:sequence>
         <s:element minOccurs="1" maxOccurs="1"
            name="ConversionRateResult" type="s:double" />
            ...
         <s:element name="double" type="s:double" />
      </s:schema>
   </wsdl:types>
   <wsdl:message name="ConversionRateSoapIn">
      <wsdl:part name="parameters" element="tns:ConversionRate" />
   </wsdl:message>
   ...
   <wsdl:portType name="CurrencyConvertorSoap">
   <wsdl:operation name="ConversionRate">
   ...
   <wsdl:input message="tns:ConversionRateSoapIn" />
   ...
   ...
</wsdl:definitions>

Resumiendo, podemos ver que para poder realizar la conversión de Euros a Dolares deberíamos llamar al método “ConversionRate” que espera dos valores (FromCurrency y ToCurrency), en esta caso el primer valor sera EUR (euros) y el segundo USD (dólares). El Web service nos devolvería el valor del cambio en un mensaje con una elemento de tipo ConversionRateResult (que es un double, tiene el doble de precisión que un float).