Acerca del ejemplo Nodos SOAP

El ejemplo Nodos SOAP muestra cómo se pueden utilizar los nodos SOAPInput, SOAPReply y SOAPRequest para proporcionar y consumir un servicio web a través de un transporte HTTP o JMS.

El punto de partida del ejemplo es un archivo WSDL (lenguaje de descripción de servicios web) que define un servicio de pedidos simplificado, consulte el Archivo WSDL. El archivo WSDL, que contiene enlaces HTTP y JMS, apunta a las operaciones que hay definidas en el WSDL. 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 asistente "Empezar a partir de archivos WSDL y/o XSD" se utiliza con el archivo WSDL para crear el conjunto de mensajes y los dos flujos de mensajes que componen este ejemplo.

El ejemplo Nodos SOAP muestra las siguientes tareas:

Los flujos de mensajes

El ejemplo utiliza dos flujos de mensajes. Un flujo de mensajes proporciona un servicio web y el otro consume un servicio web. El mensaje de solicitud y de respuesta es el mismo en el caso de servicios web HTTP y JMS. Los flujos de mensajes se describen más adelante en esta sección.

El diagrama siguiente muestra el flujo de mensajes de Proveedor de servicios web:

Una captura de pantalla del flujo de mensajes de Proveedor de servicios web

La tabla siguiente muestra los nodos del flujo de mensajes de Proveedor de servicios web:

Tipo de nodo Nombre de nodo
SOAPInput Input
Subflow OrderService_Extract
Compute Compute Response
SOAPReply Reply

El nodo SOAPInput recibe mensajes SOAP de entrada y, si son válidos, los pasa por el flujo de mensajes al subflujo OrderService_Extract. El subflujo OrderService_Extract lo crea el asistente "Empezar a partir de archivos WSDL y/o XSD". El siguiente diagrama muestra el subflujo de Proveedor de servicios web:

Una captura de pantalla del subflujo de Proveedor de servicios web

La tabla siguiente muestra los nodos del subflujo de Proveedor de servicios web:

Tipo de nodo Nombre de nodo
Input Terminal in
SOAPExtract Extract
Output Terminal failure
Label ws_submitPORequest
Output Terminal submitPORequest

El nodo SOAPExtract toma un mensaje SOAP y elimina el sobre SOAP. En este ejemplo, al eliminar el sobre SOAP se deja un mensaje XML en el dominio XMLNSC, que se puede utilizar en nodos como el nodo Mapping o el nodo Compute. El nodo SOAPExtract direcciona a continuación el mensaje a una etiqueta basándose en la operación de servicio web que se está invocando. En este ejemplo se utiliza una sola operación. Si el WSDL que se utiliza como punto de partida tiene varias operaciones, el asistente "Empezar a partir de archivos WSDL y/o XSD" ofrece la opción de implementar más de una operación. Si se seleccionan varias operaciones, el subflujo tiene varias etiquetas, lo que produce varios terminales de salida en el flujo de mensajes padre.

Cuando el mensaje XMLNSC deja el subflujo y vuelve al flujo de mensajes del proveedor principal, entra en un nodo Compute. Utilizando el nodo Compute, puede hacer referencia al cuerpo SOAP original como XML, y realizar operaciones ESQL en los datos en el mensaje. En el ejemplo, se hace caso omiso de los datos del mensaje y se crean datos XML válidos partiendo de cero. Estos datos se envían luego al nodo SOAPReply, que construye un mensaje SOAP para devolver al consumidor de servicio web que inició la llamada de servicio web.

El siguiente diagrama muestra el flujo de mensajes de Consumidor de servicios web:

Una captura de pantalla del flujo de mensajes de Consumidor de servicios web

La tabla siguiente muestra los nodos del flujo de mensajes de Consumidor de servicios web:

Tipo de nodo Nombre de nodo
MQInput SOAPSample_IN
Compute Compute Request
Subflow Invoke_submitPO
Compute Compute Response
MQOutput SOAPSample_OUT
MQOutput SOAPSample_FAULT

El flujo de consumidor de servicios web lo inicia un mensaje de WebSphere MQ que llega a la cola supervisada por el nodo MQInput. El mensaje es un mensaje XML en el dominio XMLNSC. El mensaje entra en un nodo Compute donde los datos de entrada se utilizan para crear los datos XML que se van a enviar al servicio web. El mensaje se pasa luego por el flujo al subflujo Invoke_submitPO. El subflujo Invoke_submitPO lo crea el asistente "Empezar a partir de archivos WSDL y/o XSD".

El siguiente diagrama muestra el subflujo de Consumidor de servicios web:

Una captura de pantalla del subflujo de Consumidor de servicios web

La tabla siguiente muestra los nodos del subflujo de Consumidor de servicios web:

Tipo de nodo Nombre de nodo
Input Terminal in
SOAPRequest Request
Output Terminal fault
SOAPExtract Extract
Output Terminal failure
Label ws_submitPOResponse
Output Terminal submitPOResponse

El nodo SOAPRequest toma los datos XML de entrada y los utiliza para construir un mensaje SOAP válido que va a enviar al servicio web definido por las propiedades del nodo. Si la respuesta que se recibe es válida, se pasa a un nodo SOAPExtract, que elimina el sobre SOAP de la respuesta y devuelve el mensaje al dominio XMLNSC. El mensaje se direcciona entonces a la Etiqueta ws_submitPOResponse y sale del subflujo.

En el flujo de consumidor principal, el mensaje de salida se envía a un nodo MQOutput que graba los datos XML en la cola de WebSphere MQ especificada. El mensaje de error se envía a un nodo MQOutput que graba los datos de error SOAP en la cola de WebSphere MQ especificada.

Los mensajes

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 utilizando el siguiente mensaje XML:

	<OrderMessage>
  	<localElement>
    <FirstName>Message</FirstName>
    <LastName>Broker</LastName>
    <Street>IBM</Street>
    <City>IBM</City>
    <ZipCode>IBM</ZipCode>
    <PartNumber>Some Part</PartNumber>
    <Quantity>1</Quantity>
  	</localElement>
	</OrderMessage>

En el siguiente extracto de esquema editado se muestra el formato válido para un mensaje de solicitud 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>


Volver a la página inicial del ejemplo