Java Web Services Uso di Eclipse e Apache Axis 1
Gli strumenti utili per iniziare Axis (Web Service tool) Eclipse (IDE di sviluppo) Tomcat (servlet/jsp container) N.B. Eclipse e Tomcat possono essere sostituiti con strumenti analoghi tra i tanti disponibili. 2
AXIS (Apache extensible Interaction System) Axis è essenzialmente un SOAP Engine che può essere integrato all'interno di Apache Tomcat e permette: la generazione automatica del documento WSDL a partire dai Web Service di cui si è fatto il deployment sul server Web o a partire dalle classi Java (Java2WSDL) la generazione di java proxies lato-client e template lato-server a partire dal WSDL (WSDL2Java) la gestione dei messaggi SOAP scambiati con il servizio 3
Axis setup Prendere la cartella lib e copiarla all'interno della installazione di Eclipse. Prendere la cartella axis dentro webapps e copiarla nell'omonima cartella di Tomcat. 4
Creazione di un nuovo progetto Eclipse Creare un nuovo progetto java Impostare le librerie con i jar di Axis Impostare le librerie mail.jar e activation.jar 5
Il primo Web Service Creiamo una semplice classe Ciao che legge un nome e scrive un messaggio a video 6
Il primo Web Service (cont.) Rendiamo la classe Ciao davvero interoperabile! compiliamo la classe e spostiamola nella cartella webapps/axis/web-inf/classes di Tomcat creiamo un file di deployment eseguiamo l'apposita routine di Axis per attivare il servizio 7
Creazione del file di deployment 8
Creazione del file di deployment (cont.) Sfruttiamo Eclipse! Impostare un run config per il deployment Utilizzare la classe AdminClient di Axis Impostare <nomefile>.wsdd come parametro dell'applicazione 9
Uso di AdminClient di Axis 10
Uso di AdminClient di Axis (cont.) 11
Verifica del deployment Verificare che il servizio compaia nella lista visibile all'indirizzo http://localhost:8080/axis/servlet/axisservlet 12
Axis genera automaticamente il WSDL http://localhost:8080/axis/services/ciao?wsdl 13
Web Service client 14
Mapping tra XML types e Java types Sono definiti all'interno della specifica JAX-RPC 15
Aggiunta di handler Supponiamo di voler contare il numero di volte che un servizio viene invocato e di aver implementato il conteggio nella classe LogHandler 16
17
Undeploy 18
Un Web Service che tratta oggetti composti La classe CiaoVo deve essere definita come un JavaBeans, cioè deve sottostare a determinate convenzioni: la classe deve avere un costruttore senza argomenti le sue proprietà devono essere accessibili tramite get, set, is (usato per i boolean al posto di get) la classe deve essere serializzabile 19
Un Web Service che tratta oggetti composti La classe CiaoVo deve essere definita come un JavaBeans, cioè deve sottostare a determinate convenzioni: la classe deve avere un costruttore senza argomenti le sue proprietà devono essere accessibili tramite get, set, is (usato per i boolean al posto di get) la classe deve essere serializzabile 20
Deployment del Web Service Scrivere un nuovo file.wsdd in cui indicare i tipi non standard utilizzati Effettuare un nuovo deployment creando un nuovo Run config Nel client occorre registrare il tipo con un'apposita istruzione 21
Deployment del Web Service (cont.) 22
Modifiche del client Nel Client deve essere specificato il tipo non standard impegato dal Web Service 23
Modifiche del client Nel Client deve essere specificato il tipo non standard impegato dal Web Service 24
Definire serializer/deserializer personalizzati L'elemento <beanmapping> equivale ad un <typemapping> dove: 1. serializer = org.apache.axis.encoding.ser.beanserializerfactory e 2. deserializer = org.apache.axis.encoding.ser.beandeserializerfactory 25
Uso di WSDL e Axis Axis permette di generare, partendo da un WSDL, le classi java necessarie per la gestione del corrispondente Web Service client-side binding, per generare le classi della parte client server-side binding, per generare le classi della parte server si usa la classe org.apache.axis.wsdl.wsdl2java 26
Client-side binding 27
Client-side binding (cont.) Per ogni entry del tag <types> del WSDL viene creata una corrispondente classe Java Per ogni porttype del WSDL, viene creata un'interfaccia corrispondente, con lo stesso nome della porttype 28
Client-side binding (cont.) Per ogni binding del WSDL, viene creata una classe stub che implementa l'interfaccia corrispondente alla porttype Ogni classe stub contiene il codice Java per l'invocazione del Web service, tramite l'uso delle classi Axis Service e Call Ogni classe stub funziona da proxy per l'invocazione del Web service, trattandolo come un oggetto locale e nascondendo all'utente i dettagli di invocazione del servizio (come endpoints, namespaces e così via) 29
Client-side binding (cont.) Per ogni binding del WSDL, viene creata una classe stub che implementa l'interfaccia corrispondente alla porttype Ogni classe stub contiene il codice Java per l'invocazione del Web service, tramite l'uso delle classi Axis Service e Call Ogni classe stub funziona da proxy per l'invocazione del Web service, trattandolo come un oggetto locale e nascondendo all'utente i dettagli di invocazione del servizio (come endpoints, namespaces e così via) 30
Client-side binding (cont.) Normalmente, un programma client non istanzia uno stub direttamente, ma lo fa attraverso un service locator, che presenta un metodo get che restituisce lo stub Per ogni tag <service> nel WSDL viene generata un'interfaccia per il service locator e la corrispondente implementazione 31
Client-side binding (cont.) Normalmente, un programma client non istanzia uno stub direttamente, ma lo fa attraverso un service locator, che presenta un metodo get che restituisce lo stub Per ogni tag <service> nel WSDL viene generata un'interfaccia per il service locator e la corrispondente implementazione 32
Server-side binding 33
Server-side binding (cont.) Vengono generate le stesse classi della parte client-side, con in più una classe che implementa i metodi del Web Service e i file deploy.wsdd e undeploy.wsdd 34
Uso del codice auto-generato Completare la classe nomeserviziosoapbindingimpl con il codice del servizio Compilare tutte le classi e caricarle su Tomcat Effettuare il deployment con i file generati automaticamente Costruire il client 35
Uso del codice auto-generato Completare la classe nomeserviziosoapbindingimpl con il codice del servizio Compilare tutte le classi e caricarle su Tomcat Effettuare il deployment con i file generati automaticamente Costruire il client 36
Link utili Ulteriori dettagli sull'uso di Axis http://ws.apache.org/axis/java/user-guide.html Homepage di Axis http://ws.apache.org/axis/ Sito in cui trovare plugin per Eclipse sui WS: http://www.eclipse-plugins.info/eclipse/index.jsp Pratico ed Utile Plugin per Eclipse che usa axis: http://lavadora.sourceforge.net/ Sito che raccoglie un dettagliato insieme di WS: http://www.xmethods.com/ 37