Acerca del ejemplo de Libreta de direcciones

El ejemplo de Libreta de direcciones muestra cómo 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 que define una libreta de direcciones, consulte el Archivo WSDL. El archivo WSDL, que contiene vínculos HTTP y JMS, apunta a las operaciones que hay definidas en el WSDL. El servicio web realiza dos operaciones; almacena direcciones y busca direcciones. Si tiene acceso a WebSphere Application Server, puede intercambiar el proveedor y el consumidor incluidos con este ejemplo por el proveedor y el consumidor proporcionados con el ejemplo de Libreta de direcciones en WebSphere Application Server para SOAP sobre HTTP. El ejemplo de Libreta de direcciones que se proporciona con WebSphere Application Server no admite transporte SOAP sobre JMS. Para que admita el transporte SOAP sobre JMS, debe volver a generar el ejemplo de Servicio web añadiendo un vínculo y puerto JMS al WSDL para que pueda interoperar con WebSphere Application Server, consulte el archivo WSDL que se proporciona con este ejemplo.

Para crear el conjunto de mensajes y un flujo de mensajes en blanco para el proveedor, utilice el asistente "Empezar a partir de archivos WSDL y/o XSD" con el archivo WSDL. A continuación puede crear un flujo de consumidor de forma manual.

El ejemplo de Libreta de direcciones muestra las tareas siguientes:

  1. Cómo proporcionar un servicio web utilizando los nodos SOAPInput y SOAPReply.
  2. Cómo consumir un servicio web utilizando un nodo SOAPRequest.

Los flujos de mensajes

El ejemplo de Libreta de direcciones utiliza dos flujos de mensajes. El primer flujo de mensajes proporciona un servicio web y el otro flujo de mensajes consume un servicio web.

Flujo de proveedor

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

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 SOAP Input
RouteToLabel RouteToLabel
Label saveAddress
Compute SaveCompute
Label findAddress
Compute FindCompute
SOAPReply SOAP Reply

El flujo de construye utilizando un nodo SOAPInput y un nodo SOAPReply. Para entrar automáticamente todas las propiedades para el nodo SOAPInput, arrastre el archivo WSDL al nodo SOAPInput. (El archivo WSDL se ubica en el proyecto de conjunto de mensajes sólo después de haber utilizado el asistente "Empezar a partir de archivos WSDL y/o XSD".)

El nodo SOAPInput recibe mensajes SOAP de entrada y, si los mensajes son válidos, los pasa por el flujo de mensajes al nodo RouteToLabel. El nodo RouteToLabel reenvía el mensaje al nodo Label, cuyo nombre está ubicado en el entorno local (OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname). No tiene que establecer esta vía de acceso de forma explícita cuando esté trabajando con mensajes SOAP de entrada porque el nodo SOAPInput establece automáticamente la vía de acceso en el nombre de la operación a la que se está llamando. Sin embargo, debe conectar el nodo SOAPInput a un nodo RouteToLabel y crear un nodo Label para cada operación.

Si la operación a la que se está llamando es saveAddress, el mensaje se envía al nodo SaveCompute, donde se almacena la dirección en una variable ESQL compartida. Las variables compartidas tienen la duración del ámbito del flujo de mensajes; si vuelve a desplegar el flujo de mensajes, perderá las direcciones guardadas.

Si la operación a la que se está llamando es findAddress, el mensaje se envía al nodo FindCompute, donde se consulta en la variable compartida la dirección de la persona cuyo nombre se proporciona en el mensaje de entrada. Si se encuentra la dirección, se devuelve la dirección; si la dirección no está en la variable compartida, se crea una anomalía de SOAP.

Flujo de consumidor

La figura siguiente muestra el flujo de mensajes de consumidor de servicios web:

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 AddressBook_IN
Compute RoutingCompute
RouteToLabel RouteToLabel
Label findAddress
Compute FindCompute
SOAPRequest findAddress
Label saveAddress
Compute SaveCompute
SOAPRequest saveAddress
Compute ComputeResponse
MQOutput AddressBook_OUT
MQOutput AddressBook_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. Para utilizar el nodo RouteToLabel, debe establecer el valor en el entorno local explícitamente para este flujo utilizando el nodo RoutingCompute:

OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname = InputRoot.XMLNSC.request.operation 

Entonces el mensaje se direcciona al nodo Label correcto. El nodo Label reenvía el mensaje a un nodo Compute que crea un mensaje de petición de salida en el dominio SOAP utilizando el mensaje de entrada. El mensaje se reenvía al nodo SOAPRequest correcto, que llama al flujo de proveedor. El mensaje de retorno se envía a un nodo MQOutput, que graba los datos XML en la cola de WebSphere MQ especificada.

Los mensajes

El flujo de mensajes de consumidor de servicios 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. El primer mensaje almacena una dirección, el segundo mensaje busca dicha dirección. El primer elemento especifica la operación a la que se debe llamar; el resto del mensaje se utiliza para crear el mensaje SOAP que se envía al flujo de proveedor.

<request>
  <operation>saveAddress</operation>
  <Name>Dave</Name>
  <City>Carlisle</City>
  <Street>Welton</Street>
  <Province>Cumbria</Province>
  <PostalCode>NE2 3HP</PostalCode>
  <Area>1</Area>
  <Prefix>2</Prefix>
  <Local>3</Local>
</request> 

A continuación, el segundo mensaje de entrada busca esta dirección:

<request>
  <operation>findAddress</operation>
  <Name>Dave</Name>
</request>

También se proporcionan mensajes SOAP para llamar al flujo de proveedor directamente. Estos mensajes son equivalentes a los que el flujo de consumidor crea y envía desde los dos nodos SOAPRequest. El primer mensaje SOAP almacena la dirección:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="http://addressbook.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <ns3:Person>
      <ns3:Name>Dave</ns3:Name>
      <ns3:Address>
        <ns3:City>Carlisle</ns3:City>
        <ns3:Street>Welton</ns3:Street>
        <ns3:Province>Cumbria</ns3:Province>
        <ns3:PostalCode>NE2 3HP</ns3:PostalCode>
        <ns3:PhoneNumber>
          <ns3:Area>1</ns3:Area>
          <ns3:Prefix>2</ns3:Prefix>
          <ns3:Local>3</ns3:Local>
        </ns3:PhoneNumber>
      </ns3:Address>
    </ns3:Person>
  </soapenv:Body>
</soapenv:Envelope>

El segundo mensaje de entrada busca la dirección:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://addressbook.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <tns:Name>Dave</tns:Name>
  </soapenv:Body>
</soapenv:Envelope>

Volver a la página inicial del ejemplo