Esta entrada es la cuarta entrega dedicada al interesante mundo de los WSDL. En esta entrada encontrarás en detalle el elemento wsdl:messages, que define los mensaje abstractos que sirven de entrada y salida de las operaciones.
Descripción
Wsdl:messages forma parte del objeto wsdl:definitions.
El elemento wsdl:messages define los mensaje abstractos que sirven de entrada y salida de las operaciones.
Estos mensajes abstractos agrupan los diferentes tipos de datos definidos en wsdl:types y conforman finalmente la entrada o salida del servicio web.
Para agrupar los tipos de datos el elemento wsdl:messages utiliza el elemento wsdl:part, de forma que si un mensaje incluye varios tipos de datos, cada uno de ellos irá incluido en un elemento wsdl:part.
Gramática
La gramática del elemento wsdl:types es la siguiente (? –> es opcional, * –> pueden ser de 0 a N elementos):
<wsdl:message name="nmtoken"> * <wsdl:documentation .... />? <wsdl:part name="nmtoken" element="qname"? type="qname"?/> * </wsdl:message>
Atributos
El principal atributo del elemento wsdl:message es name. Este nombre servirá para identificar el mensaje cuando se definan las operaciones en el elemento wsdl:portType.
SubElementos
El elemento wsdl:documentation es opcional y muestra la información general de los mensajes definidos en este apartado.
El elemento wsdl:part define el o los tipos de datos que participan en el mensaje.
Ejemplo
Este ejemplo muestra la definición del mensaje consultaDuplicidadesTratamientoNuevo, que será el objeto input de la operación ConsultaDuplicidadesTratamientoNuevo del servicio web AsistenteProductoWS.
Este mensaje está formado por un único tipo de dato que es ConsultaDuplicidadesTratamientoNuevoPet.
Ejemplo de generación de objeto de entrada a partir del wsdl:messages de ejemplo anteriores.
Si generamos el cliente para cualquiera de las operaciones del servicio web obtendremos un código similar al siguiente:
<soapenv:Envelopexmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:asis="http://VDM/esquemas/asistenteproducto">
<soapenv:Header/>
<soapenv:Body>
<asis:ConsultaDuplicidadesTratamientoNuevoPet>
<Cabecera>
<FechaHoraPet>?</FechaHoraPet>
<Idioma>?</Idioma>
<IdTransaccion>?</IdTransaccion>
</Cabecera>
<TratamientoNuevo>
<IdPrescripcion>?</IdPrescripcion>
<IdUnicoProducto>?</IdUnicoProducto>
</TratamientoNuevo>
<!--1 or more repetitions:-->
<TratamientosComparacion>
<IdPrescripcion>?</IdPrescripcion>
<IdUnicoProducto>?</IdUnicoProducto>
</TratamientosComparacion>
</asis:ConsultaDuplicidadesTratamientoNuevoPet>
</soapenv:Body>
</soapenv:Envelope>
Conclusión
El apartado wsdl:messages es una abstracción más que agrupa definitivamente los inputs y los outputs de las operaciones que se definen en wsdl:portType.
Si la definición de los tipos de datos es buena, los mensajes deberían quedar correctamente estructurados y hacer entendible de un sólo vistazo cual es la entrada y la salida de una operación en un servicio web.