Java,  OSB

Expondo um Serviço Rest no OSB – Parte 4: Expondo o Proxy usando Java Callout

Neste Post vou explicar em detalhes como criar o Proxy Service para conseguirmos expor o Serviço Rest usando as libs que criamos para conseguir usar via Java Callout

A exposição do serviço Rest no OSB será dividida em Partes conforme abaixo para que eu consiga detalhar ao máximo cada etapa, consulte o Link de cada uma para ver as demais Partes:

Abra o JDeveloper, clique na pasta Proxy e em seguida, em New e clique em Proxy Service.. conforme abaixo

Em Service Name escreva PessoaPS, em WSDL selecione o WSDL que criamos escolhendo apção (Port) e deixe marcado a opção Generate Pipeline apenas com o nome PessoaPS também pois ele irá criar um pipeline em seguida e depois clique em Next.

Em seguida pode deixar como esta o Endpoint URI e clique em Finish

Veja que os dois artefatos foram criados

Agora abra o PessoaPS.pipeline e quando abrir clique sobre ele com o botão direito >> Insert Into >> Routing

Agora clique em Routing e abaixo em Service clique na lupa para abrir uma telinha e em seguida clique no Business PessoaBS e em seguida clique em OK

Ficara conforme abaixo:

Agora arraste um Assign para dentro de Request Action dentro do Routing que acabamos de criar conforme abaixo, então atribua o nome request para Variable e clique no botão ao lado de <Expression>, ira abrir uma tela que colocaremos o request conforme abaixo.

Request que colocaremos.

<o>
     <nome>{data($body/pes:obterMensagemRequest/nome)}</nome>
     <b>0</b>
</o>

Vou explicar o porque do Request acima

Em função da lib que criamos no Java é necessário abrir a tag xml que no caso coloquei como <o> mas poderia ser qualquer letra ou nome.

Em seguida coloquei a tag <nome> que é o elemento que nosso Microserviço espera, ou seja, aqui devemos colocar todos os elementos que seu Microserviço precisa receber, e dentro irá o request que passaremos no nosso payload

Após a tag <nome> temos a tag <b>0</b>… isso é uma pequena “gambiarra” para que nosso código funcione pois no código Java que criamos ele espera uma lista e se não criarmos mais esse elemento no XML ira ocorrer um erro, mas esse <b>0</b> … pode novamente ser qualquer letra ou numero e o conteúdo pode ser 0 ou qualquer coisa também.

Obs: Este <b>0</b> só foi necessário porque só tínhamos a tag <nome>, mas caso tivesse <idade>, <sexo> no caso mais de uma tag não precisamos adicionar o <b>0</b> pois ai já teremos uma lista com mais de um elemento.

Um outro detalhe aqui é que se você so copiou o nome e colou dentro da caixa abaixo, irá perceber que o nome ficará todo vermelhinho em baixo, isso acontece porque você ainda não tem criado a namespace pes: , neste caso basta mais abaixo expandir a parte onde esta o body >> obterMensagemRequest >> nome, clique nele e depois clique em OK pois ele irá criar a namespace pes: automaticamente.

Ficará então conforme abaixo:

Agora abaixo o Assign que criamos acima arraste um JavaCallout e mais abaixo clique na Lupa para escolhermos a lib que iremos utilizar, no caso a que criamos chamada xmljson.jar e clique em OK.

Na tela abaixo escolha o metodo xmlToJson e clique em OK pois iremos fazer a transformação do xml que estamos recebendo no serviço para um Json que iremos passar para nosso MicroServiço.

Então em Value coloque a o nome da váriavel que atribuímos no Assign que neste caso coloquei como request e mais abaixo em Variable, vamos colocar o nome jsonRequest que será a variável que atribuiremos nosso request Json que iremos passar para nosso Microserviço, ou seja que foi transformado pela nossa lib.

Arraste agora um Replace abaixo do Java Callout e em Locaton coloque o body pois ele deverá ser substituído pelo nosso jsonRequest que é nosso request passado para o Microserviço

Arraste agora um Insert e em Value coloque a URI que será o nome do seu “Path” mapeado do Microserviço, abaixo um trecho do código para que você se lembre do que fizemos.

Abaixo os valores:

  • Value: <http:relative-uri>/hello</http:relative-uri>
  • Position: as las child of
  • Location: outbound
  • ./ctx:transport/ctx:request

Arraste mais um Insert colocando os valores abaixo que corresponde ao encoding que deve ser no nosso caso UTF-8

  • Value: <tran:encoding xmlns:tran=”http://www.bea.com/wli/sb/transports”>utf-8</tran:encoding>
  • Position: as las child of
  • Location: outbound
  • ./ctx:transport/ctx:request

Arraste mais um Insert e aqui você deverá colocar se o seu método é um POST ou GET ou o que for o nosso Microserviço, que no nosso caso será um POST.

Agora finalmente arrastaremos um Transport Header, veja acima que nos inserts que realizamos foi apenas para “preencher nosso oubound” que deverá ser levado junto ao nosso Header do serviço em outbound Request e abaixo em Actions devemos colocar as informações que devem ser transportadas no Header, que no nosso caso é um application/json mas poderíamos ter um token, um key… Abaixo desta figura vou colocar um exemplo:

Exemplo do que poderíamos estar transportando no Header:

Obs: Para o nosso Projeto não precisa fazer o passo abaixo… este é apenas um Exemplo.

Mais um exemplo:

Ate qui o nosso processo já esta quase pronto mas vou colocar mais um componente no processo apenas para você entender para que serve pois pode ser muito útil, mas novamente para este nosso exemplo ele não é necessário.

Obs: Não precisa colocar este componente no nosso processo, ele é apenas um exemplo… Mas poderíamos ter um Routing Options que serve apenas para trocar o nosso endpoint que setamos no business (PessoaBS.biz)

Veja que o Business está como http://localhost:9000 e usando o componente Routing Options estamos alterando essa URL (URI) para http://localhost:7001

Este componente pode ser usado em diversas hipóteses, por exemplo uma troca de endpoint do ambiente de homologação para um de produção definindo um IF antes da entrada.

Agora em Response Action adicione mais um Java Callout escolhendo o xmlJson novamente para fazermos a conversão do Json que acabamos de transformar pela lib para XML

Escolha então o método jsonToXml:

Então em Value coloque $body/text() pois iremos pegar o resultado do body e jogar na variavel xmlResult que devemos colocar abaixo em Variable:

Arraste agora um Replace para que fique abaixo do JavaCallout com o seguinte paylaod de Response:

Obs: Veja que a variável xmlResult que usamos acima será usada para preencher nosso payload.

<pes:obterMensagemResponse>
    <mensagem>{data($xmlResult)}</mensagem>
</pes:obterMensagemResponse>

Teremos então o seguinte fluxo:

Chame então este Proxy PessoaPS no SbConsole e teremos o seguinte resultado:

Veja abaixo o trace do Proxy:

Caso queira, pode fazer o download no meu GitHub deste Projeto.

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

Leave a Reply

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