Al importar el ejemplo es posible que reciba varios avisos en el Kit de herramientas sobre atributos, mensajes CWF, elementos y el dominio MRM. Estos avisos están relacionados con los conjuntos de mensajes y no afectan a la ejecución del ejemplo.
El ejemplo Servicios web que utilizan nodos HTTP consta de dos partes:
Si encuentra cualquier tipo de problema al ejecutar el ejemplo, consulte Resolución de problemas cuando se ejecutan ejemplos en la documentación de WebSphere Message Broker.
Cuando se ejecuta el ejemplo Sistema principal de servicio web, el intermediario recibe y devuelve un mensaje de SOAP/XML, con el protocolo HTTP. El intermediario actúa como sistema principal de servicio web.
El intermediario toma datos de dicho mensaje SOAP y genera un nuevo mensaje correlacionado como un archivo de cabecera C. Este mensaje nuevo se envía a una aplicación heredada utilizando WebSphere MQ. La aplicación heredada responde y los datos de esta respuesta se ponen en la respuesta HTTP generada por el intermediario. El intermediario ha tratado la aplicación heredada como un servicio web.
Para ejecutar el ejemplo Sistema principal de servicio web:
La aplicación heredada está escrita en C y se inicia con dos parámetros de entrada : un nombre de gestor de colas y un nombre de cola de WebSphere MQ. La aplicación lee mensajes de la cola y el gestor de colas y envía respuestas a la cola y al gestor de colas especificados en la información de respuesta del mensaje de entrada.
Se facilitan dos versiones ejecutables de la aplicación heredada:
legacyservice qmname qname
donde qmname es el nombre de gestor de colas y qname es WSHOST1_OUT1
(del primer nodo MQOutput). Por ejemplo:
legacyservice MB8QMGR
WSHOST1_OUT1.
No puede llamar a la aplicación heredada desde el kit de herramientas de WebSphere Message Broker.El ejemplo está configurado para ejecutar la aplicación heredada utilizando
el gestor de colas que utiliza el intermediario y que ha creado el asistente
de Configuración Predeterminada (MB8QMGR). Si el intermediario utiliza un gestor de colas distinto para la
aplicación heredada, configure los gestores de colas WebSphere MQ (intermediario y
heredado) para la intercomunicación;
también debe cambiar el nodo MQOutput to legacy en el flujo de mensajes WSHOST_WSHOST1. Establezca la propiedad básica Nombre del gestor de colas
en el nombre del gestor de colas utilizado por la aplicación heredada.
Si desea ejecutar la aplicación heredada en una plataforma distinta de
Windows o Linux, los archivos de origen se encuentran en el proyecto
WSHOST_LEGACY1. El archivo de origen C es legacyservice.c,
con los archivos de cabecera legacyservice.h y
legacyservice2.h.
Compile utilizando un compilador de su elección y, a continuación, ejecute la aplicación
siguiendo las directrices anteriores para los parámetros de entrada.
Los mensajes de entrada y de salida están correlacionados con esta estructura C:
typedef struct tagIA81CONF { char MessageId[8]; char OrderNumber[8]; char ItemReference[12]; char ItemQuantity[8]; char CustomerNumber[12]; char DeliveryRef[8]; char Confirm[1]; char filler1[3]; } IA81CONF;
Esta estructura se proporciona en el archivo legacyservice.h del proyecto WSHOST_LEGACY1. Este archivo de cabecera también contiene otras estructuras.
Todos los mensajes de prueba utilizados en la ejecución de este ejemplo se basan en el siguiente formato:
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:c="http://www.brokersamplewshost.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <c:IA81CONFIN> <MessageId>IA81CONF</MessageId> <OrderNumber>ON4002</OrderNumber> <ItemReference>IY4003</ItemReference> <ItemQuantity>4</ItemQuantity> <CustomerNumber>CY4004</CustomerNumber> <DeliveryRef> </DeliveryRef> <Confirm> </Confirm> <filler1> </filler1> </c:IA81CONFIN> </soapenv:Body> </soapenv:Envelope>
El ejemplo Host de servicio web llama a una aplicación heredada con un mensaje llamado msg_tagIA81CONF. En ese mensaje, el campo DeliveryRef se establece en blanco en la entrada y en la salida se establece en JOHNCORP. El campo Confirm se establece en blanco en la entrada y en la salida se establece en Y o N, en función de si el campo de entrada ItemReference contiene el carácter Y.
El código siguiente muestra el mensaje de respuesta del mensaje de entrada anterior:
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://www.brokersamplewshost.ibm.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS1:IA81CONFOUT> <MessageId>IA81CONF</MessageId> <OrderNumber>ON4002</OrderNumber> <ItemReference>IY4003</ItemReference> <ItemQuantity>4</ItemQuantity> <CustomerNumber>CY4004</CustomerNumber> <DeliveryRef>JOHNCORP</DeliveryRef> <Confirm>Y</Confirm> <filler1> </filler1> </NS1:IA81CONFOUT> </tns:Body> </tns:Envelope>
Cuando se ejecuta el ejemplo Cliente de servicio web, el intermediario recibe un mensaje en el formato heredado a través del protocolo WebSphere MQ. Llama a un servicio web enviando un mensaje SOAP/XML utilizando el protocolo HTTP. Recibe una respuesta de servicio web como mensaje SOAP/XML, utilizando HTTP, y devuelve un mensaje de respuesta heredado, utilizando WebSphere MQ. El intermediario actúa como cliente de servicio web.
El intermediario toma datos del mensaje heredado, que se correlaciona con un archivo de cabecera C. Estos datos se utilizan para crear un mensaje SOAP/XML que se correlaciona con el esquema XML de un archivo WSDL. El archivo lo ha proporcionado un host de servicio web y se ha importado en un conjunto de mensajes en el intermediario. En este ejemplo, el host de servicio es el ejemplo Host de servicio Web.
Para ejecutar el ejemplo Cliente de servicio web, debe estar en ejecución el ejemplo Host de servicio Web.
Para ejecutar el ejemplo Cliente de servicio web:
Los mensajes de prueba de entrada utilizados para la ejecución de este ejemplo se basan en el siguiente formato:
typedef struct tagIA81BUY { char MessageId[8]; char OrderNumber[8]; char ItemReference[12]; char ItemQuantity[8]; char CustomerNumber[12]; char DeliveryRef[8]; } IA81BUY;
El mensaje siguiente se envía al flujo de mensajes de Host de servicio Web:
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="http://www.brokersamplewshost.ibm.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mrm="http://tempuri.org/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS2:IA81CONFIN> <MessageId>IA81CONF</MessageId> <OrderNumber>LAB51234</OrderNumber> <ItemReference>ITEM12345678</ItemReference> <ItemQuantity>qty00005</ItemQuantity> <CustomerNumber>CUST34567890</CustomerNumber> <DeliveryRef> </DeliveryRef> <Confirm> </Confirm> <filler1> </filler1> </NS2:IA81CONFIN> </tns:Body> </tns:Envelope>
El flujo de mensajes de Cliente de servicio web recibe el siguiente mensaje de respuesta para el mensaje de entrada anterior:
<?xml version="1.0"?> <tns:Envelope xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" xmlns:NS1="http://www.brokersamplewshost.ibm.com" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <tns:Body> <NS1:IA81CONFOUT> <MessageId>IA81CONF</MessageId> <OrderNumber>LAB51234</OrderNumber> <ItemReference>ITEM12345678</ItemReference> <ItemQuantity>qty00005</ItemQuantity> <CustomerNumber>CUST34567890</CustomerNumber> <DeliveryRef>JOHNCORP</DeliveryRef> <Confirm>N</Confirm> <filler1> </filler1> </NS1:IA81CONFOUT> </tns:Body> </tns:Envelope>
El mensaje de respuesta.
El flujo de mensajes de Cliente de servicio web genera el mensaje anterior en formato CWF, que se basa en la estructura C tagIA81CONF. La información siguiente detalla los campos y los valores:
typedef struct tagIA81CONF { char MessageId[8]; IA81CONF char OrderNumber[8]; LAB5123 char ItemReference[12]; ITEM12345678 char ItemQuantity[8]; qty00005 char CustomerNumber[12]; CUST34567890 char DeliveryRef[8]; JOHNCORP char Confirm[1]; N char filler1[3]; } IA81CONF;
Cierre la aplicación heredada. Ahora puede eliminar el ejemplo del espacio de trabajo utilizando el asistente Preparar los ejemplos.