A amostra SOAP Nodes mostra como os nós SOAPInput, SOAPReply e SOAPRequest podem ser usados para fornecer e consumir um serviço da Web através de um transporte HTTP ou JMS.
O ponto de início da amostra é um arquivo Web Services Description Language (WSDL) que define um serviço de pedidos simplificado; 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 sempre retorna uma resposta indicando que a peça solicitada está disponível; uma opção para estender o serviço da Web pode ser usar um nó Database para consultar um banco de dados de estoque.
O assistente "Iniciar a partir de arquivos WSDL e/ou XSD" é utilizado com o arquivo WSDL para criar o conjunto de mensagens, e dois fluxos de mensagens que compõem esta amostra.
A amostra Nós SOAP demonstra as seguintes tarefas:
A amostra utiliza dois fluxos de mensagens. Um fluxo de mensagens fornece um serviço da Web e o outro consome um serviço da Web. A mensagem de pedido e resposta permanece igual no caso dos serviços da Web HTTP e JMS. Os fluxos de mensagens são descritos posteriormente nesta seção.
O diagrama a seguir mostra o fluxo de mensagens do Provedor de Serviços da Web.
A tabela a seguir mostra os nós no fluxo de mensagens do Provedor de Serviços da Web:
Tipo de Nó | Nome de Nó |
---|---|
SOAPInput | Input |
Subfluxo | OrderService_Extract |
Compute | Resposta do Processamento |
SOAPReply | Resposta |
O nó SOAPInput recebe mensagens SOAP de entrada e, se elas forem válidas, as transmite do fluxo de mensagens para o subfluxo OrderService_Extract. O subfluxo OrderService_Extract é criado pelo assistente "Iniciar a partir dos arquivos WSDL e/ou XSD". O diagrama a seguir mostra o subfluxo do Provedor de Serviços da Web:
A tabela a seguir mostra os nós do subfluxo do Provedor de Serviços da Web:
Tipo de Nó | Nome de Nó |
---|---|
Terminal de Entrada | entrada |
SOAPExtract | Extract |
Terminal de Saída | defeito |
Rótulo | ws_submitPORequest |
Terminal de Saída | submitPORequest |
O nó SOAPExtract pega uma mensagem SOAP e remove o envelope SOAP. Nesta amostra, remover o envelope SOAP deixa uma mensagem XML no domínio XMLNSC que pode ser usado nos nós, como o nó Mapping ou o nó Compute. O nó SOAPExtract roteia a mensagem então para um rótulo baseado na operação do serviço da Web que está sendo chamado. Nesta amostra, somente uma operação é utilizada. Se o WSDL usado como ponto de início tiver diversas operações, o assistente "Iniciar a partir de Arquivos WSDL e/ou XSD" fornece a opção de implementar mais de uma operação. Se diversas operações forem selecionadas, o subfluxo tem diversos rótulos, que produzem diversos terminais de saída no fluxo de mensagens pai.
Quando a mensagem XMLNSC deixa o subfluxo e retorna para o fluxo de mensagens do provedor principal, ela entra em um nó Compute. Usando o nó Compute, é possível fazer referência ao corpo SOAP original como XML e executar operações ESQL nos dados da mensagem. Na amostra, os dados na mensagem são ignorados, e os dados XML são criados a partir do rascunho. Esses dados são então enviados ao nó SOAPReply, que constrói uma mensagem SOAP para retornar ao consumidor do serviço da Web que iniciou a chamada do serviço da Web.
O diagrama a seguir mostra o fluxo de mensagens do Consumidor de Serviços da Web.
A tabela a seguir mostra os nós no fluxo de mensagens do Consumidor de Serviços da Web:
Tipo de Nó | Nome de Nó |
---|---|
MQInput | SOAPSample_IN |
Compute | Pedido de Processamento |
Subfluxo | Invoke_submitPO |
Compute | Resposta do Processamento |
MQOutput | SOAPSample_OUT |
MQOutput | SOAPSample_FAULT |
O fluxo do Consumidor de Serviços da Web é iniciado por uma mensagem do WebSphere MQ que chega na fila monitorada pelo nó MQInput. A mensagem é uma mensagem XML no domínio XMLNSC. A mensagem entra em um nó Compute no qual os dados recebidos são usados para criar os dados XML a serem enviados ao serviço da Web. A mensagem é então passada através do fluxo para o subfluxo Invoke_submitPO. O subfluxo Invoke_submitPO é criado pelo assistente "Iniciar a partir de arquivos WSDL e/ou XSD".
O diagrama a seguir mostra o subfluxo do Consumidor de Serviços da Web:
A tabela a seguir mostra os nós do subfluxo do Consumidor de Serviços da Web:
Tipo de Nó | Nome de Nó |
---|---|
Terminal de Entrada | entrada |
SOAPRequest | Pedido |
Terminal de Saída | falha |
SOAPExtract | Extract |
Terminal de Saída | defeito |
Rótulo | ws_submitPOResponse |
Terminal de Saída | submitPOResponse |
O nó SOAPRequest pega os dados XML de entrada e usa para construir uma mensagem SOAP válida para enviar ao serviço da Web definido pelas propriedades do nó. Se uma resposta válida for recebida, ela é passada a um nó SOAPExtract, que remover o envelope SOAP da resposta e retorna a mensagem ao domínio XMLNSC. A mensagem é, então, roteada ao nó Label ws_submitPOResponse e sai do subfluxo.
No fluxo do consumidor principal, a mensagem é enviada a um nó MQOutput que grava os dados XML na fila especificada do WebSphere MQ. A mensagem de falha é enviada para um nó MQOutput que grava os dados de falha de SOAP na fila do WebSphere MQ especificada.
O fluxo de mensagens do cliente da Web é conduzido por uma mensagem WebSphere MQ. Um arquivo de cliente de teste é fornecido para executar a amostra usando a mensagem XML a seguir:
<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>
O formato válido para uma mensagem de pedido e uma mensagem de resposta de serviço da Web é mostrado na extração de esquema editada a seguir:
<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>