El ejemplo de Consumidor asíncrono muestra cómo se pueden utilizar nodos asíncronos para llamar a un servicio web. El lenguaje WSDL (Web Services Definition Language) del servicio web se importa en las herramientas y se utiliza para configurar el nodo SOAPAsyncRequest para invocar operaciones expuestas por el servicio web. Este ejemplo también muestra cómo se pueden ampliar las interfaces de WebSphere MQ existentes para realizar peticiones de servicio web.
El ejemplo utiliza inicialmente un transporte HTTP, pero puede modificarse para utilizar JMS, consulte Configuración del ejemplo Consumidor asíncrono para que utilice un transporte JMS.
En el ejemplo, el servicio web es un servicio de pedidos simplificado que expone una operación. El servicio web se proporciona como un flujo de mensajes en el ejemplo. El servicio web devuelve siempre una respuesta que indica que la pieza solicitada está disponible; una opción para ampliar el servicio web puede ser utilizar un nodo Database para consultar una base de datos de existencias.
El ejemplo de Consumidor asíncrono muestra las siguientes tareas:
El siguiente diagrama muestra el flujo de mensajes de cliente web:
Tipo de nodo | Nombre de nodo |
---|---|
MQInput | MQWSInput |
MQOutput | MQWSOutput |
Compute | Compute Request, Format Response |
SOAPAsyncRequest | SOAP Asynchronous Request |
SOAPAsyncResponse | SOAP Asynchronous Response |
Se construye una petición de servicio web a partir de un mensaje WebSphere
MQ utilizando el nodo Compute Request en el dominio SOAP. La operación de
servicio web se invoca utilizando el nodo SOAP Asynchronous Request y el nodo
SOAP Asynchronous Response emparejado recibe la respuesta.
Finalmente,
el nodo Format Response formatea la respuesta como un mensaje WebSphere MQ.
El diagrama siguiente muestra el flujo de mensajes de servicio web:
Tipo de nodo | Nombre de nodo |
---|---|
SOAPInput | SOAP Input |
RouteToLabel | Route WS Operation |
Label | submitPO |
Compute | Compute Response |
SOAPReply | SOAP Reply |
Un mensaje SOAP entrante se direcciona al nodo submitPO utilizando el nodo Route WS Operation. En este ejemplo, el servicio web de ejemplo expone sólo una operación. Puede utilizar varios nodos Label para manejar las diferentes operaciones cuando el servicio web exponga más de una operación. La respuesta SOAP se genera en el nodo Compute Response, antes de que la respuesta se devuelva al cliente web.
El flujo de mensajes de cliente web está controlado por un mensaje WebSphere MQ. Se proporciona un archivo de Cliente de prueba para ejecutar el ejemplo; el archivo utiliza el formato de mensaje mostrado en la captura de pantalla siguiente:
En el siguiente extracto de esquema editado se muestra el formato válido para un mensaje de petición de servicio web y el mensaje de respuesta:
<xsd:element name="submitPORequest"> ... <xsd:complexType> <xsd:sequence> <xsd:element name="partNo" type="xsd:string"/> <xsd:element name="partQuantity" type="xsd:int"/> <xsd:element name="personName"> <xsd:complexType> <xsd:sequence> <xsd:element name="firstName" type="xsd:string"/> <xsd:element name="lastName" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="address"> <xsd:complexType> <xsd:sequence> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="zipCode" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
<xsd:element name="submitPOResponse"> ... <xsd:complexType> <xsd:sequence> <xsd:element name="orderStatus" type="xsd:string"/> <xsd:element name="orderAmt" type="xsd:int"/> <xsd:element name="partNo" type="xsd:string"/> <xsd:element name="partQuantity" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:element>
Después de ejecutar el ejemplo, tal vez desee ampliarlo para enviar un mensaje de petición que no sea válido. Para enviar un mensaje de petición que no es válido, debe editar el nodo Compute Request para añadir elementos incorrectos en el cuerpo del mensaje SOAP. El terminal de anomalías del nodo SOAPAsyncRequest debe estar conectado porque el servicio web genera un mensaje de error SOAP. Para obtener más detalles sobre los errores SOAP, consulte El error SOAP en la documentación de WebSphere Message Broker.