2.2. MARCO TEÓRICO
2.2.14.3. Estructura de una Interfase WSDL
Una interface WSDL es un documento XML. Veamos la estructura en el diagrama de la página siguiente.
En este diagrama se muestran las relaciones entre las distintas secciones de un documento WSDL.
El documento WSDL tiene dos grupos de secciones: las llamadas abstractas y las concretas.
Las abstractas, están en la parte superior del documento.
Definen el mensaje SOAP de una manera independiente del lenguaje y la plataforma (no se refiere a máquinas específicas o lenguajes). (Molinari & Javier Diaz, 2004, pág. 94)
En el grupo de secciones concretas hay más especificaciones sobre sites o serialización.
64
Figura N° 2.9 – Estructura de una Interfase WSDL
Fuente: Libro: Arquitecturas orientadas a Web Services.
Figura N° 2.10 – Diagrama Estructura de una Interfase WSDL
Fuente: Inédito (elaboración propia), basada en imágenes de internet.
65 En el diagrama siguiente, las flechas indican la relación entre secciones del documento.
Un punto y una flecha, representa la relación “se refiere a” o
“usa”.
El conector con flecha doble representa la relación
“modificado”.
El conector con flecha en 3D, representa la relación
“contiene”.
Por ejemplo: la sección Message usa definiciones que están en la sección Types. A su vez, PortType contiene elementos. Los elementos de operaciónen PortType son modificados o descriptos posteriormente por elementos de Bindings section.
A continuación veremos como sería una interface WSDL de una operación (GetDescripcion), que, a través de un código de producto, devuelve su descripción.
<definitions name="InfoProducto">
<types>
<element name="SolicitoDescripcion">
<!acá se define el tipo del códigode producto, por ejemplo </element>
<element name="ResultadoDescripcion">
<! acá se define el tipo del producto, por ejemplo </element>
</types>
<message name="GetCodigoInput">
<part name="body" element="SolicitoDescripcion"/>
</message>
<message name="GetDescripcionOutput">
<part name="body" element="ResultadoDescripcion"/>
</message>
<portType name="InfoProductoPortType">
<operation name="GetDescripcion">
<input message="GetCodigoInput"/>
<output message="GetDescripcionOutput"/>
</operation>
</portType>
<binding name="InfoProductoSoapBinding" type="InfoProductoPortType">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="GetDescripcion">
</operation>
</binding>
<service name="InfoProductoService">
<port name="InfoProductoPort" binding="InfoProductoSoapBinding">
<soap:address location="http://www.grandesalmacenes.com/productos.asmx"/>
</port>
</service>
</definitions>
Nombre de la operación: GetDescripcion.
Dentro de la definición, tenemos distintos elementos: types, message, portType, Binding y Service.
El contenido de una interface WSDL tiene dos partes.
En una parte se definen los elementos de manera abstracta a través types, message y PortType.
66 Luego, a través de binding y service, los relaciona con un determinado protocolo.
WSDL no asume ningún protocolo en particular para la invocación de esa interface, por lo tanto, las operaciones deben poder ser accedidas por más de un protocolo (Molinari & Javier Diaz, 2004).
El elemento Type:
Sirve para definir tipos básicos que se necesitarán posteriormente para la definición.
En nuestro ejemplo, los tipos son SolicitoDescripcion y ResultadoDescripcion.
Ellos son parámetros de entrada y salida respectivamente.
El elemento Message:
Estos elementos contienen información sobre mensajes que se envían o reciben desde el web service.
Cada operación tiene un mensaje para la entrada y otro para la salida.
En nuestro ejemplo, ellos son GetCodigoInput y GetDescripcionOutput.
Estos usan los elementos type ya definidos.
El elemento PortType
Cada elemeno PortType describe una operación del Web Service.
Cada operación define su mensaje de input y de output, ya definidos en el elemento message.
En el ejemplo, la operación GetDescripcion, hace referencia a los mensajes GetCodigoInput y GetDescripcionOutput.
El Binding y el Service: la asociación al protocolo
En nuestro ejemplo, asociaremos la operación con el protocolo SOAP.
El elemento Binding apunta por un lado a la operación (portType) y describe el protocolo y formato que se usará en ella.
67 En nuestro ejemplo, InfoProductoSoapBinding, asocia GetDescripcion con el protocolo SOAP.
El elemento Service asocia InfoProductoSoapBinding, con la URL donde está realmente el servicio a través de un Port. Los Ports son métodos para acceder al servicio.
En nuestro caso, el Port es InfoProductoPort.
<soap:Envelope xmlns:soap= "http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetBalance xmlns="http://www.qwickbank.com/bank">
<Codigo>729-1269-4785</Codigo>
</GetBalance>
</soap:Body>
</soap:Envelope>
<soap:Envelope
xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetBalanceResponsexmlns="http://www.qwickbank.com/bank">
<Balance>3,822.55</Balance>
</GetBalanceResponse>
</soap:Body>
</soap:Envelope>
POST /InfoProducto/Codigos.asmx HTTP/1.1 Host: www.qwickbank.com
Content-Type: text/xml; charset="utf-8"
Content-Length: ...
SOAPAction:
<soap:Envelope xmlns:soap=
"http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetDescripcion>
xmlns="http://www.qwickbank.com/bank">
<Codigo>729-1269-4785</ Codigo>
</GetDescripcion>
</soap:Body>
</soap:Envelope>
HTTP/1.1 200 OK
Content-Type: text/xml; charset="utf-8"
Content-Length: ...
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetBalanceResponse xmlns="http://www.qwickbank.com/bank">
<Balance>3,822.55</Balance>
</GetBalanceResponse>
</soap:Body>
</soap:Envelope>