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>