A amostra do Serviço da Web tem duas partes:
Quando você executa a amostra Host de Serviço da Web, o intermediário recebe uma mensagem SOAP/XML através do protocolo HTTP e envia de volta uma mensagem de resposta SOAP/XML, utilizando novamente o HTTP. Assim, o intermediário está agindo como um host de serviço da Web.
O intermediário recolhe os dados dessa mensagem SOAP e gera uma nova mensagem mapeada para um arquivo de cabeçalho C. Ela é enviada para um aplicativo legado utilizando o WebSphere MQ. O aplicativo legado responde e os dados dessa resposta são colocados na resposta HTTP que o intermediário gera. Desse modo, o intermediário confrontou um aplicativo legado como um serviço da Web.
Para executar a amostra Host de Serviço da Web:
O aplicativo legado é gravado em C e iniciado com os dois parâmetros de entrada: um nome do gerenciador de filas e um nome de fila do WebSphere MQ. O aplicativo lê mensagens da fila e do gerenciador de filas, e envia respostas para a fila e o gerenciador de filas especificados nas informações de resposta da mensagem de entrada.
Duas versões executáveis do aplicativo legado são fornecidas:
A amostra é configurada para executar o aplicativo legado utilizando o mesmo gerenciador de filas do WebSphere MQ que o intermediário. Se o seu intermediário utiliza um gerenciador de filas diferente para o aplicativo legado, configure seus gerenciadores de fila do WebSphere MQ (intermediário e legado) para intercomunicação.
Você também deve fazer uma pequena alteração no MQOutput para o nó legado no fluxo de mensagens WSHOST_WSHOST1. Configure a propriedade Básica Nome do Gerenciador de Filas como o nome do gerenciador de filas do aplicativo legado.As mensagens de entrada e saída são mapeadas para a seguinte estrutura 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;
Isso é fornecido no arquivo legacyservice.h do projeto WSHOST_LEGACY. Observe que esse arquivo de cabeçalho também contém outras estruturas.
Todas as mensagens de teste utilizadas na execução dessa amostra são baseadas no seguinte 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>
A amostra Host de Serviço da Web chama um aplicativo legado com uma mensagem chamada msg_tagIA81CONF. Na mensagem, um campo chamado DeliveryRef é configurado em branco na entrada, e na saída é configurado como JOHNCORP. Além disso, um campo chamado Confirm é configurado em branco na entrada, e na saída é configurado como Y ou N, dependendo se o campo de entrada ItemReference contiver o caractere Y.
A mensagem de resposta da mensagem de entrada acima é a seguinte:
<?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>
Quando você executa a amostra Cliente de Serviço da Web, o intermediário recebe uma mensagem no formato legado através do protocolo do WebSphere MQ. Ele chama um serviço da Web enviando uma mensagem SOAP/XML utilizando o protocolo HTTP. Ele recebe uma resposta do serviço da Web como uma mensagem SOAP/XML, utilizando novamente HTTP e envia de volta uma mensagem de resposta legada, utilizando MQ. Assim, o intermediário está agindo como um cliente de serviço da Web.
O intermediário recolhe os dados dessa mensagem legada, que é mapeada para um arquivo de cabeçalho C. Os dados desse arquivo são utilizados para construir uma mensagem SOAP/XML, que é mapeada para o esquema XML em um arquivo WSDL. O arquivo WSDL foi fornecido por um host de serviço da Web e importado para um conjunto de mensagens no intermediário. Aqui, o host de serviço da Web é a amostra Host de Serviço da Web.
A amostra Host de Serviço da Web deve estar em execução para executar essa amostra Cliente de Serviço da Web.
Para executar a amostra Cliente de Serviço da Web:
As mensagens de teste de entrada utilizadas na execução dessa amostra são baseadas no seguinte formato:
typedef struct tagIA81BUY { char MessageId[8]; char OrderNumber[8]; char ItemReference[12]; char ItemQuantity[8]; char CustomerNumber[12]; char DeliveryRef[8]; } IA81BUY;
A mensagem enviada ao fluxo de mensagens do Host de Serviço da Web é da seguinte forma:
<?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>
A mensagem de resposta recebida pelo fluxo de mensagens do Cliente de Serviço da Web para a mensagem de entrada acima é da seguinte forma:
<?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>
A Mensagem de Resposta
O fluxo de mensagens do Cliente de Serviço da Web emite a mensagem acima no formato CWF. Isso é baseado na estrutura C tagIA81CONF, definida acima. Os campos e valores são da seguinte forma:
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;