Tags

, , , , , ,

Neste Post vou explicar um recurso muito útil do OSB onde chamamos uma Classe Java, irei mostrar como usamos o componente chamado Java Callout para esta funcionalidade.

Como a ideia é apenas explicar como chamar um código Java, vou fazer uma simples concatenação de nomes para exemplificar o nosso post.

No Eclipse crie um Java Project chamado BlogUans, depois adicione a package br.com.uanscarvalho e então crie uma Classe chamada LerNome e dentro um método lendoNome passando uma string e retornando uma concatenação do “Olá “ com o nome conforme abaixo:

Imagem Blog UansCarvalho

Agora com o botão direito clique em BlogUans e depois na opção Exportar…

Imagem Blog UansCarvalho

Depois clique na opção JAR file e clique em Next> conforme abaixo:

Imagem Blog UansCarvalho

Na tela seguinte clique em Browse.. então dê o nome para o seu arquivo JAR e selecione o local onde será salvo e clique em Finish

Imagem Blog UansCarvalho

Agora já temos nosso arquivo BlogUans.jar gerado.

Agora no OSB, abaixo de OSBProject crie uma pasta chamada Lib e arraste seu arquivo para dentro desta pasta.

Imagem Blog UansCarvalho

Clique agora com o botão direito na sua pasta WSDL acima(Se não tiver fique a vontade para criar ou não a pasta), clique em New e em seguida File

Dê então o nome do seu File Name como JavaCallout.wsdl e clique em Finish

Imagem Blog UansCarvalho

Copie agora o conteúdo abaixo para dentro do seu arquivo WSDL que criamos acima.

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions name="JavaCallout"
 targetNamespace="http://xmlns.oracle.com/UansBlogApplication/JavaCallout/"
 xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
 xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
 xmlns:tns="http://xmlns.oracle.com/UansBlogApplication/JavaCallout/"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema">

 <wsdl:types>
 <xsd:schema targetNamespace="http://xmlns.oracle.com/UansBlogApplication/JavaCallout/"
 elementFormDefault="unqualified">
 
 
 <xsd:element name="obterNomeRequest">
 <xsd:complexType>
 <xsd:sequence>
 <xsd:element name="nome" type="xsd:string" minOccurs="1" maxOccurs="1"/> 
 </xsd:sequence>
 </xsd:complexType>
 </xsd:element>

 <xsd:element name="obterNomeResponse">
 <xsd:complexType>
 <xsd:sequence>
 <xsd:element name="mensagem" type="xsd:string" minOccurs="1" maxOccurs="1"/>
 </xsd:sequence>
 </xsd:complexType>
 </xsd:element>

 </xsd:schema>
 </wsdl:types>

 <wsdl:message name="obterNomeRequest">
 <wsdl:part name="parameters" element="tns:obterNomeRequest"/>
 </wsdl:message>
 <wsdl:message name="obterNomeResponse">
 <wsdl:part name="parameters" element="tns:obterNomeResponse"/>
 </wsdl:message>

 <wsdl:portType name="JavaCalloutPortType"> 
 <wsdl:operation name="obterNome">
 <wsdl:input message="tns:obterNomeRequest"/>
 <wsdl:output message="tns:obterNomeResponse"/>
 </wsdl:operation>
 </wsdl:portType>
 
 <wsdl:binding name="JavaCalloutBinding" type="tns:JavaCalloutPortType">
 <soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
 
 <wsdl:operation name="obterNome">
 <soap:operation style="document" soapAction="obterNome"/>
 <wsdl:input>
 <soap:body use="literal"/>
 </wsdl:input>
 <wsdl:output>
 <soap:body use="literal"/>
 </wsdl:output>
 </wsdl:operation>
 
 </wsdl:binding>
 
 <wsdl:service name="JavaCallout">
 <wsdl:port name="JavaCalloutSoapPort" binding="tns:JavaCalloutBinding">
 <soap:address location="http://example.uanscarvalho.com.br/JavaCalloutProxy"/>
 </wsdl:port>
 </wsdl:service>
 
</wsdl:definitions>

Este é o WSDL que usaremos para criar o nosso Proxy

Obs: Aqui não há nada de mais, será apenas um WSDL com um elemento no Request e também retornando uma mensagem no nosso Response

Agora na sua pasta Proxy (Se não tiver fique a vontade para criar ou não a pasta) clique com o botão direito e clique em New e depois em Proxy Service 

Em File Name dê o nome de JavaCalloutProxy e clique em Finish

Imagem Blog UansCarvalho

Agora na Aba General clique em Browse na opção WSDL Web Service e posteriormente clique em JavaCalloutSoapPort(port) conforme abaixo, depois clique em OK

Imagem Blog UansCarvalho

Agora na guia MessageFlow arraste um Operational Branch abaixo do JavaCalloutProxy conforme abaixo:

Imagem Blog UansCarvalho

Abaixo da operação obterNome arraste um Pipeline Pair

Imagem Blog UansCarvalho

Agora arraste um Stage abaixo do Request Pipeline e renomeie para stage_request e depois arraste outro Stage abaixo do Response Pipeline e renomeie para stage_response.

Imagem Blog UansCarvalho

Agora dentro do seu stage_request arraste um Assign e abaixo dele arraste um Java Callout

Imagem Blog UansCarvalho

Clique então primeiro no Assign e em Variable na guia Properties coloque nome e depois clique em <Expression>

Imagem Blog UansCarvalho

Na caixa que abrirá expanda o body que estará em Variable Structures do seu lado direito até chegar no nome conforme abaixo e arraste para sua esquerda e depois clique em OK

Imagem Blog UansCarvalho

Ficará conforme abaixo:

Imagem Blog UansCarvalho

Clique agora na caixa Java Callout e abaixo clique em Browse, então abrirá uma caixa onde selecionaremos o nosso BlogUans.jar, depois clique em OK

Imagem Blog UansCarvalho

Na nova caixa que abrirá clique no nosso método conforme abaixo e clique em OK

Imagem Blog UansCarvalho

Abaixo clique em Expression:* e coloque o valor data($nome) que será nosso valor de Request que passaremos para o metodo JAVA, depois em Result Value coloque o valor mensagem que será onde armazenaremos nosso Response do JAVA

Imagem Blog UansCarvalho

Agora no stage_response arraste um Replace e coloque os seguintes valores:

  • XPath: .
  • In Variable: body
  • Expression:
    <jav:obterNomeResponse>
     <mensagem>{$mensagem}</mensagem>
    </jav:obterNomeResponse>
  • Replace node contents

Imagem Blog UansCarvalho

Salve tudo, e faça o Publish do seu Proxy

Vá no sbconsole e execute o seu JavaCalloutProxy passando o valor UANS na request conforme abaixo:

Imagem Blog UansCarvalho

Veja abaixo a resposta:

Olá UANS

Imagem Blog UansCarvalho

Duvidas ? Deixe seu comentário e faça download do Projeto  :-)

 

Abraços e até a Próxima

/:-D