A amostra Address Book mostra a você como usar os nós SOAPInput, SOAPReply e SOAPRequest para fornecer e consumir um serviço da Web através de um transporte HTTP ou JMS.
O ponto de início para a amostra é um arquivo WSDL que define um catálogo de endereços, consulte Arquivo WSDL. O arquivo WSDL, que contém as ligações HTTP e JMS, aponta para as operações que estão definidas no WSDL. O serviço da Web executa duas operações; ele armazena os endereços e localiza os endereços. Se você tiver acesso ao WebSphere Application Server, você pode trocar o provedor e o consumidor incluídos nessa amostra com o provedor e o consumidor fornecidos com a amostra Address Book no WebSphere Application Server para SOAP sobre HTTP. A amostra Address Book fornecida com o WebSphere Application Server não suporta transporte SOAP sobre JMS. Para suportar o transporte SOAP sobre JMS, você deve regenerar a amostra de Serviço da Web incluindo uma ligação e porta JMS ao WSDL para interoperar com o WebSphere Application Server, consulte o arquivo WSDL fornecido com esta amostra.
Para criar o conjunto de mensagens e um fluxo de mensagens em branco para o provedor, use o assistente "Iniciar a Partir dos Arquivos WSDL e/ou XSD" com o arquivo WSDL. Depois você pode criar um fluxo de consumidor manualmente.
A amostra do Catálogo de Endereços demonstra as seguintes tarefas:
A amostra Address Book usa dois fluxos de mensagens. O primeiro fluxo de mensagens fornece um serviço da Web e o outro fluxo de mensagens consome um serviço da Web.
O seguinte diagrama mostra o fluxo de mensagens do provedor de serviço da Web:
A tabela a seguir mostra os nós no fluxo de mensagens do provedor do serviço da Web.
Tipo de Nó | Nome de Nó |
---|---|
SOAPInput | Entrada SOAP |
RouteToLabel | RouteToLabel |
Rótulo | saveAddress |
Compute | SaveCompute |
Rótulo | findAddress |
Compute | FindCompute |
SOAPReply | Resposta SOAP |
O fluxo é construído utilizando um nó SOAPInput e SOAPReply. Para digitar automaticamente todas as propriedades para o nó SOAPInput, arraste o arquivo WSDL no nó SOAPInput. (O arquivo WSDL está localizado no projeto do conjunto de mensagens apenas depois de ter utilizado o assistente "Iniciar dos Arquivos WSDL e/ou XSD".)
O nó SOAPInput recebe as mensagens de SOAP de entrada e, se as mensagens forem válidas, as transmite pelo fluxo de mensagens para o nó RouteToLabel. O nó RouteToLabel encaminha a mensagem ao nó Label, o nome do qual está localizado no ambiente local (OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname). Não é necessário configurar este caminho explicitamente quando você está trabalhando com mensagens SOAP de entrada, porque o nó SOAPInput configura automaticamente o caminho para o nome da operação que está sendo chamada. Entretanto, você deve conectar o nó SOAPInput a um nó RouteToLabel e criar um nó Label para cada operação.
Se a operação que está sendo chamada for saveAddress, a mensagem é enviada para o nó SaveCompute, em que o endereço é armazenado em uma variável ESQL compartilhada. As variáveis compartilhadas permanecem para o escopo do fluxo de mensagens; se reimplementar o fluxo de mensagens, endereços salvos serão perdidos.
Se a operação que está sendo chamada for findAddress, a mensagem é enviada para o nó FindCompute, onde a variável compartilhada é consultada para o endereço da pessoa cujo nome é fornecido na mensagem de entrada. Se o endereço for localizado, o endereço será retornado: se o endereço não estiver na variável compartilhada, uma falha SOAP será construída.
A figura a seguir mostra o fluxo de mensagens do consumidor do serviço da Web:
A tabela a seguir mostra os nós no fluxo de mensagens do consumidor do serviço da Web:
Tipo de Nó | Nome de Nó |
---|---|
MQInput | AddressBook_IN |
Compute | RoutingCompute |
RouteToLabel | RouteToLabel |
Rótulo | findAddress |
Compute | FindCompute |
SOAPRequest | findAddress |
Rótulo | saveAddress |
Compute | SaveCompute |
SOAPRequest | saveAddress |
Compute | ComputeResponse |
MQOutput | AddressBook_OUT |
MQOutput | AddressBook_FAULT |
O fluxo do consumidor do serviço da Web é iniciado por uma mensagem WebSphere MQ que chega na fila monitorada pelo nó MQInput. A mensagem é uma mensagem XML no domínio XMLNSC. Para usar o nó RouteToLabel, deve-se configurar o valor no ambiente local explicitamente para esse fluxo, usando o nó RoutingCompute:
OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname = InputRoot.XMLNSC.request.operation
A mensagem é então roteada para o nó Label correto. O nó Label redireciona a mensagem para um nó Compute que constrói uma mensagem de pedido de saída no domínio SOAP, utilizando a mensagem de entrada. A mensagem é redirecionada para o nó SOAPRequest correto, que chama o fluxo do provedor. A mensagem de retorno é enviada para um nó MQOutput, que grava os dados XML para a fila WebSphere MQ especificada.
O fluxo de mensagens do consumidor de serviços da Web é conduzido por uma mensagem WebSphere MQ. Um arquivo do Cliente de Teste é fornecido para executar a amostra, utilizando a seguinte mensagem XML. A primeira mensagem armazena um endereço, a segunda mensagem consulta esse endereço. O primeiro elemento especifica a operação que será chamada; o lembrete da mensagem é usado para criar a mensagem SOAP que é enviada ao fluxo do provedor.
<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 segunda mensagem de entrada, em seguida, consulta esse endereço:
<request> <operation>findAddress</operation> <Name>Dave</Name> </request>
As mensagens SOAP também são fornecidas para chamar o fluxo do provedor diretamente. Essas mensagens são equivalentes àquelas que o fluxo de consumidor constrói e envia dos dois nós SOAPRequest. A primeira mensagem SOAP armazena o endereço:
<?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>
A segunda mensagem de entrada consulta o endereço:
<?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>