Click here to load reader
View
223
Download
0
Embed Size (px)
JAX-WSJAX-WS
Java API for Java API for XML Web ServicesXML Web Services
Massimo Martinelli
Consiglio Nazionale delle Ricerche - CNRIstituto di Scienza e Tecnologie della Informazione - ISTI
29/05/2010, Area Ricerca CNR, Pisa
Il corso di Java Web Services in 1 Minuto!import ...
public class MioWebService {
public String ciao(String nome) {
return Ciao + nome; }
}
@WebService
@WebMethod
Scriviamo una classe Java con un metodo
Aggiungiamo metainformazioni
Finito! ...
JAX-WSJAX-WS
Java API for Java API for XML Web ServicesXML Web Services
Massimo Martinelli
Consiglio Nazionale delle Ricerche - CNRIstituto di Scienza e Tecnologie della Informazione - ISTI
RIPARTIAMO :-)RIPARTIAMO :-)
Sommario Cosa JAX-WS?
Implementazione di Web Service e di Client
Tipi di dato supportati da JAX-WS
JAXB
Esercizi da svolgere durante il corso
Secondo il W3C ...Un Web Service un sistema software designato a supportare interazioni interoperabili macchina-macchina su una rete.
Ha una interfaccia descritta in un formato elaborabile da una macchina (specificamente WSDL).Altri sistemi interagiscono con il Web Service in un modo prescritto dalla sua descrizione usando messaggi SOAP, tipicamente convogliati usando HTTP con una serializzazione XML insieme ad altri standard Web.
Cosa JAX-WS acronimo di
Java API for XML Web Services Tecnologia per realizzare Web Service e
client in Java che comunicano utilizzando messaggi SOAP-XML
Limplementazione di riferimento (JAX-WS for Reference Implementation) un progetto open source e fa parte del progetto GlassFish, un application server Java EE.
Fa parte della distribuzione Metro
Web Services semplificati
Da Java 5 (Java 1.5) introdotte le annotazioni ovvero dei Metadati sul codice Java
Esempio di annotazione:@Annotazione
Annotazioni: Possono essere trattate a livello di compilazione
Possono essere trattate anche tempo di esecuzione
Annotazioni nei Web Service
Per sviluppare un Web Service con JAX-WS necessario utilizzare l'annotazione javax.jws.WebService
Ovvero: la classe che implementa il Web Service deve essere annotata con la annotazione javax.jws.WebService (o con javax.jws.WebServiceProvider)
Service Endpoint Interface (SEI) Una interfaccia service endpoint (SEI) una interfaccia Java
che dichiara i metodi che un client pu invocare sul servizio
SEI non necessaria quando si implementa un endpoint JAX-WS: la classe di implementazione del Web Service (SIB Service Implementation Bean) definisce implicitamente una SEI
pu riferire esplicitamente una SEI tramite lelemento endpointInterface dellannotazione @Webservice
Preparazione agli esercizi
Creare una directory LINUX ~home/java-pgm/
C:/java-pgm/
dove installeremo i programmi che seguono...
Strumenti che utilizzeremo: Java SE 6
Java Standard Development Kit versione 6
(Se non gi installata eseguire da terminale il comando java version )
Scaricare da http://java.sun.com/javase/downloads/index.jsp
Netbeans un ambiente di sviluppo realizzato da SUN
Scaricare da http://netbeans.org/downloads/index.html
(versione Java o All)
Strumenti che utilizzeremo: Netbeans
Strumenti che utilizzeremo: Glassfish Application server open source realizzato da Sun di riferimento per Java EE 5/6.
Incluso con NetBeans
Supporta: EJB 3.1 JPA 2 JAXB 2.x JAX-WS 2.x
Per utilizzare con Tomcat
scaricare ant da http://ant.apache.org/ scaricare metro da http://metro.dev.java.net/
java -jar metro*.jar
ant -Dtomcat.home= -f metro-on-tomcat.xml install
V
A partire da:
una classe Javaun documento WSDL
Implementazione di un Web Service
Implementazione di un Web Service (classe Java): Passi Base
1. Codificare la classe che implementa il servizio
2. Compilare tale classe
3. Dispiegare (deploy) il file WAR
4. Codificare la classe per il client
5. Utilizzare wsimport per generare e compilare gli artefatti
6. Compilare la classe client
7. Eseguire il client
Codifica della classe SIB (1/2)package serviziociao;
import javax.jws.WebService;
@WebServicepublic class Ciao {
private String messaggio = new String("Ciao, ");
public void Ciao() {}
@WebMethodpublic String saluto(String nome) {
return messaggio + nome + ".";}
}
Codifica della classe SIB (2/2)
La classe implementata, Ciao, annotata come web service utilizzando l'annotazione @WebService
Ciao dichiara un singolo metodo chiamato saluto, annotato con l'annotazione @WebMethod
La classe implementata deve anche definire un costruttore di default public senza argomenti
JAX-WS Endpoint I metodi della classe che implementa il Web Service devono essere public, e non devono essere dichiarati ne static ne final
I metodi di Business esposti ai client dei Web service devono:
essere annotati con javax.jws.WebMethod
avere tipi di parametri compatibili con JAX-B
Le classi che implementano i Web Service
Non devono essere dichiarate abstract
Devono avere un costruttore di default public
Non devono definire il metodo finalize
Possono usare le annotazioni javax.annotation.PostConstruct o javax.annotation.PreDestroy sui propri metodi per gestire il loro ciclo di vita
Il medoto @PostConstruct chiamato dal container prima che la classe di implementazione inizi a rispondere ai client del Web Service
Il metodo @PreDestroy chiamato dal container prima che l'endpoint sia rimosso dall'operazione
Esercizio (Guidato)
Realizzare un Web Service che fa la somma di due numeri interi
Da Netbeans creare un nuovo progetto Web
Creare un nuovo Web service
Dispiegare, eseguire e provare (Test)
Non vi avevo detto che bisognava importare anche ...
package serviziociao.endpoint;
import javax.jws.WebService;import javax.jws.WebMethod;
@WebService()public class Ciao {
private String messaggio = new String("Ciao, ");
public void Ciao() {}
@WebMethod()public String saluto(String nome) {
return messaggio + nome + ".";}
}
@WebServiceAttributi name: nome del wsdl:portType (per difetto il nome della classe Java senza package)
portName: nome del wsdl:portName (per difetto il nome del WebService concatenato a Port)
serviceName: nome del servizio (wsdl:service) (per difetto il nome della classe concatenato alla Stringa Service)
endpointInterface: (es. endpointInterface = "package.MioWebServiceInterface") specifica il nome completo della SEI (per difetto la classe java,comprensiva del package, concatenata alla Stringa ServicePortType)
targetNamespace: namespace di riferimento per il WSDL e gli XML generati (per difetto il nome del package java)
wsdlLocation: l'indirizzo documento WSDL del Web Service. L'indirizzo pu essere relativo o assoluto.
[email protected] (serviceName = "NomeServizio", endpointInterface = "it.cnr.NomeServizioServicePortType", targetNamespace="http://..../", portName="NomeServizioServicePort")
V
@WebMethodPer difetto tutti i metodi public di una classe annotata con @WebService vengono esposti nel Web ServicePer personalizzare un metodo esposto come operazione WS si utilizza @WebMethodAttributi
action definisce l'azione per l'operazione. (per difetto = al nome del metodo ) exclude specifica se il metodo va escluso dalla pubblicazione del Web Service.
(per difetto=false) (Booleano) operationName specifica il nome di wsdl:operation per il metodo (per difetto =
nome del metodo)
@WebMethod(action="somma")public int somma(@WebParam(name = "i") int i,
@WebParam(name = "j") int j) { int k = i + j; return k;
}
V
@WebParam e @WebResultpersonalizzazione dei parametri di input(@WebParam) e di output(@WebResult) di un metodo del Web Service
Attributi header: Specifica se il parametro si trova in un'intestazione di messaggio anzich nel corpo. Per difetto false. (Booleano)
mode: WebParam.mode.IN parametro, WebParam.mode.OUT, WebParam.mode.INOUT che rappresentano parametri in input, in output e parametri ripetuti sia in input che in output
name: nome del parametro.
targetNamespace:spazio dei nomi XML dell'elemento XML per il parametro
V
@SOAPBinding
In caso i metodi del Web Service utilizzino tipi semplici come String o int possibile utilizzare
la seguente [email protected](style=Style.RPC)
In caso di utilizzo di tipi complessi lo stile da utilizzare corrisponde a quello di default:
@SOAPBinding(style=Style.DOCUMENT)
Nel secondo caso vedremo pi avanti come utilizzare il mapping (da oggetti Java in XML e
viceversa) con JAXB
@SOAPBinding specifica come avviene il mapping a livello SOAP
Attributi style
stile di codifica per messaggi inviati e ricevuti. Valori: DOCUMENT (default), RPC.
useformattazione per messaggi inviati e ricevuti. Valori LITERAL(default). ENCODED (non WS-I standard)
parameterStylevalori Wrapped (default) o BARE (utilizzabile solo in stile DOCUMENT)
Esempio:@WebService(targetNamespace = "http://.....", name = "MioS