Sobre a Amostra de Nós SOAP

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:

Os Fluxos de Mensagens

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.

Uma captura de tela do fluxo de mensagens do consumidor 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:

Uma captura de tela do 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.

Uma captura de tela do 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:

Uma captura de tela do 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.

As Mensagens

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>


Voltar para Home da Amostra