Tags
Java, Java Callout, JSON, OracleSoaSuite 12c, OSB, Proxy, SOA
Esta é sem duvidas a maneira mais fácil de expor um Serviço Rest no OSB 12c que é utilizando o WADL
Lembrando que você pode expor o serviço REST usando o JAVA Callout e nXSD como mostrei nos Posts anteriores ou simplesmente fazendo desta forma…
Este é um dos muitos ensinamentos que devo a um grande mestre do SOA Arthur Gomes Junior, à quem devo os devidos agradecimentos de referencia deste Post
Caso você não tenha visto como criar uma API pode fazer utilizando o Post abaixo, pois iremos expor esta API que criamos, que é um simples HelloWorld feito em Java utilizando o framework Spring Boot
Abra o JDeveloper, clique em File >> New e clique em From Gallery conforme abaixo

Agora na caixa aberta na caixa de pesquisa escreva service bus e ao lado direito escolha a opção Service Bus Application with Service Bus Project (Applications) conforme abaixo:

Na tela abaixo em Application Name escreva ServiceBusApplication e clique em Next

Agora em Project Name escreva OSBProject e clique em Finish

Sera criado então o projeto conforme abaixo:

Em cima do projeto OSBProject clique com o cotão direito, depois clique em New >> From Gallery conforme abaixo

Na caixa de pesquisa escreva em folder e ao lado direito clique em Folder (General) e clique em OK

Em Folder Name escreva Business e clique em OK conforme abaixo:

Então ficará conforme abaixo:

Repita o mesmo procedimento de criação de pastas até que tenhamos as seguintes pastas: Business, Proxy , WADL, WSDL e XSD

Agora logo abaixo do arquivo pom.xml, dê um duplo clique sobre SBProject e ao lado esquerdo em External Services clique com o botão direito e clique em REST:

Em Name: coloque Pessoa pois será o nome do nosso serviço. E marque a opção Reference will be invoked by components using WSDL interfaces e clique em Next.

Abaixo coloque os seguintes valores:
- Base URI:http://localhost:9005
- Obs: Este é host e porta de onde esta rodando a API
- Resource Path: /hello
- Obs: Este é o path da API
E clique no sinal de +

Abaixo coloque os seguintes valores:
- Operation :obterMensagem
- Obs: Este sera o nome da nossa operação no Serviço
- HTTP Verb: Post
- Obs: No nosso caso nossa API faz um POST mas poderia ser um GET
E clique no botão ao lado da Lupa (Define Schema For Native Format)

Abaixo clique em Next

Abaixo coloque os seguintes valores:
- File Name: obterMensagemRequest.xsd
- Obs: Este sera o nome do nosso XSD de Request
- Directory Name: Clique em Browse e escolha a pasta XSD que criamos anteriormente.
Em seguida clique em Next

Abaixo para o nosso caso escolha: JSON Interchange Format, pois a nossa API passa o request no corpo(body), mas caso o parâmetro fosse na própria URL vc usaria a outra opção URI Sample e usaria este formato de exemplo na próxima tela para passar o parâmetro (exatamente como faria no modo chamando pelo SOAPUI ou Postman).
Em seguida clique em Next

Abaixo coloque os seguintes valores:
- Target namespace: http://xmlns.oracle.com/UansBlogApplication/Pessoa
- Obs: Este é o namespace do nosso serviço
- Root Element: obterMensagemRequest
- Obs: Este é o nome da operação de Request do WSDL
- Character set: UTF-8
Em Sample, coloque um payload de Request da API
{
"nome": "Uans"
}
Em seguida clique em Next

Veja na tela abaixo que foi gerado um XML, que sera o conteúdo do nosso XSD de request, então clique em Next.

Na tela abaixo clique em Finish.

Na tela abaixo clique na aba Response, marque a opção JSON e clique no ícone ao lado da lupa

Clique em Next

Abaixo coloque os seguintes valores:
- File Name: obterMensagemResponse.xsd
- Obs: Este sera o nome do nosso XSD de Response
- Directory Name: Clique em Browse e escolha a pasta XSD que criamos anteriormente.
Em seguida clique em Next

Marque a opção JSON Interchange Format e clique em Next

Abaixo coloque os seguintes valores:
- Target namespace: http://xmlns.oracle.com/UansBlogApplication/Pessoa
- Obs: Este é o namespace do nosso serviço
- Root Element: obterMensagemResponse
- Obs: Este é o nome da operação de Request do WSDL
- Character set: UTF-8
Em Sample, coloque um payload de Response da API com todos os campos preenchidos.
{
"mensagem":"Ola Uans"
}
Em seguida clique em Next

Veja na tela abaixo que foi gerado um XML, que sera o conteúdo do nosso XSD de response, então clique em Next.

Abaixo clique em Finish

Abaixo clique em OK

Veja abaixo que nossa operação obterMensagem foi criada, então clique em Finish

Clicando em Finish ele ira começar os artefatos conforme abaixo:

Ele poderá ocorrerá o erro abaixo, pois por default ele irá gerar o nosso WSDL e o WADL em uma pasta chamada Resource e como criamos os arquivos XSDs dentro da pasta XSD ele não encontrará estes arquivos que por default tbm seriam criados na pasta Resource e por isso ocorre o erro. Clique em OK e veja mais abaixo os arquivos WSDL e WADL com problemas.

Um detalhe aqui… veja se na estrutura do projeto se ele criou o nosso Business e ao lado direito em External Service ele criou o nosso adapter. Pois caso não tenha criado os dois, feche o Jdeveloper e abra novamente e refaça os passos.
Abaixo um exemplo onde ele não gerou o Business

Abaixo o exemplo onde ele gera o Business e o adapter na parte direita em External Services corretamente.

Agora vamos mover os arquivos WSDL, WADL e Business para as devidas pastas.
Clique com o botão direito primeiro em cima do arquivo Pessoa.WADL , depois em Refactor e depois em Move, e mova para a pasta WADL e faça o mesmo procedimento para o arquivo Pessoa.WSDL para a pasta WSDL
Mas ainda não mova o Business, pois existe um Bug na ferramenta que se você mover o Business ele ira perder o nosso Adapter criado em External Service, então moveremos o nosso Business apenas no final do processo.

Deverá ficar como abaixo:

Agora clique em SBProject e na tela do meio conforme abaixo clique com o botão direito e em Insert –> Pipeline

Em Service Name coloque o nome do Serviço: Pessoa
Em Location selecione a pasta: Proxy e em seguida clique em Next

Abaixo selecione a opção WSDL e selecione o arquivo que estará na pasta WSDL
Deixe mercado a opção Expose as Proxy Service para que ele crie o seu WebService que deverá ser exposto.
Em Proxy Name coloque o nome: Pessoa

Veja abaixo que ele irá criar o proxy e o pipeline dentro da pasta Proxy e ao lado irá criar os adapters

Agora clique na ponta da caixinha verde que é seu Pipeline e ligue ele até o seu adapter que esta no External Service.

Pronto.
Dê um duplo clique na caixinha verde e você verá que essa caixinha verde é seu pipeline e ele por traz criou um Routing para o seu business

Somente agora você poderá mover o seu business Pessoa.bix para a pasta Business

Teremos então tudo funcionando.

Basta agora fazer um deploy no seu domínio e correr pro abraço.

Duvidas ? Deixe seu comentário e faça download deste Projeto
Abraços e até a Próxima
/:-D