Trabalhando com Attachment no OSB 11g
Neste Post 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 mensagensXML. 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
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 tipoString
Abaixo algumas observações:
- No biding estou usando o style=”rpc” e não o document
- Em input estou usando as tags <mime:multipartRelated> e dentro desta a tag <mime:part>
- Dentro de <mime:part> 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
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.
<br:GravarArquivoRequest xmlns:br=”br.com.uans.services.GravaArquivoDBBpel”>
<br:idTransacao>{data($body/soap:submitAttachment/submitAttachment/idArquivoTransacao)}</br:idTransacao>
</br:GravarArquivoRequest>
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
Obs: Veja o Post: Gravando um anexo (Attachment) no Banco de Dados com o BPEL
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:
<soap:submitAttachmentResponse>
<submitAttachmentResponse>
<response>ARQUIVO GRAVADO COM SUCESSO</response>
</submitAttachmentResponse>
</soap:submitAttachmentResponse>
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