Click here to load reader

JAX-WS - isti.cnr. Martinelli/XML/doc/WebServices/jax-ws_290410.pdf · PDF fileAl momento dell'esecuzione Netbeans genera automaticamente gli artefatti, compila tutte le classi, dispiega

  • View
    223

  • Download
    0

Embed Size (px)

Text of JAX-WS - isti.cnr. Martinelli/XML/doc/WebServices/jax-ws_290410.pdf · PDF fileAl momento...

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

[email protected]

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

[email protected]

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

Search related