Come consumare un servizio SOAP con Pentaho DI

Come consumare un servizio SOAP con PentahoDI

Quando abbiamo a che fare con aziende che usano, o intendono farlo, soluzioni software costruite sui principi SOA (Service-Oriented Architecture) e/o che espongono Servizi Web per l’accesso alle loro strutture dati, diventa indispensabile dotarsi di strumenti di ETL (Extract, Transform, Load) in grado di operare come client SOAP/REST.

In questo articolo vedremo come sia possibile utilizzare lo step HTTP di Pentaho Data Integration per consumare un servizio SOAP.

Il progetto PentahoDiLabs sviluppato, che utilizza un web service di “Controllo delle Partite Iva comunitario” messo a disposizione dalla Commissione Europea, è stato pubblicato su GitHub e sviluppato/testato su un laptop con i seguenti software:

Il Web Service

Il documento WSDL del servizio l’ho trovato sul sito dell’Agenzia delle Entrate a questo indirizzo dove fondamentalmente viene spiegato cosa fa.

In estrema sintesi utilizzando tale servizio possiamo verificare se il numero identificativo IVA inserito è formalmente corretto e corrisponde ad un operatore abilitato ai fini intracomunitari ed anche ottenerne la denominazione;

Test del service con SOAP UI

Uno dei più popolari tool per testare Web Service è SOAP UI. Questo software può essere utilizzato anche per copiare la busta SOAP da inoltrare al servizio.
Lanciamo Soap UI e selezioniamo File > New SOAP Project (così come mostrato in Figura 1).

Figura 1 - Creazione di un nuovo progetto SOAP a partire da un documento WSDL

 

Forniamo un nome per il progetto, la URI (Uniform Resource Identifier) del WSDL e poi clicchiamo su OK (così come indicato nella Figura 2 d'esempio).

Figura 2 - Impostazione del nome progetto e URI del documento WSDL

Il tool costruirà, parsando la descrizione WSDL, una richiesta di esempio che potremmo andare a modificare per testare il servizio e visualizzare la risposta.

Nel caso specifico il tool proporrà:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:checkVat>
         <urn:countryCode>?</urn:countryCode>
         <urn:vatNumber>?</urn:vatNumber>
      </urn:checkVat>
   </soapenv:Body>
</soapenv:Envelope>

Noi andremo a sostituire:

countryCode = IT
vatNumber = partita iva da verificare

Successivamente avvieremo la richiesta di esecuzione (tasto play) per ottenere la risposta visibile in Figura 3.

Figura 3 - Esecuzione della richiesta di verifica VAT via Web Services

La trasformazione Pentaho DI

Nella trasformazione consumeSoapWebService_v1 utilizziamo in sequenza i seguenti step:

Step Scopo
DataGrid Popola input richiesta
Modified Javascript Value Crea requestXML
HTTP Post Lancia Web Service
Write to log Scrive nel log la risposta

Il primo Step ha il solo scopo di popolare l’input della richiesta. Volendo replicare la richiesta svolta con SOAP UI lo configureremo come nella figura seguente.

Figura 4 - Configurazione parametri d'input per lo step "Parametri WS"

Il secondo step ha invece il compito di creare la requestXML che possiamo anch’essa copiare ed incollare dal tool di test, facendo attenzione a sostituire i valori con le variabili provenienti dal flusso (nel nostro caso countryCode e vatNumber).

Figura 5 - Configurazione dello step "Generate SOAP Request"
var request = new XML()

// Request XML generated by SOAP UI
//
// Change the request to match your needs.
// Inject arguments in the place of the question marks like this:
// 
// var eMail = "someone@example.com";
// request=...
//     <ws:email>{eMail}</ws:email> ...;
// 
// where eMail is the name of a scoped JS variable.  That includes input fields.
//
// See also: https://developer.mozilla.org/En/E4X
// 
//

request = <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="urn:ec.europa.eu:taxud:vies:services:checkVat:types">
   <soapenv:Header/>
   <soapenv:Body>
      <urn:checkVat>
         <urn:countryCode>{countryCode}</urn:countryCode>
         <urn:vatNumber>{vatNumber}</urn:vatNumber>
      </urn:checkVat>
   </soapenv:Body>
</soapenv:Envelope>;

var requestXml=request.toXMLString();

Il terzo step consuma il web service inoltrando via post all’end point del servizio la request XML

Figura 6 - Configurazione dello step "HTTP Post" per la chiamata al Web Service

Il quarto step mette in evidenza nel log la risposta

Figura 7 - Configurazione dello step "Write to log" Figura 8 - Esecuzione della trasformazione appena creata

Suggerimenti per consumare la risposta

Nell’esempio precedente manca il passaggio fondamentale per considerare questa trasformazione un client SOAP ovvero il parsing della risposta.

Quando si utilizzano strumenti che mirano ad ingegnerizzare le attività di sviluppo software, l’imperativo deve essere scrivere meno codice possibile. Per questo motivo piuttosto che utilizzare la soluzione (“istintiva” per uno sviluppatore) di consumare la risposta del servizio utilizzando un altro step Modified Javascript Value (soluzione possibile) nel quale andare a parsare la response XML, preferisco operare un workaround per evitare la scrittura di codice, che consiste nel:

  1. salvare la risposta XML in un file di testo
  2. utilizzare lo step Get Data From XML per parsare la risposta con tutte le facility che lo strumento fornisce
Figura 9 - Configurazione sezione File dello step "Get data from XML" Figura 10 - Configurazione sezione Content dello step "Get data from XML" Figura 11 - Configurazione sezione Fields dello step "Get data from XML" Figura 12 - Test configurazione dello step "Get data from XML"

Definito il risultato che vogliamo ottenere, possiamo attaccare lo step nella nostra trasformazione e modificare l’input dello step da “file” a “campo” (responseXML).

Figura 13 - Aggiunta dello step "Get data from XML" alla trasformazione

Modifichiamo anche lo step log per evidenziare il risultato che si ottiene

Figura 14 - Modifica configurazione dello step "Write to log" Figura 15 - Esecuzione della trasformazione con evidenza in console delle informazioni ricevute dal Web Service

A questo punto utilizzare i valori di risposta del service in un job chiamante sarà facile come bere un bicchier d’acqua.

Conclusioni

Ovviamente esistono numerosi modi di consumare servizi SOAP in modo più o meno veloce, ma l’utilizzo congiunto di SOAP UI e Pentaho DI rende l’operazione davvero semplice. Se non siete ancora stanchi di leggere, sul mio blog ho pubblicato nel corso del tempo articoli che trattano Pentaho DI.

0 Condivisioni

Alessandro Nizzo

Temporary IT Manager | BPM consultant Ingegnere informatico libero professionista, dal 2000 aiuto le organizzazioni ad integrare persone, processi e sistemi.

Potrebbero interessarti anche...