Tags

, , , , , , , , , , ,

Um processo BPEL pode receber um anexo (Attachment) MIME juntamente com um Payload. O anexo pode estar em qualquer formato (Por exemplo, DOC, PDF, JPEG, XML, Texto, e assim por diante).

Vamos neste primeiro momento enviar um arquivo do tipo JPEG ao BPEL e gravá-lo em um Banco de Dados usando a função ora:getAttachmentContent do BPEL

A grande jogada para fazermos isso está nas definições do WSDL, o restante será muito tranquilo.

Vamos a definição do WSDL por partes:

Aqui teremos as operações de Request e Response normalmente, no Request enviaremos um ID de Transação.

No Response receberemos um código e uma mensagem de erro ou sucesso da nossa operação de Gravação.

Imagem Blog UansCarvalho

Abaixo terá um detalhe muito importante na definição das mensagens onde estará o nosso “anexo” que deverá ser do tipo “binário”

Imagem Blog UansCarvalho

Logo Abaixo também teremos outro passo muito importante do nosso WSDL que será no “input” do nosso “operation”, veja que é imprescindível que esteja entre uma tag do tipo <mime:multipartRelated>

Imagem Blog UansCarvalho

Abaixo segue o nosso WSDL completo:

Imagem Blog UansCarvalho

Imagem Blog UansCarvalho

WSDL OK.

Agora vamos criar um DBAdapter para realizar a gravação do nosso arquivo.

Observação: o campo da tabela no banco de dados onde iremos gravar o arquivo deverá ser do tipo BLOB

Abaixo um DBAdapter criado com o nome GravaArquivoDBAdapter

Imagem Blog UansCarvalho

Agora vamos criar um BPEL baseado em nosso WSDL criado anteriormente e ligarmos em nosso novo DBAdapter.

Imagem Blog UansCarvalho

Agora abra o BPEL e arraste um Assign para iniciarmos nossas variáveis e um Invoke para nosso DBAdapter:

Imagem Blog UansCarvalho

Após isso arraste mais um Assign abaixo do Invoke para colocarmos uma mensagem de sucesso caso nossa imagem seja gravada com sucesso e adicione também um CatchAll com outro Assign em caso de nossa imagem não ser gravada conforme abaixo:

Imagem Blog UansCarvalho

Vamos iniciar nossas variáveis:

  1. Ligue o idTransacao do input do seu WSDL com o input da sua variável criada para seu Invoke
  2. Ainda no seu input da variável do seu Invoke arraste uma Expression para ela e coloque o código abaixo

ora:getAttachmentContent(“inputVariable”,”anexo”)

Então ficaremos assim:

Imagem Blog UansCarvalho

Preencha sua Variável abaixo do Invoke caso a imagem seja gravada com sucesso.

Imagem Blog UansCarvalho

Pronto.. Agora realize o deploy localmente e vamos testá-lo.

Primeiro no EM pegue o WSDL do seu BPEL

Imagem Blog UansCarvalho

Para testarmos, vamos enviar um arquivo do tipo JPEG através do SOAUI, primeiro vamos inserir o WSDL do nosso projeto conforme abaixo:

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

Agora clique no sinal + e será aberto um popup para que você localize a imagem que deseja inserir, no meu caso Imagem.jpeg

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

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.

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

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

Imagem Blog UansCarvalho

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

Abraços e até a Próxima

/:-D