WSDL (IV) – wsdl:messages

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. 

<wsdl:definitions xmlns:asp="http://VDM/esquemas/asistenteproducto" [...]
<wsdl:message name="consultaDuplicidadesTratamientoNuevo">
   <wsdl:part 
      elementasp:ConsultaDuplicidadesTratamientoNuevoPet«   
      nameparameters«></wsdl:part>
</wsdl:message>

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:Envelope 
     xmlns: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. 

Deja un comentario