Tags

, , , , , , , , , , ,

Em um post anterior eu escrevi “Como podemos salvar um anexo (Anexo) no banco de dados com o BPEL, mas neste post vou descrever como vamos receber um anexo em OSB e passa para o nosso BPEL para gravação em dados do Banco Mundial.

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

Imagem Blog Uans

Dentro da pasta WSDL crie um arquivo chamado Attachment.wsdl

Imagem Blog Uans

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 SubmitAttachmentRequestType vamos 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

Imagem Blog Uans

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

Imagem Blog Uans

Response:

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

Imagem Blog Uans

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

Imagem Blog Uans

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

Imagem Blog Uans

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

Imagem Blog Uans

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

Imagem Blog Uans

Na tela abaixo clique em Yes

Imagem Blog Uans

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

Imagem Blog Uans

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

Imagem Blog Uans

Abaixo na guia Properties adicione os seguintes parâmetros:

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

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>

Imagem Blog Uans

Imagem Blog Uans

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.

Imagem Blog Uans

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

Imagem Blog Uans

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

Imagem Blog Uans

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

Imagem Blog Uans

Abaixo na guia Properties adicione os seguintes parâmetros:

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

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:

Imagem Blog Uans

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:

Imagem Blog Uans

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 Uans

Agora clique no sinal +

Imagem Blog Uans

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

Imagem

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

Imagem

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

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

Imagem

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

Imagem Blog Uans

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

Imagem Blog Uans

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

imagem Blog Uans

 

Duvidas ? Deixe seu comentário e faça download deste Projeto 🙂

 

Abraços e até a Próxima

/:-D