Trabalhando com Attachment no Oracle Service Bus 11g

Por Uanderson Carvalho
Postado em Fevereiro 2015
Revisado por Marcelo Pivovar - Solution Architect

Introdução

Neste artigo irei descrever como faremos para receber um Attachment no OSB e passa-lo ao nosso BPEL para gravação em um Banco de dados.

Para nosso entendimento, os Attachments podem ser de dois tipos.

  • Attachments inline: Aqui, o arquivo anexo será codificado em algum formato, digamos formato base64 e enviá-lo como parte da principal da mensagem XML.
  • Attachments MIME: Aqui o anexo será enviado como parte de cabeçalhos em mensagens XML. Os anexos podem ser recebidos em vários formatos pelo OSB, mas um dos formatos comum é base64 codificado com formato binário.

No OSB tenho a estrutura de pastas conforme abaixo, sugiro que você também tenha para separarmos nossos Proxy, WSDL, Business, XSD e etc..

  • Business
  • Proxy
  • WSDL
  • XSD

Na imagem abaixo estou supondo que nós já tenhamos um Projeto criado, no meu caso com o nome OSBProject

Dentro da pasta WSDL crie um arquivo chamado Attachment.wsdl

Copie o conteúdo do WSDL fazendo o Download do arquivo Attachment.wsdl

Abaixo uma breve explicação sobre o conteúdo do arquivo:

Request:

Aqui nesta primeira parte, em nosso SubmitAttachmentRequestTypevamos precisar que seja passado um ID deste arquivo que poderá ser uma transação qualquer do tipo integer e mais abaixo no element name=”anexo” estou dizendo que este arquivo é do tipo base64Binary

Prossiga e espere terminar a instalação.

Ainda no Message de Request, estou usando o name=”anexo” do tipo base64Binary

Response:

No Response abaixo vou definir apenas uma mensagem de resposta que pode ser do tipo String

Abaixo algumas observações:

No biding estou usando o style=”rpc” e não o document

Em input estou usando as tags e dentro desta a tag

Dentro de uso a tag mime:content para dizer qual será o tipo de nosso attachment (part=”anexo”) que neste caso estou colocando“*/*” onde poderá ser de vários tipos DOC, PDF, JPEG, XML, Texto, e assim por diante).

Agora vamos criar um Proxy baseado neste WSDL:

Em cima da Pasta Proxy, clique agora no Menu e selecione File >> New >>File

Em File Name: Coloque AttachmentPS e clique em Finish

Para a implementação em produção, faça a instalação de pelo menos dois servidores CMAN para não haver um ponto único de falha da arquitetura. Nesse caso, repita o mesmo procedimento de instalação realizado para o servidor oralab1 em um novo servidor, por exemplo o oralab2.

Abaixo na guia General, clique em WSDL Web Service e clique em Browse

Selecione a opção SOAPwithAttachmentSOAP (port) e clique em OK

Na tela abaixo clique em Yes

Agora vá até a guia Message Flow e sobre o AttachmentPS insira um Pipeline Pair

Abaixo de Request Pipeline, adicione um Stage e dentro dele adicione um Replace

Abaixo na guia Properties adicione os seguintes parâmetros:

  • XPath: . (coloque um ponto)
  • In Variable: body
  • selecione a opção Replace node contentes

Em Expression: coloque conforme abaixo pois será o payload responsável por passar ao nosso BPEL os parâmetros necessários para gravação de nosso arquivo que no caso será um ID de Transação de um arquivo de Imagem.


						
						
{data($body/soap:submitAttachment/submitAttachment/idArquivoTransacao)}

						
						

Logo abaixo do Replace adicione um Publish conforme abaixo e na guia Properties clique em Browse para adicionar o nosso serviço BPEL que fará a gravação do arquivo.

No meu caso estou adicionando o GravaArquivoBusiness que é o serviço do BPEL exposto o qual fará a gravação do arquivo

Agora abaixo de Request Action (dentro de Publish) adicione um Routing Options e na guia Properties adicione os seguinte parâmetros:
Marque a opção Qos: e selecione Exactly Once
Marque a opção Mode: e selecione a opção Request-Response

Agora no Response Pipeline adicione um Stage e dentro do Stage um Replace

Abaixo na guia Properties adicione os seguintes parâmetros:

  • XPath: . (coloque um ponto)
  • In Variable: body
  • selecione a opção Replace node contentes

Em Expression: coloque conforme abaixo pois será o payload de resposta de nosso serviço:


						
						

ARQUIVO GRAVADO COM SUCESSO



 
						
						

Feito isso, caso não tenha feito ainda, você já pode fazer o Publish:

Certifique-se de que seu Publish foi executado com sucesso, pois deverá ficar conforme acima (Started, Synchronized)
Para testarmos, vamos enviar um arquivo do tipo JPEG através do SOAUI, primeiro vamos inserir o WSDL do nosso projeto conforme abaixo:

Abra o Request e em idTransacao coloque o numero 1 para criarmos uma transação com numero 1, e clique em Attachments conforme abaixo:

Agora clique no sinal +

Será aberto um popup para que você localize a imagem que deseja inserir, no meu caso Imagem.jpeg

Clique em Open e outro popup será aberto conforme abaixo, clique em Yes em seguida para que a imagem seja anexada ao SoapUi

Veja que a imagem agora foi anexada e logo abaixo em attachments está com o numero 1
Porem veja que na guia Part conforme indica a seta vermelha, está vazia e em Type está UNKNOWN.

Clique em Part e escolha a opção anexo e veja que em Type irá automaticamente mudar para MIME.

Agora no seu SoapUi clique em Submit (setinha > verde) para executar o nosso processo.

Caso sua mensagem seja essa, o nosso processo foi concluído com sucesso.

Agora basta conferir no seu banco de Dados o ID da transação referente a imagem que inserirmos.

Abraços e até a Próxima!

Uanderson Carvalho é um Especialista Oracle SOA com foco em integração entre sistemas legado utilizando as tecnologias Oracle Fusion Middleware e SOA, Pós-graduado em Administração de Banco de Dados Oracle. Certificado pela Oracle como: Oracle SOA Suite 11g Certified Implementation Specialist.

Este artigo foi revisto pela equipe de produtos Oracle e está em conformidade com as normas e práticas para o uso de produtos Oracle.