WebService in Java con CXF e JAX-WS

JAX-WS+CXF+Spring: un mix di tecnologie per realizzare webservice in una maniera semplice e veloce.

Introduzione

In Java non esiste un solo modo per realizzare dei WebService, anche se esiste uno standard JAX-WS a cui bisognerebbe far riferimento. In questo articolo vedremo come poter realizzare dei WebService utilizzando CXF, framework opensource che si attiene alla specifica JAX-WS e come integrare il tutto con Spring

pom.xml del progetto

Per definire il nostro test, molto ricco di vari jar che dobbiamo portarci dietro come dipendenza, mi sembra giusto definire un progetto con Maven. Di seguito potete vedere il pom.xml del progetto, dove vengono elencate le dipendenze di cui abbiamo bisogno

Nel pom.xml abbiamo definito la dipendenza verso 3 diversi jar di CXF (che a loro volta avranno altre dipendenze necessarie) e verso Spring. Abbiamo inoltre aggiunto la dipendenza a JUnit, con scope test, visto che lo utilizzeremo alla fine per integrare un semplice test di quello che andremo a creare.

Il bean Book

Non avendo molta fantasia, utilizziamo il classico esempio dei libri da gestire. Definiamo quindi un bean che rappresenta la nostra informazione, quella che dovrà viaggiare tramite il WebService.

Il bean è abbastanza banale, ma è presente un Annotation @IgnoreProperty che viene definita da Aegis. Andando per gradi dobbiamo prima dire che Aegis è una libreria integrata dentro CXF che permette di fare data-binding in maniera molto semplice. Dovendo noi realizzare un WebService è normale dover gestire un mapping Java-XML-Java, ma non dobbiamo preoccuparcene direttamente noi (almeno in casi banali come questo). L’Annotation che abbiamo utilizzato è per specificare che non abbiamo interesse a trattare quell’attributo nel nostro mapping, quindi quando avremo come ritorno un bean di questo tipo non avremo mai valorizzato il campo “trama”.

L’interfaccia e l’implementazione del servizio

Come prima cosa dobbiamo realizzare l’interfaccia del nostro servizio, utilizzando le Annotation che ci mette a disposizione JAX-WS

L’interfaccia è abbastanza banale, vengono definiti 3 metodi e l’unica cosa relativa a JAX-WS sono le Annotation che vengono utilizzate: @WebService per dire che ci troviamo di fronte ad un WebService e @WebParam per specificare il nome del parametro da tradurre all’interno dell’XML di richiesta. L’implementazione di questa interfaccia deve soltanto specificare il nome dell’endpoint che andremo ad utilizzare oltre ad includere la vera e propria implementazione dei metodi.

Descrittori del nostro servizio

Dovendo includere il WebService all’interno di una web-application dobbiamo specificare due diversi descrittori:

    • web.xml: Serve per definire il file context di Spring e la Servlet di CXF che espone il WebService
    • applicationContext.xml: Definizione del WebService tramite CXF e del databinding Aegis

Ecco quindi il web.xml

e l’applicationContext

Il test del WebService

Una volta che abbiamo impacchettato la nostra applicazione in un war, possiamo effetturare il deploy e richiamando l’url di default troveremo la seguente interfaccia che ci descrive il WebService che abbiamo definito

Test

 

Per eseguire il test del nostro WebService basta inserire nel nostro progetto Maven un semplice caso di test, che effettua la lookup del servizio e si fa restituire la lista dei libri

Eseguendo questo test, avremo come risultato il seguente output

Come potete vedere ci viene restituita la lista dei libri definiti nel nostro WebService, escludendo l’attributo ‘trama’ come da noi indicato nel binding tramite Aegis

Riferimenti

Apache CXF
Introduzione a Aegis
JSR 224: Java API for XML-Based Web Services (JAX-WS) 2.0
JAX-WS reference implementation
Introducing JAX-WS 2.0 With the Java SE 6 Platform, Part 1 Introducing JAX-WS 2.0 With the Java SE 6 Platform, Part 2

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *