OSB

Usando o Service Callout do OSB

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

 

 

Criei este Blog destinado a desenvolvedores e interessados na Tecnologia Oracle SOA Suite, minha idéia é que no futuro ele sirva de referência para Analistas e Desenvolvedores desde aprendizes a especialistas. Já existem alguns Posts interessantes que abordam um pouco do meu dia a dia, no passar do tempo irei alimentar este Blog com o máximo de informações possíveis, por isso peço por gentileza aos interessados e afins que caso tenham alguma dúvida, sugestão ou crítica que me digam para que eu possa da melhor forma suprir as expectativas e na medida do possível sanar todas as duvidas que vierem a surgir ou até mesmo criar novos Posts abordando algum tópico que venha a ser relevante para todos os interessados. Obrigado Uans Carvalho

4 Comments

  • Caio André Mondoni

    Olá Uans !

    poderia me tirar uma dúvida, estou com a seguinte dificuldade:

    eu tenho seguinte payload(apenas um exemplo)

    123
    432

    543
    454

    é possível eu enviar pelo service callout cada individualmente, enviando apenas um payload com esses dois ? gostaria que meu BPEL recebe-se cada individualmente para fazer tratamento

    Grato !!

    Atenciosamente,

    Caio André Mondoni

  • Uans

    Olá Caio,

    Primeiramente obrigado pelo acesso ao blog e espero sempre poder ajudar da melhor forma possível.

    É possivel sim, você só precisa especificar no seu WSDL do Proxy que você esta enviando uma lista, no caso seria mais ou menos assim:

    #listaRequestMessage#
    #message#
    #teste1#123#/teste1#
    #teste2#323#/teste2#
    #/message#
    #message#
    #teste1#123#teste1#
    #teste2#323#teste2#
    #/message#
    #/listaRequestMessage#

    No caso é uma lista contendo “N” #Message#, depois disso você fará um FOR para iterar nesta lista e fazer o que você precisa.

    Espero ter ajudado.

    Duvidas estou a disposição.

  • Uans

    Olá Rafael,

    Primeiramente, obrigado pelo acesso ao Blog e espero sempre poder ajudar de alguma forma.

    A diferença é que usando o Service Callout você define uma variavel de entrada que será sua request e uma variavel de saida que será seu response, neste caso conseguimos manipular o seu response usando esta variável para por exemplo deixar retornar do serviço que vocẽ está fazendo o service Callout só o elemento que queremos, já no Route Message vocẽ não define esta variavel de entrada e de saída, usamos esta opção quando não será necessário alterar sua entrada ou sua saída e o seu WSDL do serviço que vocẽ está chamando é o mesmo WSDL do serviço que vocẽ está fazendo o Route Message.

    Espero que tenha compreendido, caso não, pode falar que tento exemplificar de outra forma.

    Abraços

    Uans

Leave a Reply

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *