Acessando web services com Pentaho DI

O pentaho data integration, ou kettle é uma ferramenta de ETL (Extract, transform, load) muito poderosa para extração, transformação/validação e carga de dados de uma fonte de origem para um destino.

A ferramenta já foi citada em outros posts aqui do blog, inclusive por mim. Os links encontram-se no final desse post.  

Dessa vez, vamos explorar um componente muito interessante chamado Web Services Lookup que, como o próprio nome indica, consulta informações de um web service, que deve seguir o padrão SOAP e, portanto, possuir um arquivo WSDL com a descrição dos serviços.

 

Descrição do cenário

Nesse post vamos criar uma transformação que consulta o web service de cálculo de prazo de entrega de encomendas dos correios. A descrição do serviço pode ser encontrado nesse link e o arquivo wsdl está disponível nesse link. A descrição e um teste online do serviço que vamos utilizar estão disponíveis nesse link.

 

Montando a transformação

1 – Vamos começar criando uma nova transformação. Clique no menu File > Novo > Transformação, ou aperte Ctrl + N.

Figura 1 - Nova transformação
Figura 1 – Nova transformação

 

2 – Inclua um componente Data Grid na área de trabalho da transformação. O componente está na pasta Input.

3 – Dê dois cliques no componente. Na janela que se abre, na aba Meta, defina as colunas “Cep Origem”, “Cep Destino” e “Cod Servico”, conforme Figura 2. Na aba Data, perceba que serão criadas 3 colunas exatamente com os nomes definidos na aba Meta. Na coluna “Cod Servico”, inclua o código “40010”, na coluna “Cep Origem” inclua o valor “68980000” e “Cep Destino”, inclua o valor “96255000”.

Figura 2 - Configurando data grid
Figura 2 – Configurando data grid

 

4 – Agora inclua o componente Web Services Lookup na transformação e conecte-o ao data grid, como na Figura 3.

Figura 3 - Conectando web services lookup com data grid
Figura 3 – Conectando web services lookup com data grid

 

5 – Dê dois cliques no componente Web Services Lookup. Na aba Web Service, vamos incluir as definições de acesso ao web service. Inclua a URL do WSDL no campo URL. Clique no botão Load. Perceba que os serviços disponíveis no WSDL foram carregados no campo “Operation“. Selecione a operação “CalcPrazo”. O restante das opções não precisa ser alterado.

Figura 4 - Configurando web services lookup
Figura 4 – Configurando web services lookup

 

6 – Ainda nos detalhes do componente web services lookup, perceba que existe uma aba “in“. Essa aba aparecerá sempre que a operação selecionada possuir parâmetros de entrada. No nosso caso, temos 3 parâmetros. Clique na aba “in” e configure na coluna “Name” o nome dos parâmetros que criamos no Data grid e na coluna “WS Name” inclua os nomes dos parâmetros, conforme Figura 5.

Figura 5 - Configurando parâmetros de entrada no componente web services lookup
Figura 5 – Configurando parâmetros de entrada no componente web services lookup

 

7 – Finalmente, perceba que existe também uma aba “CalcPrazoResult”. clique na aba e clique no botão “Obtém campos”. Aparecerá o elemento raiz da resposta do web service, conforme está descrito no WSDL.

Figura 6 - Configurando parâmetro de saída no componente web services lookup
Figura 6 – Configurando parâmetro de saída no componente web services lookup

 

8 – Com isso, já estamos lendo as informações do web service dos correios, mas perceba que a resposta é um elemento complexo, ou seja, receberemos um XML. Para extrair as informações que queremos, teremos que utilizar um outro elemento chamado “Get data from XML“, localizado na pasta “Input“.

 

9 – Inclua o componente “Get data from XML” e conecte-o ao componente “Web Services Lookup“.

Figura 7 - Incluíndo componente Get data from XML
Figura 7 – Incluíndo componente Get data from XML

 

10 – Dê dois cliques no “Get data from XML“. Na janela que se abre, marque a opção “XML source is defined in a field?” e no campo “Get XML source from a field“, selecione a variável “CalcPrazoResult”. Essa variável contém a resposta em XML retornada pelo web service, que configuramos na aba “CalcPrazoResult” do componente “Web Services Lookup“.

Figura 8 - Configurando o componente Get data from XML
Figura 8 – Configurando o componente Get data from XML

 

11 – Na aba “Content“, precisamos definir o XPath onde se encontram as informações que queremos extrair. Na página da documentação da operação, nesse link, existem alguns modelos de resposta da operação. Perceba que queremos recuperar os valores que estão dentro do XPath “/CalcPrazoResult/Servicos/cServico”, então vamos preencher isso no campo “Loop XPath“.

Figura 9 - Configurando XPath no Get data from XML
Figura 9 – Configurando XPath no Get data from XML

 

12 – Na aba “Fields” vamos definir os elementos que queremos ler do XML, conforme Figura 10.

Figura 10 - Configurando elementos no Get data from XML
Figura 10 – Configurando elementos no Get data from XML

 

13 – Agora basta incluir um componente de saída, para vermos o resultado. Incluí um componente Microsoft Excel Output.

Figura 11 - Incluindo componente de saída
Figura 11 – Incluindo componente de saída

 

14 – A transformação completa é exibida na Figura 12. Agora só rodar a transformação e conferir o resultado.

Figura 12 - Transformação completa
Figura 12 – Transformação completa

 

Observação: Para quem ficou curioso, o cep de origem utilizado no exemplo é do Oiapoque, no Amapá e o cep de destino de Chuí, no Rio Grande do Sul. O prazo de entrega é de 5 dias para SEDEX Varejo. Os códigos de serviço podem ser consultados na documentação dos correios, nesse link.

 

Links para consulta

Por MARCIA TANIMOTO

Formada em Informática - UEM/Maringá. Analista de Sistemas, apaixonada pela profissão, curiosa e MATERANA de coração.

Postado em: 29 de junho de 2016

Confira outros artigos do nosso blog

[Webinar] Profile de aplicações Java com Oracle Mission Control e Flight Recorder

24 de julho de 2017

Danival Calegari

Criando Mocks de serviços REST com SoapUI

27 de junho de 2017

Monise Costa

Three laws that enable agile software development

09 de março de 2017

Celso Gonçalves Junior

Medindo performance de uma API REST

21 de fevereiro de 2017

Monise Costa

Deixe seu comentário