Web Service esempio

Un requisito non funzionale di RubricaWeb è che il Web Tier deve accedere al servizio (rappresentato dalla logica di business) tramite Web Service.

Vediamo quindi cosa intendiamo per Web Service e come è possibile implementare questa tecnologia in JBoss.

  Caratteristiche principali

Un Web Service è un sistema software progettato per supportare l’interoperabilità tra diversi elaboratori.

Un Web Service offre una funzionalità, un servizio, ad altri client sulla rete attraverso un’interfaccia ben definita tramite il protocollo HTTP.

Una caratteristica fondamentale di un Web Service è quella di offrire un’interfaccia software basata su XML (descritta in un formato automaticamente elaborabile quale, ad esempio, il WSDL) tramite la quale comunica all’esterno le funzioni che mette a disposizione e le relative modalità di utilizzo. L’XML può essere utilizzato correttamente tra piattaforme differenti (Linux, Windows, Mac) e differenti linguaggi di programmazione.

Si può quindi dire che i Web Service sono basati su XML ed HTTP e che possono essere utilizzati su ogni piattaforma e con ogni tipo di software. Utilizzando tale interfaccia, altri sistemi possono interagire con il Web Service invocando le operazioni sfruttando messaggi SOAP: tali messaggi sono solitamente trasportati tramite il protocollo HTTP e formattati secondo lo standard XML.

I protocolli utilizzati

Il protocollo di base per i Web Service è HTTP. Questo protocollo si occupa di mettere in comunicazione il Web Service con l’applicazione che intende usufruire delle sue funzioni. I Web Service si basano su tre tecnologie fondamentali:

  • SOAP (Simple Object Access Protocol) per la comunicazione. Le interazioni con i Web Service sono basate sul Simple Object Access Protocol per la definizione dei messaggi XML.
  • WSDL (Web Services Description Language) per la descrizione dell’interfaccia del servizio. Il Web Service Definition Language (WSDL) è il modo standardizzato in cui viene descritto il servizio e in cui vengono mostrate le sue interfacce. Attraverso il WSDL è possibile conoscere i metodi forniti dal Web Service e quali sono i parametri di input ed output.
  • UDDI (Universal Description, Discovery and Integration) Un sistema per standardizzare i registry dei Web Service, una sorta di elenco dei Web Wervice disponibili.

Questi tre protocolli aperti XML-based sono alla base della interoperabilità tra i diversi sistemi software e tra le diverse piattaforme hardware.

In questo modo è possibile far coesistere per esempio un client scritto in C con un server scritto in Java.

  Apache Axis e Jboss

Axis è una framework di Apache Software Fondation che permette di creare, pubblicare e consumare Web Service in Java.

Axis è integrato nell’Application Server JBoss e l’operazione di pubblicazione di un WSDL avviene semplicemente inserendo le annotazioni @WebService e @WebMethod nei session bean della Web Application. Quando JBoss nella fase di deploy dell’applicazione ad esempio processa il session bean GestoreUtentiBean viene pubblicato il WSDL corrispondente, vediamone il codice:

Per ogni messaggio scambiato nell’ambito delle operazioni WSDL deve essere definito il tipo, e per definire i tipi WSDL usa l’elemento types.

Gli elementi message definiscono i messaggi, la base della costruzione di un Web Service con WSDL. I messaggi sono gli elementi che costituiscono gli input e gli output dei servizi, e possono contenere i tipi di dati complessi definiti nella sezione Type oppure semplici dati primitivi.

Gli elementi operation definiscono le operazioni, le funzionalità che saranno esposte dall’interfaccia del servizio. Gli elementi operation contengono elementi input, output e fault specificanti i messaggi scambiati durante l’operazione. In relazione con la programmazione distribuita (ad esempio RMI) le operazioni WSDL dei Web Service equivalgono ai singoli metodi di input e di output di RMI.

I collegamenti, definiti degli elementi binding, eseguono la mappatura tra il servizio ed il protocollo di comunicazione SOAP. Sono essenzialmente istanziazioni degli elementi portType (GestoreUtentiBeanBinding è un istanza del portType GestoreUtentiBean e contiene quindi tutte le operazioni definite precedentemente).

L’ultimo elemento di un file WSDL è la definizione del servizio, l’elemento service, che consente di raccogliere tutte le operazioni sotto un unico nome.

  Consumo del Web Service tramite Axis e l’IDE Eclipse

Un’altra funzionalità di AXIS è quella di “consumare” un WSDL. Partendo da un WSDL pubblicato è possibile generare in modo automatico lo stub (detto anche proxy) che verrà utilizzato dal client del servizio. Nel nostro caso, il client è il Web Tier (più specificatamente le servlet) di RubricaWeb, rappresentato dal modulo Web che in ambiente Java EE viene pubblicato in un pacchetto War. L’ambiente di sviluppo Eclipse permette di eseguire queste operazioni in maniera automatica creando un nuovo Web Service Client associato al modulo web dell’applicazione enterprise.

Per quanto riguarda RubricaWeb, la creazione del Web Service Client permette la generazione automatica delle seguenti interfacce:

  • GestoreUtentiBean
  • GestoreUtentiBeanService
  • GestoreContattiBean
  • GestoreContattiBeanService

e delle seguenti classi:

  • Utente
  • Contatto
  • GestoreUtentiBeanServiceLocator
  • GestoreUtentiBeanProxy
  • GestoreUtentiBeanBindingStub
  • GestoreContattiBeanServiceLocator
  • GestoreContattiBeanProxy
  • GestoreContattiBeanBindingStub

Questi elementi risiedono nel modulo Web che puó essere fisicamente separato dal modulo EJB. Vediamo un esempio per capirne il funzionamento.

La servlet ControlServlet lavora sull’oggetto gestoreUtenti (la servlet conosce le signature dei metodi grazie all’interfaccia GestoreUtentiBean):

GestoreUtentiBeanServiceLocator permette di identificare il servizio, contiene cioè l’URL con il riferimento all’EJB GestoreUtentiBean della logica di Business. La chiamata al metodo getGestoreUtentiBeanPort() su questo oggetto restituisce un riferimento ad un oggetto GestoreUtentiBeanBindingStub collegato a quell’indirizzo. I metodi che la servlet utilizza per operare, come ad esempio aggiungiUtente, permettono di inviare e ricevere messaggio SOAP con la logica di business dell’applicazione. Ecco una parte del codice del GestoreUtentiBeanServiceLocator:

Ecco il codice di esempio del metodo aggiungiUtente dell’oggetto GestoreUtentiBeanBindingStub:

Leave a Comment

Your email address will not be published.

*