domingo, 7 de maio de 2017

OSB 11g and Rest Service

Neste post vou mostrar como fazer a chamada do serviço rest que foi gerado no post intellij, spring boot and rest via OSB 11g.

Passos:

1-) Crie um Business Service com as seguintes configurações:

Service Type: Messaging Service


Request Message Type: Text
Response Message Type: Text


Endpoint URI: http://localhost:8090/mytest


2-) Crie um Proxy service e defina no WSDL duas operações, uma para chamada via Method GET e outra para POST.


3-) Inclua um "Route" e depois "Routing" na operação "getOperation" e aponte para o Business Service que criamos.

4-) Insira um "Message Processing"  do tipo "Insert" com as seguintes configurações:

Expression: <http:relative-URI>/myGetMethod</http:relative-URI>
Location: "as last child of"
XPath: ./ctx:transport/ctx:request
In Variable: outbound

5-) Faça a mesma coisa do passo anterior para as seguintes configurações:

Expression: <tran:encoding xmlns:tran="http://www.bea.com/wli/sb/transports">utf-8</tran:encoding>
Location: "as last child of"
XPath: ./ctx:transport/ctx:request
In Variable: outbound

Expression: <http:http-method>GET</http:http-method>
Location: "as last child of"
XPath: ./ctx:transport/ctx:request
In Variable: outbound

6-) Insira um "Stage Actions" do tipo "Transport headers" e inclua as seguintes configurações:

http Content-Type: 'application/json'
http Accept: 'application/json'

7-) Em "Response Action" inclua um "Message Processing" do tipo "Assign" com os seguintes valores:

Expression: $body/text()
Variable: myTestResponse

8-) Iinclua um "Message Processing" do tipo "Replace" com os seguintes valores:

 XPath: .
In Variable: body
Expression:
<br:getOperationResponse>
    <out>{data($myTestResponse)}</out>
</br:getOperationResponse>

 Replace node contents: true


9-) Agora vamos a operação "postOperation".
Inclua um "Route" e depois "Routing" na operação "getOperation" e aponte para o Business Service que criamos.

11-) Neste metodo exige parametros de entrada, vamos incluir  um "Message Processing" do tipo "Replace" com os seguintes valores:

 XPath: .
In Variable: body
Expression:
fn:concat('{"firstName":"',data($body/br:postOperationRequest/firstName),
     '","lastName":"',data($body/br:postOperationRequest/lastName),
     '"}')
 Replace node contents: true


10-) Insira os "Message Processing"  do tipo "Insert" com as seguintes configurações:

Expression: <http:relative-URI>/myPostMethod</http:relative-URI>
Location: "as last child of"
XPath: ./ctx:transport/ctx:request
In Variable: outbound

Expression: <tran:encoding xmlns:tran="http://www.bea.com/wli/sb/transports">utf-8</tran:encoding>
Location: "as last child of"
XPath: ./ctx:transport/ctx:request
In Variable: outbound

Expression: <http:http-method>POST</http:http-method>
Location: "as last child of"
XPath: ./ctx:transport/ctx:request
In Variable: outbound

11-) Insira um "Stage Actions" do tipo "Transport headers" e inclua as seguintes configurações:

http Content-Type: 'application/json'
http Accept: 'application/json'
 

12-) Em "Response Action" inclua um "Message Processing" do tipo "Assign" com os seguintes valores:

Expression: $body/text()
Variable: myTestResponse

13-) Inclua um "Message Processing" do tipo "Replace" com os seguintes valores:

 XPath: .
In Variable: body
Expression:
<br:postOperationResponse>
    <message>{data($myTestResponse)}</message>
</br:postOperationResponse>
 Replace node contents: true

14-)  Resultado:

getOperation:


postOperation:


Obs: Para tratar o retorno ou mesmo no request no formato JSON, não existe uma tratativa nesta versão do OSB, para se fazer isso, gere uma lib em java com os frameworks existentes no mercado como o GSON da google e execute um "Java Callout" para fazer as transformações de XML para JSON e vise versa.



Um comentário: