GPO ( Grupo de Profissionais Oracle )
A maior comunidade Oracle do Brasil !

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

A description...

Dentro da pasta WSDL crie um arquivo chamado Attachment.wsdl

A description...

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

A description...

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

A description...

Response:

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

A description...

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).

A description...

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

A description...

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

A description...

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

A description...

Na tela abaixo clique em Yes

A description...

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

A description...

A description...

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

A description...

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>

A description...

A description...


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.

A description...

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

A description...

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

A description...

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

A description...

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:

A description...

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:

A description...

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

A description...

Agora clique no sinal +

A description...

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

A description...

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

A description...

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.

A description...

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

A description...

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

A description...

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

A description...

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

A description...

Abraços e até a Próxima

Share

You may also like...

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *