# XML/Web service

XML
Copertina Tutti i moduli · Sviluppo
PrefazioneXML/Prefazione
* IntroduzioneXML/Introduzione
* Entità singoleXML/Entità singole
* Strutture dati di baseXML/Strutture dati di base
* Relazione uno-moltiXML/Relazione uno-molti
* Relazione uno-unoXML/Relazione uno-uno
* Relazione molti-moltiXML/Relazione molti-molti
* Relazioni ricorsiveXML/Relazioni ricorsive
* Schemi di datiXML/Schemi di dati
* Document Type Definition (DTD)XML/DTD
* XHTMLXML/XHTML
* XPathXML/XPath
* XLinkXML/XLink
* CSSXML/CSS
* XSLT e fogli di stileXML/XSLT e fogli di stile
* CocoonXML/Cocoon
* Parsing di file XMLXML/Parsing di file XML
* XULXML/XUL
* Asynchronous JavaScript and XML (AJAX)XML/AJAX
* Web serviceXML/Web service
* XMLHttpRequestXML/XMLHttpRequest
* Database e XMLXML/Database e XML
* SVGXML/SVG
* VoiceXMLXML/VoiceXML
* DocBookXML/DocBook
* SMILXML/SMIL
* XBRLXML/XBRL
* WDDX
* RPCXML/RPC
* RDFXML/RDF - Resource Description Framework
* RSSXML/RSS
* NamespaceXML/Namespace
* Gestire XML con MySQL
* XML EncryptionXML/XML Encryption
* XQueryXML/XQuery
* XML e JDBC
* XFormsXML/XForms
* OpenOffice.org e l'OpenDocument FormatXML/OpenOffice.org e l'OpenDocument Format
* KML e Google EarthXML/KML
* Lo standard ACORD - XML nel settore delle assicurazioniXML/ACORD
Modifica il sommario
Obiettivi di apprendimento
* Comprendere cosa sono i web service e a cosa servono
* Comprendere cos'è SOAP e per quali web service lo utilizzano
* Conoscere il linguaggio di descrizione dei web service e come leggere un file WSDL
* Conoscere lo standard Universal Description, Discovery and Integration (UDDI)
* Capire come utilizzare Java per connettersi a un servizio web
I web service (servizi web) sono una nuova generazione di applicazioni web. Sono applicazioni modulari, autosufficienti e autodescrittive, che possono essere pubblicate, localizzate e richiamate attraverso il web. I web service eseguono funzioni di qualsiasi tipo, da semplici richieste a processi aziendali complicati. Una volta distribuito un web service, altre applicazioni (e altri web service) possono rilevare e richiamare il servizio distribuito. I web service utilizzano XML per descrivere richiesta e risposta, e usano HTTP per il trasporto in rete.

## Panoramica dei web service

La principale differenza tra un web service e un'applicazione web riguarda la collaborazione. Le applicazioni web sono semplicemente applicazioni aziendali localizzate o richiamate tramite protocolli web. Allo stesso modo, i web service eseguono anche funzioni di calcolo da remoto su una rete. Tuttavia, i web service utilizzano protocolli internet con lo scopo specifico di abilitare il coordinamento tra macchina e macchina interoperativa.
I web service sono emersi come soluzione ai problemi associati al calcolo distribuito. Il calcolo distribuito è l'uso di sistemi multipli per eseguire una funzione piuttosto che avere un unico sistema per eseguirla. Le precedenti tecnologie utilizzate nel calcolo distribuito, principalmente CORBA (Common Object Request Broker Architecture) e DCOM (Distributed Component Object Model), presentavano alcune limitazioni. Ad esempio, nessuno dei due ha raggiunto la completa indipendenza dalla piattaforma o un facile trasporto sui firewall. Inoltre, DCOM non è indipendente dal fornitore, essendo un prodotto Microsoft.
Alcune delle esigenze primarie per uno standard di calcolo distribuito erano:
* supporto multipiattaforma per la comunicazione interna e quella Business to Business;
* massima concordanza possibile con l'infrastruttura internet esistente;
* Scalabilità, sia nel numero che nella complessità dei nodi;
* internalizzazione;
* tolleranza di fallimento;
* indipendenza del fornitore;
* idoneità a richieste banali e non banali.
Nel corso del tempo, i sistemi informativi aziendali sono diventati altamente configurati e differenziati. Ciò ha inevitabilmente reso l'interazione con il sistema estremamente costosa e lunga. Gli sviluppatori hanno allora iniziato a comprendere i vantaggi di standardizzare lo sviluppo dei web service. L'uso degli standard web sembrava essere un passo intuitivo e logico per raggiungere questi obiettivi. Gli standard web fornivano già un mezzo indipendente dalla piattaforma per la comunicazione di sistema e venivano prontamente accettati dagli utenti del sistema di informazione.
Il risultato finale è stato lo sviluppo dei web service. Un web service costituisce un ambiente distribuito, in cui è possibile accedere agli oggetti in remoto tramite interfacce standardizzate. Utilizza un modello a tre livelli, che definisce un fornitore di servizi, un utilizzatore di servizi e un broker di servizi. Ciò consente al web service di essere un rapporto libero, in modo che se un fornitore di servizi fallisce, il broker può sempre indirizzare i consumatori verso un altro. Allo stesso modo, ci sono molti broker e i consumatori possono quindi sempre trovarne uno disponibile. Per la comunicazione, i web service utilizzano standard web aperti: TCP/IP, HTTP e SOAP, quest'ultimo basato su XML.
A livelli superiori potrebbero essere aggiunte tecnologie come XAML, XLANG (supporto transazionale per transazioni web complesse che coinvolgono più web service) e XKMS (lavoro in corso di Microsoft e Verisign per supportare l'autenticazione e la registrazione).

## SOAP

Il protocollo SOAP (Simple Object Access Protocol) è un metodo per inviare informazioni da e verso i web service in un formato estensibile. SOAP può essere utilizzato per inviare informazioni o chiamate di procedure remote codificate come XML. Essenzialmente, SOAP funge da metodo di comunicazione universalmente accettato con i web service. Le aziende aderiscono alle convenzioni SOAP al fine di semplificare il processo di interazione con i web service.
Un messaggio SOAP può contenere un metodo di richiesta per richiamare un web service, oppure può contenere informazioni di risposta a una richiesta del web service.
L'adesione a questo layout nello sviluppo di web service indipendenti offre notevoli vantaggi alle aziende. A causa del fatto che le applicazioni web sono progettate per essere utilizzate da una miriade di attori, gli sviluppatori vogliono che siano facilmente adottabili. L'utilizzo di standard di comunicazione consolidati e familiari riduce in ultima analisi la quantità di impegno che gli utenti impiegano per interagire in modo efficace con un web service.
Il SOAP Envelope viene utilizzato per definire e organizzare il contenuto contenuto nei messaggi del web service. In primo luogo, il SOAP Envelope serve per indicare che il documento specificato verrà utilizzato per l'interazione di servizio. Contiene un'opzionale SOAP Header e un SOAP Body. I messaggi vengono inviati nel SOAP Body e la SOAP Header viene utilizzata per inviare altre informazioni che non sarebbero previste nel corpo. Ad esempio, se l'attributo SOAP:actor è presente nell'intestazione SOAP, indica chi è il destinatario del messaggio.
Una transazione di web service comporta una richiesta SOAP e una risposta SOAP. L'esempio che utilizzeremo è un web service fornito da Weather.gov. L'input è composto da latitudine, longitudine, una data di inizio, quanti sono i giorni delle informazioni di previsione desiderate e il formato dei dati. La richiesta SOAP sarà simile a questa:
Lo startDate è stato lasciato vuoto perché questo otterrà automaticamente i dati più recenti. Il tipo di dati del formato non è definito perché è definito nel documento WSDL.
La risposta SOAP è simile a questa.
SOAP gestisce i dati codificandoli dal lato del mittente e decodificandoli dal lato del destinatario. I tipi di dati gestiti da SOAP si basano sulla specifica dello schema XML W3C. I tipi semplici includono stringhe, numeri interi, float e doppi, mentre i tipi composti sono costituiti da tipi primitivi.
Poiché sono basati sul testo, i messaggi SOAP generalmente non hanno problemi a superare i firewall o altre barriere. Sono il modo ideale per passare informazioni da e verso i web service.

## Descrizione del servizio: WSDL

WSDL (Web Service Description Language) è stato creato per fornire informazioni su come connettersi e interrogare un web service specifico. Questo documento aderisce anche a rigide regole di formattazione e organizzazione. Tuttavia, i metodi, i parametri e le informazioni sul servizio sono specifici dell'applicazione. I web service offrono funzionalità diverse e contengono informazioni indipendenti, ma sono tutti organizzati allo stesso modo. Creando un'architettura standard per questi servizi, gli sviluppatori possono effettivamente richiamarli e utilizzarli con estrema facilità. Per utilizzare un web service, uno sviluppatore può seguire gli standard di progettazione del WSDL per determinare facilmente tutte le informazioni e le procedure associate al suo utilizzo.
In sostanza, un documento WSDL funge da istruzione per l'interazione con un web service. Non contiene alcuna logica applicativa, dando al servizio un livello di autonomia. Ciò consente agli utenti di interagire efficacemente con il servizio senza doverne comprendere il funzionamento interno.
Di seguito è riportato un esempio di file WSDL per un web service che fornisce una temperatura, dato un codice postale statunitense.
Il file WSDL definisce un servizio, composto da diversi endpoint, chiamati porte. La porta è composta da un indirizzo di rete e un binding (associazione).
Il binding identifica il tipo e il protocollo di binding per ogni operazione. In questo caso, utilizza il binding di tipo Remote Procedure Call, utilizzando SOAP.
I tipi di porta (portType) sono raccolte di operazioni astratte. In questo caso, l'operazione è getTemp.
Infine, i messaggi vengono utilizzati dalle operazioni per comunicare - in altre parole, per passare parametri e valori di ritorno.
Dal file WSDL, un utente dovrebbe essere in grado di accedere ai dati in un web service.
Per un'analisi più dettagliata di come questo particolare servizio web, visitare Weather.gov.

## Service Discovery: UDDI

Hai visto come è possibile utilizzare WSDL per condividere le definizioni di interfaccia per i web service; ma anzitutto, come si fa a trovare un web service? Esistono innumerevoli web service indipendenti sviluppati e gestiti da altrettante organizzazioni diverse. Adottando le pratiche e le metodologie del web service, gli sviluppatori hanno cercato di favorire il coinvolgimento e il riutilizzo creativo dei loro sistemi. È così diventato presto chiaro che c'era bisogno di un record numerato di questi servizi e delle rispettive posizioni. Queste informazioni consentono agli sviluppatori di sfruttare le migliori pratiche e i processi dei web service in modo rapido e semplice. Inoltre, disporre di un riferimento centrale delle attuali funzionalità del web service consente agli sviluppatori di evitare lo sviluppo di applicazioni ridondanti.
L'UDDI definisce i registri in cui i servizi possono essere pubblicati e trovati. La specifica UDDI è stata creata da Microsoft, Ariba e IBM. UDDI definisce una struttura dati e API (Application Programming Interface).
Nel modello a tre livelli menzionato prima, UDDI è il broker di servizi. La sua funzione è di consentire ai consumatori di servizi di trovare fornitori di servizi appropriati.
La connessione ai registri UDDI mediante Java può essere eseguita tramite l'API Java per i registri XML (JAXR). JAXR crea uno strato di astrazione, in modo che possa essere utilizzato con UDDI e altri tipi di registri XML, come ad esempio lo standard ebXML.

## Utilizzo di Java con i web service

Per eseguire un messaggio SOAP è necessario utilizzare un'applicazione per comunicare con il fornitore di servizi. Grazie alla sua flessibilità, è possibile utilizzare quasi tutti i linguaggi di programmazione per eseguire il messaggio SOAP. Per i nostri scopi, tuttavia, ci concentreremo sull'utilizzo di Java per interagire con i web service.
L'utilizzo di Java con i web service richiede alcune librerie esterne.
* Apache SOAP Toolkit
* Java Mail Framework
* JavaBeans Activation Framework
* Parser Xerces XML
Passiamo a utilizzare Java per interrogare il web service di temperatura di cui abbiamo parlato in precedenza.
Questo codice Java nasconde tutto il SOAP all'utente. Richiama l'oggetto target con nome e URL, e imposta il parametro zipcode. Ma come appare la richiesta SOAP sottostante?
Come vedi, la richiesta SOAP utilizza i parametri passati dalla chiamata Java per compilare la SOAP Envelope e indirizzare il messaggio. Allo stesso modo, la risposta ritorna nel programma Java come "70.0". Anche la risposta SOAP è nascosta dal programma Java.
Ecco un ulteriore esempio di utilizzo di Java e SOAP per interagire con i web service. Questo particolare web service è chiamato "US Zip Validator" e prende un codice di avviamento postale (in inglese ZipCode) come parametro, per restituire latitudine e longitudine corrispondenti. Quando si sviluppano applicazioni per interagire con i web service, il primo passaggio dovrebbe essere la revisione del documento WSDL.
Il documento WSDL per questo servizio si trova qui: http://www.webservicemart.com/uszip.asmx?WSDL
Questo documento conterrà tutte le istruzioni necessarie per interagire con il web service "US Zip Validator".

### SOAPClient4XG

Modificato da Duncan McAllister, da: http://www.ibm.com/developerworks/xml/library/x-soapcl/
Questa classe Java fa riferimento a un documento XML (SOAPRequest.xml), che viene utilizzato come messaggio SOAP. Questo deve essere incluso nella stessa cartella del progetto dell'applicazione Java che richiama il servizio.
Dopo aver esaminato il documento WSDL "US Zip Validator", è chiaro che vorremmo richiamare il metodo "getTemp". Queste informazioni sono contenute nel SOAP Body e includono i parametri appropriati.

### SOAPRequest.xml

Dopo un'interazione riuscita, il fornitore di web service fornirà una risposta simile nel formato alla richiesta dell'utente. Quando si sviluppa in NetBeans, eseguire questo progetto ed esaminare la successiva risposta del messaggio SOAP nella finestra di output di Tomcat.

## Web service con Netbeans

La versione di Netbeans utilizzata per questa spiegazione è 5.0.
Dopo l'apertura di Netbeans, fare clic sulla scheda "Runtime" nel riquadro di sinistra, quindi fare clic con il pulsante destro del mouse su "Web Services" e selezionare "Add Web Service". Nel campo "URL", inserisci l'indirizzo del file WSDL del servizio web, nel nostro esempio sopra riportato è "http://www.weather.gov/forecasts/xml/DWMLgen/wsdl/ndfdXML.wsdl" e fai clic su Get Web Service Description. Questo farà apparire le informazioni del servizio web.

## Note

* ↑ http://www.weather.gov/xml/