Tags
bus, JAR, Java, Java Callout, Oracle, Oracle Service Bus, OSB
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:
Agora com o botão direito clique em BlogUans e depois na opção Exportar…
Depois clique na opção JAR file e clique em Next> conforme abaixo:
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
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.
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
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
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
Agora na guia MessageFlow arraste um Operational Branch abaixo do JavaCalloutProxy conforme abaixo:
Abaixo da operação obterNome arraste um Pipeline Pair
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.
Agora dentro do seu stage_request arraste um Assign e abaixo dele arraste um Java Callout
Clique então primeiro no Assign e em Variable na guia Properties coloque nome e depois clique em <Expression>
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
Ficará conforme abaixo:
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
Na nova caixa que abrirá clique no nosso método conforme abaixo e clique em OK
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
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
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:
Veja abaixo a resposta:
Olá UANS
Duvidas ? Deixe seu comentário e faça download do Projeto
Abraços e até a Próxima
/:-D