Lezione 9: Web Service in Java

15,703 views
15,522 views

Published on

✦ I tool necessari
✦ Realizzazione del server
✦ Realizzazione del client

0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
15,703
On SlideShare
0
From Embeds
0
Number of Embeds
152
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Lezione 9: Web Service in Java

  1. 1. Lezione 9: Web Service in Java Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  2. 2. Outline ✦ I tool necessari ✦ Realizzazione del server ✦ Realizzazione del client 2
  3. 3. I tool necessari ✦ Per realizzare WS in Java occorre: • librerie per i protocolli usati (es. SOAP) • tool per la generazione di codice Java a partire da WSDL ✦ Esistono diversi ambienti per la realizzazione di WS in Java • Apache Axis/Axis2 • JBoss WS (RedHat) • Glassfish Metro (Sun) 3
  4. 4. I tool necessari ✦ I diversi ambienti non sono (completamente) compatibili tra loro a livello di codice sorgente ✦ I server e i client sono però interoperabili (anche con client/server scritti in altri linguaggi) 4
  5. 5. Glassfish Metro ✦ Componente dell’application server Glassfish di Sun ✦ Utilizzabile anche con altri application server (es. Tomcat) ✦ Implementa l’API Java API for XML Web Services (JAX-WS), proposta da Sun come standard per i WS in Java 5
  6. 6. Glassfish Metro ✦ Download: • https://metro.dev.java.net/ ✦ Installazione: • dopo aver scaricato il file .jar, l’ambiente viene scompattato con il comando: ‣ java -jar metro-1_5.jar • per l’installazione su Tomcat è necessario il tool Ant; dopo aver scompattato l’ambiente occorre usare il comando: ‣ ant -Dtomcat.home=<TOMCAT_DIR> -f metro-on- tomcat.xml install 6
  7. 7. Realizzazione del server ✦ Approccio Java-first • si parte dalla realizzazione di una classe Java che implementa il web service ✦ Approccio WSDL-first • si parte dalla creazione di un file WSDL che descrive il web service 7
  8. 8. Realizzazione del server ✦ Java-first • più semplice • richiede che chi definisce la specifica del servizio conosca Java ✦ WSDL-first • consente la definizione del servizio a un progettista che non sia anche uno sviluppatore • il WSDL può essere ottenuto da una descrizione di livello più alto (es. UML) • richiede tool per la creazione del WSDL ✦ seguiremo l’approccio Java-first 8
  9. 9. Definizione del servizio ✦ Usando l’API JAX-WS, la definizione del servizio è semplicemente una classe con alcune annotazioni • le annotazioni sono un’estensione del linguaggio Java introdotta nella vers. 1.5 • le annotazioni JAX-WS forniscono dei metadati sulla classe e sui suoi metodi per precisare il comportamento del web service • l’unica annotazione obbligatoria è @WebService, che indica che una classe implementa un WS 9
  10. 10. Definizione del servizio ✦ Esempio: la calcolatrice package esempio.server; import javax.jws.*; @WebService public class Calculator { public double add(double a, double b) { return a+b; } public double subtract(double a, double b) { return a-b; } public double multiply(double a, double b) { return a*b; } public double divide(double a, double b) { return a/b; } } 10
  11. 11. Definizione del servizio ✦ Note • le annotazioni JAX-WS sono nel package javax.jws • è opportuno che la classe sia inserita in un package; il nome del package viene usato per definire il namespace del servizio ‣ il namespace è un URL usato da SOAP per evitare conflitti di naming tra servizi realizzati da organizzazioni diverse ‣ il package viene trasformato in un namespace invertendo i componenti del suo nome: - esempio.server => http://server.esempio ‣ perciò in un contesto reale il package dovrebbe essere univoco, ad esempio contenendo il nome DNS dell’azienda - ad esempio: it.unisa.esempio.server 11
  12. 12. Deployment ✦ Una volta creata e compilata la classe, occorre realizzare una web application da installare sotto Tomcat per offrire il servizio ✦ La struttura è quella classica, con l’aggiunta di un file di configurazione • WEB-INF/ ‣ web.xml ‣ sun-jaxws.xml ‣ classes/ (qui vanno i file compilati) ‣ ... 12
  13. 13. Deployment ✦ Nel file web.xml occorre configurare una servlet che gestisca i WS: <?xml version="1.0" encoding="UTF-8"?> <web-app> <description>Calculator</description> <display-name>Calculator Web Service</display-name> <listener> <listener-class> com.sun.xml.ws.transport.http.servlet.WSServletContextListener </listener-class> </listener> <servlet> <servlet-name>Calculator</servlet-name> <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet </servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>Calculator</servlet-name> <url-pattern>/calculator</url-pattern> </servlet-mapping> 13 </web-app>
  14. 14. Deployment ✦ Nel file sun-jaxws.xml occorre specificare le classi che implementano i WS: <?xml version="1.0" encoding="UTF-8"?> <endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'> <endpoint name="Calculator" implementation="esempio.server.Calculator" url-pattern="/calculator"/> </endpoints> ✦ Nota: l’url-pattern è relativo alla url dell’applicazione web 14
  15. 15. Deployment ✦ La cartella di deployment va come al solito inserita nella cartella webapps di tomcat ✦ Per verificare se il deployment ha avuto successo, possiamo accedere al WSDL generato automaticamente aggiungendo ?wsdl all’URL del web service: • Ad esempio, se la web application è stata denominata metrocalc, l’url del WSDL è: ‣ http://localhost:8080/metrocalc/calculator?wsdl 15
  16. 16. Realizzazione del client ✦ Il punto di partenza è il WSDL ✦ Occorre generare uno stub per interfacciare il client al WSDL ✦ L’ambiente Metro mette a disposizione il comando wsimport per generare lo stub: • wsimport -keep -p package url-wsdl ‣ l’opzione -keep indica di conservare i sorgenti ‣ l’opzione -p consente di specificare il package in cui inserire le classi generate 16
  17. 17. Realizzazione del client ✦ Esempio: • wsimport -keep -p esempio.stub ”http://localhost: 8080/metrocalc/calculator?wsdl” • crea una serie di file nel package esempio.stub, che possono essere importati sotto Eclipse 17
  18. 18. Realizzazione del client ✦ Tra le classi create da wsimport, ce ne sono due di interesse dello sviluppatore: • una classe che rappresenta il web service nel suo insieme • una classe che rappresenta un “end point”, ovvero un singolo punto di accesso al web service (un web service può avere più endpoints) • il nome di queste classi dipende dal WSDL, quindi occorre esaminare i file prodotti da wsimport per capire come sono state denominate ‣ nel nostro caso, CalculatorService e Calculator 18
  19. 19. Realizzazione del client ✦ Usando le classi del service e dell’endpoint si può usare il web service come un normale oggetto: package esempio.client; import esempio.stub.*; public class Client { public static void main(String args[]) { Calculator calc=new CalculatorService().getPort(Calculator.class); System.out.println("9 per 9 fa "+calc.multiply(9,9)); } } 19

×