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>