Tags

, , , , , , , , , , ,

Neste post irei descrever como podemos usar o componente Service Callout do OSB.

Irei lhe mostrar como é facil montar o REQUEST e RESPONSE do nosso serviço e demonstrar como podemos usar nosso RESPONSE para várias chamadas de serviços ou usando vários componentes Service Callout

Em um post anterior mostrei como podemos expor um serviço do BPEL no OSB, para isso clique aqui e veja o post, nosso objetivo agora será o mesmo, no caso expor um serviço mas agora usaremos o componente Service Callout, então vamos começar !!!

Crie então um Proxy Service chamado ServiceCalloutProxy

Imagem Blog UansCarvalho

Selecione então na aba General o nosso WSDL, conforme abaixo:

Imagem Blog UansCarvalho

Clique então na aba Message Flow e arraste o componente Pipeline Pair para que fique conforme abaixo:

Imagem Blog UansCarvalho

Agora abaixo do Request Pipeline arraste o componente Stage

Imagem Blog UansCarvalho

Dentro do stage1 arraste o componente Service Callout

Imagem Blog UansCarvalho

Dê um clique sobre o seu Service Callout e abaixo em Properties clique em Browse e procure o serviço SelectDbAdapterBPELBusiness.biz

Imagem Blog UansCarvalho

Cliquem em OK após escolher o serviço SelectDbAdapterBPELBusiness.biz

  • Em Invoking escolha a opção process
  • Em Request Variable coloque SelectRequest
  • Em Response Variable coloque SelectResponse

Imagem Blog UansCarvalho

Abaixo de Request Action arraste o componente Assign e novamente em Properties (Properties deste Assign) coloque nossa variável selectRequest em Variable

Imagem Blog UansCarvalho

Clique então em Expression acima do selectRequest para então colocarmos nosso payload de Request do nosso Serviço a ser chamado, no caso do SelectDbAdapterBPELBusiness.biz

Para isso é muito simples, basta apenas você se logar no seu sbconsole e chamar o Business SelectDbAdapterBPELBusiness

Imagem Blog UansCarvalho

Clique então no ícone que parece uma “baratinha” conforme acima para então copiar o payload

Imagem Blog UansCarvalho

Copiado o payload acima basta agora apenas colar dentro do nosso Assign conforme abaixo:

Imagem Blog UansCarvalho

Porem, veja que entre a tag <idCliente> está o valor 100 que é o pre-fixado pelo próprio OSB, e precisamos que este valor seja o passado por nós, então basta apenas expandir no body que estará ao lado direito na guia Variable Structures e arrastar para o lado esquerdo, veja abaixo:

Imagem Blog UansCarvalho

Agora substitua o valor 100 por este body, acrescentando chaves e também a xquery data para que possamos pegar o valor que será passado em idCliente, veja abaixo como ficou.

Imagem Blog UansCarvalho

Clique em OK e teremos o seguinte:

Imagem Blog UansCarvalho

Ótimo, agora acrescente um Stage para o Response Pipeline e dentro deste Stage arraste o componente Replace conforme abaixo:

Imagem Blog UansCarvalho

Clique sobre o Replace e  na guia abaixo em Properties coloque conforme abaixo:

  • XPath: . (ponto)
  • In Variable: body
  • Replace node contents: (Marcar esta opção)

Imagem Blog UansCarvalho

Clique agora em <Expression>

Ao lado direito em Variable Stuctures clique em $body – obterDadosClienteResponse e depois em nomeCliente e arraste para o lado esquerdo conforme abaixo:

Imagem Blog UansCarvalho

Agora vamos montar o nosso payload que será o nosso Response do Serviço

Exclua a variable $body e veja abaixo como ficará as tags:

Imagem Blog UansCarvalho

Veja passo a passo como é simples:

Estava assim:

  • $body/ser:obterDadosClienteResponse/nomeCliente

Excluí a variable e a barra: $body/

  • ser:obterDadosClienteResponse/nomeCliente

Coloquei o ser:obterDadosClienteResponse entre tags, lembrando que estou abrindo e fechando as tags

  • <obterDadosClienteResponse> </obterDadosClienteResponse>

Coloquei o nomeCliente entre a tag <obterDadosClienteResponse>

  • <ser:obterDadosClienteResponse>
        <nomeCliente> </nomeCliente>
    </ser:obterDadosClienteResponse>

Agora preencha as demais tags faltantes que são profissaoCliente, salarioCliente e numeroDeptCliente e ficará conforme abaixo:

Imagem Blog UansCarvalho

Clique em OK para fechar esta caixa acima para que eu lhe explique de onde virão as informações para nosso payload, veja acima que apenas montamos a estrutura do nosso response, precisamos agora preencher com as informações que virão do nosso business SelectDbAdapterBPELBusiness

Lembra do Service Callout que nele preenchemos nossa variable de Request e Response ? no caso, selectRequest e selectResponse

Imagem Blog UansCarvalho

Pois bem, a resposta do nosso business SelectDbAdapterBPELBusiness será toda gravada na nossa variable selectResponse

OK, aqui só queria explicar de onde virá a resposta do nosso payload.

Volte em nosso Replace e clique novamente ao lado de Expression:

Imagem Blog UansCarvalho

Agora preencha nosso payload para que fique conforme abaixo:

Imagem Blog UansCarvalho

Veja acima que o OSB grifou alguns nomes, isso porque ele não reconheceu a namespace sel:

Para que você entenda a namespace sel: será a mesma do nosso payload de request que pegamos acima, lembra ?

Imagem Blog UansCarvalho

Veja acima que no payload a namespace sel: é http://xmlns.oracle.com/UansBlogApplication/SelecDBAdapter/SelecDBAdapterBPELProcess sem as aspas duplas:

Então volte em nosso replace e clique na guia Namespace Definition e clique em Add

Imagem Blog UansCarvalho

Na caixa que irá abrir em Prefix: coloque sel e em URI coloque http://xmlns.oracle.com/UansBlogApplication/SelecDBAdapter/SelecDBAdapterBPELProcess

Clique em OK e veja que não teremos mais problemas:

Imagem Blog UansCarvalho

Agora para que você entenda, como eu disse na nossa variable $selectResponse virá a resposta do nosso business ou nosso serviço que chamamos, veja um exemplo da minha chamada do business SelectDbAdapterBPELBusiness

Imagem Blog UansCarvalho

Veja também o porque estamos fazendo o Replace da nossa Variable Body pois o nosso processResponse está dentro do Body

E após nossa variable $selectResponse o serviço nos trará o <Nome>, <Profissao> e assim por diante, por isso no nosso replace eu preencho $selectResponse/sel:Nome e etc..

Porem veja que estou usando a namespace sel: e acima no nosso serviço ele não trás com este prefixo sel: … Este é um detalhe do meu WSDL do atributo elementFormDefault e attributeFormDefault mas que explicarei em um Post posterior, por enquanto quero que você apenas se atente a este detalhe pois caso você esteja chamando um serviço diferente veja se você tem que passar o prefixo da sua namespace ou não, faça um teste com ambos para ver se há resultado.

Agora que você entendeu tudo como funciona e o porque de algumas coisas em seu Response, Publique suas alterações para fazermos nossos testes:

Imagem Blog UansCarvalho

Vá no seu SbConsole e chame agora nosso serviço ServiceCalloutProxy

Imagem Blog UansCarvalho

Aqui vou passar o <idCliente> 7 que é o meu ID

Imagem Blog UansCarvalho

Clique em Execute e veja abaixo a resposta do nosso serviço:

Imagem Blog UansCarvalho

Aqui é interessante você entender que a variável que usamos no Response poderá ser usada sempre que quisermos montar uma resposta para nosso serviço, independente de quantos serviços ou Service Callout nós usemos, sempre haverá uma variavel de Response.

 

Duvidas ? Deixe seu comentário :-)

 

Abraços e até a Próxima

/:-D