a6- Esempio di Web Services in Axis

Web Services
Implementazione di un servizio Web
Authors
Vincenzo Capozzoli, Antonio Sabato Spinelli
Supervision
Gianluca Sabatini
Version
ver. 1.1
Released on
23/07/2008
Code
CA7-9LOT1J
Status
Draft
27/08/2008
Table of Content
1 2 3 Scope ______________________________________________________________ 3 Acronisms and definitions____________________________________________ 3 Introduction ________________________________________________________ 4 3.1 Axis______________________________________________________________ 4 4 Installazione ________________________________________________________ 4 5 Un semplice Web Service____________________________________________ 5 5.1 Deploy Tramite Copia di File ______________________________________ 5 5.2 Implementazione di un WS con generazione di stub e skeleton in
modalità statica ____________________________________________________________ 8 5.2.1 Implementazione interfaccia Java del servizio__________________ 9 5.2.2 Generazione del file WSDL ____________________________________ 9 5.2.3 Generazione di stub e skeleton _______________________________ 12 5.2.4 Creazione del WSDD _________________________________________ 13 5.2.5 Implementazione della Business Logic_________________________ 15 5.2.6 Implementazione del client __________________________________ 16 5.3 Pro e Cons ______________________________________________________ 17 6 Monitoring _________________________________________________________ 18 6.1 TCP Monitor_____________________________________________________ 18 7 Esecuzione test ____________________________________________________ 19 8 Bibliography _______________________________________________________ 22 9 Tables _____________________________________________________________ 23 10 Figures ____________________________________________________________ 23 Implementazione di un Servizio Web
ver. 1.1
[2/23]
27/08/2008
1 Scope
I contenuti di questo documento permettono di avere una conoscenza
tecnica di base sui Web Services utile per lo studio critico della piattaforma
utilizzata da Lottomatica.
In passato l’integrazione di applicazioni avveniva tra software che
risiedevano sulla stessa piattaforma o middleware (come CORBA o DCOM) e
tipicamente
all’interno
della
stessa
organizzazione.
Volendo
invece
interconnettere middleware diversi è necessario standardizzare le interfacce di
applicazioni appartenenti a sistemi differenti per permettere loro di interagire; la
difficoltà inoltre aumenta nel caso in cui l’interazione non avvenga fra piattaforme
della stessa compagnia ma appartenenti a più aziende.
E così che, per superare le limitazioni di middleware e piattaforme EAI, sono
introdotti i Web Services e viene adottata l’Architettura Orientata ai Servizi (SOA).
In particolare, Axis è una piattaforma Java open source prodotta dalla
Apache Software Foundation, che abilita la creazione e l’utilizzo di applicazioni
che si basano sui Web Services, ovvero il motore per l’esecuzione di web service.
Axis è in particolare una servlet che, per la sua esecuzione, necessita di un
contenitore di servlet che nel caso trattato è Tomcat.
2 Acronisms and definitions
Acronim
Definition
WS
Web Service
WSDL
Web Service Definition Language
WSDD
Web Service Deployment Descriptor
SOA
Service Oriented Architecture
SII
Static Invocation Interface
JWS
Java Web Service
EAI
Enterprise Application Integration
SOAP
Simple Object Access Protocol
UDDI
Universal Description Discovery and Integration
SAX
Simple API for XML
IDE
Integrated development environment
Table 2-1 Acronisms and Definitions
Implementazione di un Servizio Web
ver. 1.1
[3/23]
27/08/2008
3 Introduction
I Web Services rappresentano una tecnologia consolidata e si trovano in
circolazione diverse implementazioni per eseguire deploy delle proprie
applicazioni come web service utilizzando i tre mattoni fondamentali, ovvero
SOAP, WSDL e UDDI.
Questo documento verte prevalentemente sugli aspetti pratici della
realizzazione di un web service con Axis.
3.1 Axis
Axis non è un semplice engine SOAP ma un framework per realizzare sistemi
di integrazione basati su SOAP. Il progetto non è una revisione della precedente
versione del toolkit, Apache SOAP 2.x, ma una completa riscrittura che nasce
dalla necessità di disporre di una migliore architettura basata su criteri di • flessibilità: è possibile estendere l'engine per eseguire elaborazioni
custom degli header dei messaggi;
• componibilità: i gestori di richieste, chiamati Handler in terminologia
Axis, possono essere riutilizzati;
• indipendenza dal meccanismo di trasporto dei messaggi: in questo
modo è possibile utilizzare vari protocolli oltre ad HTTP come SMTP, FTP
e messaging.
Rispetto alla versione precedente di SOAP in Axis si è cercato inoltre di
migliorare le performance utilizzando SAX per l'elaborazione dei messaggi.
Nel seguito si fa riferimento alla beta 2 di Axis che implementa le specifiche 1.1 di
SOAP e offre un supporto parziale a SOAP 1.2.
4 Installazione
L'installazione di Axis (ver. 1.x)1 è abbastanza semplice: il prerequisito
fondamentale è un servlet container e negli esempi presentati si fa riferimento a
Tomcat (ver. 6.x)2.
Innanzitutto, copiare il folder webapps/axis dalla distribuzione nel folder
webapps di Tomcat. I web service saranno quindi accessibili all'URL
http://hostname:port/axis/...
All'interno di webapps/axis si trova il folder WEB-INF in cui copiare le classi
che si vogliono esporre come web service: i file .class verranno copiati nel folder
classes mentre i file .jar nel folder lib. Prima di usare Axis è comunque necessario
copiare
il
file
tools.jar,
activation.jar
e
mail.jar
in
WEB-INF/lib3.
Ora Tomcat è configurato per esporre web service con Axis.
1
E’ possible scaricare Axis ver. 1.x da: http://www.apache.org/dyn/closer.cgi/ws/axis/1_4
2
E’ possible scaricare Tomcat ver. 6.x da: http://tomcat.apache.org/download-60.cgi
3
È possibile scaricare i file .jar da: http://sunsolve.sun.com/search/document.do?assetkey=1-21-128641-02-
Implementazione di un Servizio Web
ver. 1.1
[4/23]
27/08/2008
5 Un semplice Web Service
In questa sezione si affronta il problema del deploy di un web service con
Axis mostrando due casi di difficoltà crescente:
• deploy di una classe Java con copia di file;
• deploy della stessa classe mediante deployment descriptor
(Approccio SII);
5.1 Deploy Tramite Copia di File
Per effettuare in modo semplice (ma anche poco flessibile) il deployment di
una applicazione è possibile creare una classe java che implementa il servizio e
copiarla in Axis con estensione .jws.
In particolare si riporta di seguito la classe java che implementa il servizio
‘Calculator’:
public class Calculator {
public Integer sum(int x, int y) {
return new Integer(x+y);
}
public Integer sub(int x, int y) {
return new Integer(x-y);
}
public String pari(int numero) {
return (numero % 2) == 0 ? "pari" : "dispari";
}
}
La classe Calculator offre tre servizi:
• sum(x, y) - calcola la somma di x e y
• sub(x, y) - calcola la differenza di x e y
• pari(x) – restituisce una stringa che segnala se x è un numero pari o
dispari
Per eseguire un deploy istantaneo della classe è sufficiente copiare il
sorgente nel folder della web application di Axis con estensione .jws. A questo
punto il servizio è immediatamente disponibile all'URL
http://localhost:8080/axis/Calculator.jws:
automaticamente il motore Axis restituisce il WSDL del servizio reperibile
all’URL:
http://localhost:8080/axis/Calculator.jws?WSDL
Implementazione di un Servizio Web
ver. 1.1
[5/23]
27/08/2008
E' il runtime engine di Axis che compila il file JWS in classe Java e inoltra ad
essa le chiamate SOAP provenienti da una qualsiasi applicazione client capace di
inviare invocazioni a servizi web tramite SOAP (Figura 5-1). Il file compilato (.class)
sarà poi disponibile nella cartella \WEB-INF\jwsClasses di Axis.
Figura 5-1 - Schema di interazione client/web service
In Figura 5-1 è indicata la modalità d’interazione Client/WS. Il Client richiede
il servizio al Server sulla porta 8080 utilizzando SOAP/http; il Server elabora quindi la
richiesta attraverso il WS Engine Axis. Creata la risposta, questa viene inviata al
Client sotto-forma di messaggio SOAP.
Dopo aver realizzato un web service ecco un client java che lo utilizza:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import
import
import
import
import
import
import
org.apache.axis.client.Call;
org.apache.axis.client.Service;
org.apache.axis.encoding.XMLType;
java.io.BufferedReader;
java.io.InputStreamReader;
java.net.URL;
javax.xml.rpc.ParameterMode;
public class TestClient {
public static void main(String[] args) throws Exception {
System.out.println("SERVIZIO PARI/DISPARI...");
//Inizializzazione dei Parametri
InputStreamReader is = new InputStreamReader( System.in );
BufferedReader br = new BufferedReader( is );
Implementazione di un Servizio Web
ver. 1.1
[6/23]
27/08/2008
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
System.out.print("Inserisci il numero: ");
Integer numero = new Integer(br.readLine());
String nameWS
= "http://localhost:8080/axis/Calculator.jws";
URL endPointWS = new URL(nameWS);
//Inizializzazione SERVIZIO PARI/DISPARI
Service service = new Service();
Call call = (Call)service.createCall();
call.removeAllParameters();
//Configurazione parametri SERVIZIO PARI/DISPARI
call.setTargetEndpointAddress(endPointWS);
call.addParameter("numero", XMLType.XSD_INT, ParameterMode.IN);
call.setOperationName("pari");
call.setReturnType(XMLType.XSD_STRING);
//Invocazione SERVIZIO PARI/DISPARI
String risultato = (String)call.invoke(new Object[]{numero});
//Mostra il risultato
System.out.println("Il numero " + numero + " e' " + risultato);
System.out.println("\nSERVIZIO SOMMA/DIFFERENZA...");
//Inizializzazione dei Parametri
System.out.print("Inserisci il primo numero: ");
Integer x = new Integer(br.readLine());
System.out.print("Inserisci il secondo numero: ");
Integer y = new Integer(br.readLine());
call.removeAllParameters();
//Configurazione parametri WS per la chiamata a sum()
call.addParameter("x", XMLType.XSD_INT, ParameterMode.IN);
call.addParameter("y", XMLType.XSD_INT, ParameterMode.IN);
call.setOperationName("sum");
call.setReturnType(XMLType.XSD_INT);
//Invocazione WS
Integer risultato2 = (Integer)call.invoke(new Object[]{x,y});
//Mostra il risultato
System.out.println("La somma e': " + risultato2);
call.removeAllParameters();
//Configurazione parametri WS per la chiamata a sub()
call.addParameter("x", XMLType.XSD_INT, ParameterMode.IN);
call.addParameter("y", XMLType.XSD_INT, ParameterMode.IN);
call.setOperationName("sub");
call.setReturnType(XMLType.XSD_INT);
//Invocazione WS
risultato2 = (Integer)call.invoke(new Object[]{x,y});
//Mostra il risultato
System.out.println("La differenza e': " + risultato2);
Implementazione di un Servizio Web
ver. 1.1
[7/23]
27/08/2008
62
63
}
}
Il codice presentato implementa le seguenti operazioni:
• viene prelevato dallo std d’input un numero intero (linee 11-18);
• viene creato un oggetto Service come punto di partenza per
connettersi ad un web service SOAP; è possibile specificare un
documento WSDL per ottenere informazioni sul servizio (linee 20-23);
• si crea quindi un oggetto Call che incapsula la chiamata vera e
propria e si impostano le proprietà necessarie, in questo caso URL del
servizio e nome del metodo da richiamare sul servizio. Si osservi che
queste informazioni potrebbero essere ricavate dal WSDL (linee 25-33);
• a questo punto si impostano i parametri applicativi per l'invocazione
del servizio inserendoli in un array di oggetti: in questo caso si tratta di
un semplice numero intero (linee 25-29);
• infine si invoca il servizio e si ottiene il risultato dell'operazione (linee 3033);
• le stesse operazioni sono state eseguite con i servizi sum() e sub(),
utilizzando l’oggetto call già allocato in precedenza (linee 35-61).
5.2 Implementazione di un WS con generazione di stub e
skeleton in modalità statica
In questo paragrafo si vuole mostrare una modalità alternativa di
implementazione di un WS basata sulla generazione di uno STUB e di uno
SKELETON che incorporano tutte le funzionalità necessarie per la comunicazione
tra WS e Service Requestor. Tale generazione avviene in maniera statica.
I passi da seguire sono:
1. implementazione di una interfaccia Java che specifica le operazioni
che il servizio mette a disposizione;
2. generazione del file WSDL a partire dall’interfaccia Java di cui al
punto 1;
3. generazione di stub e skeleton a partire dal file WSDL;
4. creazione del WSDD (Web Service Deployment Descriptor);
5. implementazione
della
Business
Logic
nella
classe
Java
ServiceNameSoapBindingImpl ;
6. implementazione dell’applicazione client che utilizzerà lo stub per
invocare il servizio.
Per rendere l’esecuzione di tale fasi più agevole si è scelto di adoperare
l’ambiente di sviluppo ECLIPSE (http://www.eclipse.org/ ): il motivo principale della
scelta fatta è che ECLIPSE è un IDE Java da noi già ben conosciuto al momento
Implementazione di un Servizio Web
ver. 1.1
[8/23]
27/08/2008
della stesura del presente documento. Una valida alternativa è l’ambiente di
sviluppo NETBEANS(http://www.netbeans.org/ ) il quale richiede però al sistema
maggiori performance (in termini di memoria e spazio su disco) per funzionare al
meglio. È inoltre possibile eseguire queste fasi senza l’installazione di alcun
ambiente di sviluppo utilizzando le istruzioni mediante la linea di comando di MSDOS.
Si farà ancora riferimento al servizio Calculator presentato nel paragrafo 5.1.
5.2.1 Implementazione interfaccia Java del servizio
Dopo aver creato un nuovo progetto Eclipse4 occorre importare in esso le
seguenti librerie5:
•
•
•
•
•
•
•
•
•
•
•
activation.jar;
axis.jar;
axis-ant.jar;
commons-discovery-02.jar;
commons-logging-1.0.4.jar;
jaxrpc.jar;
log4j-1.2.8.jar;
mail-1.4.jar;
saaj.jar;
tools.jar;
wsdl4j-1.5.1.jar.
che sono contenute all’interno della cartella /WEB-INF/lib di AXIS. A questo
punto è necessario scrivere l’interfaccia Java del servizio Calculator:
1
2
3
4
5
6
public interface Calculator {
public int sum(int x, int y) throws java.rmi.RemoteException;
public java.lang.String pari(int numero)
throws java.rmi.RemoteException;
public int sub(int x, int y) throws java.rmi.RemoteException;
}
5.2.2 Generazione del file WSDL
E’ ora necessario generare il file WSDL a partire dall’interfaccia
Calculator.java . Per fare ciò occorre aprire Referenced Libraries dal Package
Explorer di Eclipse e quindi aprire axis.jar e poi org.apache.axis.wsdl e cliccare con
4
Consultare l’help di eclipse cercando la voce “new project wizard”
5
Consultare l’help di eclipse cercando la voce “build path”
Implementazione di un Servizio Web
ver. 1.1
[9/23]
27/08/2008
il tasto destro su Java2WSDL.class come mostrato in Figura 5-2:
Figura 5-2- Generazione WSDL
Aprire ora “Run asÆRun Configurations” e cliccare sul tab Arguments e in
Program arguments inserire la seguente stringa (Figura 5-3):
-o src\Calculator.wsdl -l"http://10.50.5.155:8080/axis/services/Calculator"
"urn:calculator"-p"Calculator" "urn:Calculator" Calculator
Implementazione di un Servizio Web
ver. 1.1
-n
[10/23]
27/08/2008
Figura 5-3 – Schermata inserimento parametri
A questo punto nella cartella bin del progetto eclipse è stato creato il file
calculator.wsdl (Figura 5-4).
Implementazione di un Servizio Web
ver. 1.1
[11/23]
27/08/2008
Figura 5-4 - Cartella di eclipse contente il file calculator.wsdl
5.2.3 Generazione di stub e skeleton
Dal
package
explorer
di
Eclipse
selezionare
axis.jar
e
poi
org.apache.axis.wsdl e cliccare con il tasto destro su WSDL2Java.class. Aprire ora
Run Configurations e cliccare sul tab Arguments e in Program arguments inserire la
seguente stringa:
src\Calculator.wsdl -o src -p calculator -S true
Implementazione di un Servizio Web
ver. 1.1
[12/23]
27/08/2008
Figura 5-5 - Pakage explorer di eclipse
A questo punto nel progetto Eclipse è stato creato il package calculator
con le seguenti classi:
• Calculator.java
• CalculatorService.java
• CalculatorServiceLocator.java
• CalculatorSoapBindingStub.java
• CalculatorSoapBindingImpl.java
• Calculator_PortType.java
5.2.4 Creazione del WSDD
Dal
package
explorer
di
Eclipse
selezionare
axis.jar
e
poi
org.apache.axis.client e cliccare con il tasto destro su AdminClient.class. Aprire
ora Open Run Dialog e cliccare sul tab Arguments e in Program arguments inserire
la seguente stringa:
src\calculator\deploy.wsdd
Implementazione di un Servizio Web
ver. 1.1
[13/23]
27/08/2008
Figura 5-6 - Creazione del file .wsdd
A questo punto è stato creato il Deployment Descriptor del servizio,
accessibile dal package calculator creato nel paragrafo precedente attraverso il
comando WSDL2Java. Questo file presenta il seguente contenuto:
1
2
3
<deployment
xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
Implementazione di un Servizio Web
ver. 1.1
[14/23]
27/08/2008
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- Services from CalculatorService WSDL service -->
<service name="Calculator" provider="java:RPC" style="rpc"
use="encoded">
<parameter name="wsdlTargetNamespace" value="urn:calculator"/>
<parameter name="wsdlServiceElement"
value="CalculatorService"/>
<parameter name="wsdlServicePort" value="Calculator"/>
<parameter name="className"
value="calculator.CalculatorSoapBindingSkeleton"/>
<parameter name="wsdlPortType" value="Calculator"/>
<parameter name="typeMappingVersion" value="1.2"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
L'elemento service definisce appunto il web service a cui è stato dato il
nome calculator. L'attributo provider permette di specificare il modo in cui il
servizio viene esposto; in questo caso si usa il provider per una classe Java quindi si
usa java:RPC come valore dell'attributo. L'elemento parameter permette di
specificare i parametri di configurazione del servizio, in questo caso il nome della
classe e i metodi esposti.
Maggiori dettagli su questo punto sono disponibili sul sito:
http://www.omii.ac.uk/docs/2.3.0/reference/apache_axis/wsdd/wsdd.htm
5.2.5 Implementazione della Business Logic
Dal package calculator creato con il comando WSDL2Java aprire la classe
CalculatorSoapBindingImpl.java e scrivere la Business Logic del servizio:
package calculator;
public class CalculatorSoapBindingImpl
implements calculator.Calculator_PortType{
public int sum(int in0, int in1) throws java.rmi.RemoteException {
return in0+in1;
}
public java.lang.String pari(int in0)
throws java.rmi.RemoteException {
if(in0%2==0) return "pari";
else return "dispari";
}
public int sub(int in0, int in1) throws java.rmi.RemoteException {
Implementazione di un Servizio Web
ver. 1.1
[15/23]
27/08/2008
return in0-in1;
}
}
Quindi copiare il package calculator con i file .class nella cartella /WEBINF/classes di Axis.
5.2.6 Implementazione del client
A questo punto è necessario l’implementazione dell’applicazione client che
dovrà
richiedere
il
servizio
servendosi
dello
stub
calculator.CalculatorSoapBindingStub:
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class ClientSII {
public static void main (String[] args) throws Exception {
calculator.Calculator_PortType binding =
new calculator.CalculatorServiceLocator().getCalculator();
((calculator.CalculatorSoapBindingStub)binding).setMaintainSession(true);
try {
InputStreamReader is = new InputStreamReader( System.in );
BufferedReader br = new BufferedReader( is );
System.out.println("Inserisci il primo numero: ");
Integer x = new Integer(br.readLine());
System.out.println("Inserisci il secondo numero: ");
Integer y = new Integer(br.readLine());
System.out.println("La differenza è: "+ binding.sub(x,y));
System.out.println("La somma è: " + binding.sum(x,y));
System.out.println("Inserisci un numero per sapere se è pari o
dispari: ");
Integer z = new Integer(br.readLine());
System.out.println("Il numero è: " + binding.pari(z));
} catch (java.rmi.RemoteException re) {
re.printStackTrace();
}
}
}
Come si può notare la classe ClientSII.class richiama i servizi sum, sub, pari
come se essi fossero locali servendosi semplicemente dello stub.
In Figura 5-1FIGURA 5-7 è indicato lo schema d’interazione per la soluzione
Implementazione di un Servizio Web
ver. 1.1
[16/23]
27/08/2008
descritta in questo paragrafo. La classe java ClientSII localizzata sull’host Client
comunica direttamente con la classe CalculatorSoapBindingStub per inviare via
SOAP/http le richieste al Server. Sul Server il WS Engine Axis intercetta le richieste
Client e le passa al componente calculator che contiene tutte le classi java atte
ad elaborare la risposta e passarla tramite messaggi SOAP allo stub lato Client, il
quale restituisce i risultati alla classe java ClientSII, che infine li stampa a console.
FIGURA 5-7 - Schema di interazione Clent/Web Server tramite stub
5.3 Pro e Cons
Vediamo quali so i pro ed i contro dei due approcci illustrati:
• Deploy tramite copia di file:
o semplice;
o poco flessibile;
o il codice necessario per un client Axis è semplice ma
abbastanza verboso: è ad esempio scomodo dover specificare
i parametri del servizio come array di oggetti ed inoltre è
necessario usare esplicitamente la API Axis;
o non è sempre utilizzabile, spesso il servizio di cui fare il deploy
non sarà implementato con una singola classe Java ed è inoltre
necessario un modo per configurare i parametri di deploy
come ad esempio il mapping dei tipi.
• Deploy con generazione di stub e skeleton in modalità statica:
o abbastanza elaborato e complesso;
o flessibile;
o il codice necessario per un client Axis è semplice;
o è sempre utilizzabile.
Implementazione di un Servizio Web
ver. 1.1
[17/23]
27/08/2008
6 Monitoring
6.1 TCP Monitor
Per verificare il corretto funzionamento di un web service Axis mette a
disposizione una comoda utility, TCPMon, che permette di monitorare il traffico di
rete generato dal servizio. Lo si lancia con:
java org.apache.axis.utils.tcpmon
Appare quindi la seguente interfaccia per l'inserimento dei parametri:
Figura 6-1 - TCP Monitor
utilizzando il tool come Listener si devono impostare
• Listen Port #: numero di porta su cui TCPMon si pone in ascolto per le
richieste (deve essere necessariamente diversa dalla Target Port# - la
Implementazione di un Servizio Web
ver. 1.1
[18/23]
27/08/2008
poniamo pari a 9090 facendo attenzione a che il client richieda il
servizio su tale porto);
• Target Hostname: host su cui inoltrare le richieste;
• Target Port #: il numero di porta utilizzato dall'host target.
Premendo il pulsante Add viene aggiunto un tab con le informazioni sulla
connessione inserita:
Figura 6-2 - TCP Monitor schermata visualizzazione pacchetti
7 Esecuzione test
Si lancia la classe TestClient.java (descritta nel paragrafo 5.1) che invoca il
servizio PARI/DISPARI ed in successione i servizi SOMMA e DIFFERENZA con i
Implementazione di un Servizio Web
ver. 1.1
[19/23]
27/08/2008
seguenti parametri inseriti a linea di comando come si vede da Figura 7-1 e da
Figura 7-2:
Figura 7-1 - Parametri input Pari/Dispari
Figura 7-2 - Parametri input Somma/Differenza
Si ottengono nel TCPMonitor tre finestre che si aprono cliccando sulle 3 righe
nella tabella in alto, che monitorano ciascuno dei 3 servizi:
Implementazione di un Servizio Web
ver. 1.1
[20/23]
27/08/2008
Figura 7-3 - Pacchetti TCP Monitor
Come si vedere da Figura 7-3, nelle 2 finestre in basso si possono visualizzare i
messaggi http scambiati per l’invocazione dei servizi. Nella finestra superiore si
trova il messaggio di richiesta e nella finestra inferiore si visualizza il messaggio di
risposta. Nel body dei messaggi è possibile visualizzare il valore delle variabili di
input sulle quali viene invocato il servizio e il valore delle variabili restituite al client
e contenenti a seconda del servizio invocato la somma, la differenza o una stringa
che indica se il valore della variabile di input è pari o dispari.
Implementazione di un Servizio Web
ver. 1.1
[21/23]
27/08/2008
8 Bibliography
[1] Apache Axis documentation - http://ws.apache.org/axis2/1_4/contents.html
[2] Service Oriented Architecture and Web Services - Andrea Polini 2007
[3] Axis - http://www.apache.org/dyn/closer.cgi/ws/axis/1_4
[4] Tomcat - http://tomcat.apache.org/download-60.cgi
[5] Eclipse - http://www.eclipse.org/
[6] Info su WSDD http://www.omii.ac.uk/docs/2.3.0/reference/apache_axis/wsdd/wsdd.htm
[7] uso di Stub e Skeleton - http://www.mokabyte.it/2002/09/axis.htm
Implementazione di un Servizio Web
ver. 1.1
[22/23]
27/08/2008
9 Tables
Table 2-1 Acronisms and Definitions ______________________________________ 3 10Figures
Figura 5-1 - Schema di interazione client/web service.........................................6 Figura 5-2- Generazione WSDL .................................................................................1 Figura 5-3 – Schermata inserimento parametri................................................... 11 Figura 5-4 - Cartella di eclipse contente il file calculator.wsdl......................... 12 Figura 5-5 - Pakage explorer di eclipse ................................................................ 13 Figura 5-6 - Creazione del file .wsdd..................................................................... 14 FIGURA 5-7 - Schema di interazione Clent/Web Server tramite stub .............. 17 Figura 6-1 - TCP Monitor .......................................................................................... 18 Figura 6-2 - TCP Monitor schermata visualizzazione pacchetti......................... 19 Figura 7-1 - Parametri input Pari/Dispari ............................................................... 20 Figura 7-2 - Parametri input Somma/Differenza .................................................. 20 Figura 7-3 - Pacchetti TCP Monitor ........................................................................ 21 Implementazione di un Servizio Web
ver. 1.1
[23/23]