Corso di Laurea in Informatica Reti e Sicurezza Informatica Esercitazione 1 Prof.Mario Cannataro Ing. Giuseppe Pirrò Sommario Introduzione al corso Introduzione ai Web Services Installazione di Tomcat Le librerie AXIS Installazione di AXIS su Tomcat Ambiente di sviluppo di Web Services I Web Services Un Servizio Web (Web Service) è un’applicazione on-line Consente l’interoperabilità di sistemi eterogenei Consente di sfruttare risorse che non sono localmente disponibili Web Server È il processo che tipicamente viene utilizzato da una macchina server per rendere disponibile un insieme di risorse tra le quali si collocano anche i Servizi Web Apache Tomcat Tomcat è un Servlet/JSP engine. Esso può essere usato da solo (principalmente utile agli sviluppatori per testing e debugging) o in congiunzione con uno tra i più diffusi web server (per le applicazioni real world), tra i quali: - Apache, versione 1.3 o successiva - Microsoft Internet Information Server Requisiti Tomcat richiede per il suo funzionamento un Java Runtime Enviroment JRE 1.1 o successivo. E’ possibile scaricare l'archivio nel formato più adatto al proprio sistema operativo da http://java.sun.com/j2se/1.5.0/download.jsp Installazione di Tomcat Prelevare il file di installazione direttamente dal sito web del progetto (http://tomcat.apache.org/) Tomcat di default resta in ascolto sulla porta 8080. Se sul vostro sistema tale porta è già in uso, aprite il file server.xml contenuto nella directory /web/tomcat/conf e cambiatela ad esempio in 10080, come illustrato sotto: <Connector className="org.apache.tomcat.service.PoolTcpConnector"> <Parameter name="handler" value="org.apache.tomcat.service.http.HttpConnectionHandler"/> <Parameter name="port" value="10080"/> </Connector> Settare in /etc/profile le relative variabili d'ambiente: A questo punto aprite il browser preferito e digitate: http://nomemacchina:10080/. Se il browser visualizza la pagina di default di Tomcat, l'installazione è andata a buon fine. Avvio e arresto di Tomcat Per avviare Tomcat usare lo script o il file batch che si trovano nella directory TOMCAT_HOME/bin. - Su UNIX utilizzare % startup.sh - Su Windows utilizzare C:\TOMCAT_HOME\bin>startup Per arrestare Tomcat, ci sono due comandi che si trovano nella stessa directory dei comandi di avvio. - Su UNIX utilizzare % shutdown.sh - Su Windows utilizzare C:\TOMCAT_HOME\bin>shutdown Da Windows è possibile l’arresto e l’avvio dall’elenco dei servizi Struttura delle directory di Tomcat Nome della directory Descrizione bin Contiene gli script/batch per lo startup-shutdownd common Le classi contenute nelle sue sotto-directory sono disponibili sia a Tomcat che a tutte le web-application in esecuzione sotto Tomcat conf Contiene i file di configurazione tra cui server.xml che è il principale file di configurazione di Tomcat, e web.xml che serve a settare i valori di default per le varie applicazioni gestite da Tomcat doc lib Contiene vari documenti riguardanti Tomcat Contiene diversi file jar usati da Tomcat . Su UNIX ogni file in questa directory viene appeso al classpath. logs webapps Directory utilizzata per i file di log è la cartella predefinita da Tomcat in cui vengono inserite tutte le web-application (tutto ciò che viene copiato qui è automaticamente deployed) AXIS Axis è il motore open source più famoso per la creazione di WebServices in Java. E’ un progetto dell'Apache Software Foundation e deriva da SOAP4J della IBM In combinazione con Tomcat rappresenta uno strumento molto diffuso per la realizzazione di web services. Requisiti Server Web (tomcat) Dopo averlo installato dobbiamo scaricare Axis dal sito di apache, http://ws.apache.org/axis/. Unzippiamo questo file e copiamo il tutto nella cartella TOMCAT_HOME/webapps (TOMCAT_HOME è dove abbiamo installato Tomcat). Dopo averlo copiato dovete avviare Tomcat e puntare il browser all'indirizzo http://localhost:8080/axis. In questa pagina troverete lo stato dell'installazione di Axis. Se manca qualche libreria vi verrà indicato e voi dovrete copiarle dentro la cartella TOMCAT_HOME/webapps/axis/WEB-INF/lib. Una volta che non viene indicato più nessun errore abbiamo completato la corretta installazione di Axis. Le librerie AXIS - Verifica Installazione Puntare il browser all’URL: http://localhost:8080/axis Le librerie AXIS - Validazione Verificare che vengano caricate correttamente tutte le librerie cliccando sul link Validation presente nella home page di Axis. Verrà mostrata una pagina simile a quella seguente, nella quale non dovranno esserci messaggi di errori o di warning Le librerie AXIS – Verifica WSDL Cliccare su una delle voci WSDl dei servizi già disponibili per verificare la generazione del WSDL relativo al servizio Le librerie AXIS - Lista servizi attivati Per conoscere la lista dei servizi attivi basta cliccare sul link list nella home page di AXIS REALIZZAZIONE DI WEB SERVICES Scrittura di web Services Un Web Service si realizza ( ad esempio in Java) attraverso la scrittura di una classe che implementi gli obbiettivi del servizio. Una volta scritta la classe si procede alla messa in opera del servizio. - Deploy del servizio Metodi di Deploy di un Web Service 1. 2. Esistono due modi per effettuare il deploy del servizio: Metodo diretto Metodo semplificato Deploy di un Web Service -Metodo diretto Si posiziona la classe che implementa il servizio in: <TOMCAT_HOME>\webapps\axis\WEB-INF\classes\miopackage\myservice.class Richiede la stesura di un file di deployment del tipo myservice.wsdd Wsdd: Web Service Deployment Descriptor In questo modo si istruisce l’engine di Axis affinché in corrispondenza di una determinata richiesta (sottoforma di messaggio SOAP), istanzi la classe e ne richiami il relativo metodo Deploy di un Web Service -Metodo diretto Struttura di un file wsdd (deploy.wsdd): <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="urn:myserviceWS" provider="java:RPC"> <parameter name="className" value="miopackage.myserviceWS"/> <parameter name="allowedMethods" value=“mymethod"/> <parameter name="scope" value="Request"/> </service> </deployment> Deploy di un Web Service -Metodo diretto Contenuto di un file wsdd: Name: indica il nome del servizio web Provider : java:RPC” indica ad Axis di pubblicare il servizio secondo un meccanismo RPC Parameter className: indica il nome della classe che implementa il servizio Parameter allowedMethods: metodi resi disponibili per essere invocati (* indica tutti i metodi della classe) Parameter scope: definisce il ciclo di vita della classe che in questo caso viene istanziata, utilizzata e distrutta ad ogni richiesta, altri valori sono Application e Session Deploy di un Web Service -Metodo diretto 1. Per effettuare il deploy: Aggiungere al classpath le seguenti classi: • axis.jar • jaxrpc.jar • saaj.jar • commons-logging.jar • commons-discovery.jar • log4j-1.2.8.jar 2. Lanciare il comando: java org.apache.axis.client.AdminClient deploy.wsdd La classe AdminClient eseguirà il deployment leggendo i metadati dal file deploy.wsdd indicato comunicandoli automaticamente all’Axis engine Deploy di un Web Service - Il comando AdminClient Di seguito è mostrata la sintassi da usare per pubblicare il servizio da riga di comando. Da notare che si è assunto che le variabili di sistema, PATH e CLASSPATH, siano settate correttamente. Deploy di un Web Service -Metodo diretto Controllare la presenza del nuovo servizio: http://localhost:8080/axis/servlet/AxisServlet Deploy di un Web Service -Metodo alternativo Utilizzo dell’estensione JWS (Java Web Service) La classe java che implementa il servizio viene automaticamente tradotta da AXIS che pubblicherà il WSDL corrispondente I servizi deployati in questo modo non vengono visualizzati nella lista dei servizi all’URL http://localhost:8080/axis/servlet/AxisServlet Per controllarne l’esistenza si deve puntare il browser all’indirizzo del WSDL Es. http://localhost:8084/axis/myserviceWS.jws?WSDL Deploy di un Web Service -Metodo alternativo 1. 2. 3. 4. Passi da compiere: Si parte dalla classe Java (file .java) Si rinomina il file in .jws Si posiziona il file in TOMCAT_HOME/webapps/axis Si riavvia Tomcat affinchè effettui tutte le operazioni di deploy ESEMPI PRATICI Esempio 1 - Creazione del servizio //File Esempio1.java package miopackage; /* Classe che implementa il servizio. */ public class SalutoWS{ /* Metodo che implementa il servizio. * Questo servizio restituisce una stringa di saluto. **/ public String saluto(String nome) { return “Ciao “+ nome + ” ! ”} ; } - Copiamo il file in: <TOMCAT_HOME>\webapps\axis\WEBINF\classes\miopackage\SalutoWS.class Prepariamo il file per il deployment Eseguire il comando AdminClient per pubblicare il servizio Controllare l’URL del nuovo servizio Esempio 1 - Creazione di un Client Ora che abbiamo creato il WebService non ci rimane che creare un Client che lo utilizzi. Il tutto si riduce a richiamare il metodo passando due parametri, ricevere la risposta, il tutto utilizzando le classi che ci offre Axis. Esempio 1 - Creazione di un Client 1. 2. 3. Il Client si realizza facendo uso dell’interfaccia Call della classe Service che fornisce un’istanza di tale classe. Inoltre è necessario tramite la lettura del WSDL: L’URL del servizio Il nome del servizio I parametri d’ingresso e di uscita Esempio 1 - Creazione di un Client import (vari) public class ClientSalutoWS { public static void main(String[] args) { String messaggio = ""; try { Call call = (Call) new Service().createCall(); call.setTargetEndpointAddress(new URL("http://localhost:8080/axis/services/")); call.setOperationName(new QName("urn:SalutoWS", "saluto")); Object rispostaWS = call.invoke(new Object[]{"Giuseppe"}); messaggio = "il Web service ha risposto: "+(String) rispostaWS;} catch (MalformedURLException ex) { messaggio = "errore: l'url non è esatta"; }catch (ServiceException ex) { messaggio = "errore: la creazione della chiamata è fallita"; }catch (RemoteException ex) { messaggio = "errore: l'invocazione del WS è fallita"; }finally{ System.out.println(messaggio); } } } Esempio 1 – Messaggio SOAP Request POST /axis/services/ HTTP/1.0 Content-Type: text/xml; charset=utf-8 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: Axis/1.1 Host: 127.0.0.1 Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Content-Length: 442 <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:saluto soapenv:encodingStyle=http://schemas.xmlsoap.org/soap/encoding/ xmlns:ns1="urn:SalutoWS"> <ns1:arg0 xsi:type="xsd:string">Giuseppe</ns1:arg0> </ns1:saluto> </soapenv:Body> </soapenv:Envelope> Esempio 1 – Messaggio SOAP Response HTTP/1.1 200 OK Content-Type: text/xml; charset=utf-8 Connection: close Date: Fri, 21 Nov 2003 16:10:50 GMT Server: Apache Tomcat/4.0.4-b2 (HTTP/1.1 Connector) <?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns1:salutoResponse soapenv:encodingStyle=http://schemas.xmlsoap.org/soap/encoding/ xmlns:ns1="urn:SalutoWS"> <ns1:salutoReturn xsi:type="xsd:string">Ciao Giuseppe!</ns1:salutoReturn> </ns1:salutoResponse> </soapenv:Body> </soapenv:Envelope>