Tutti gli articoli di admin

SPRING WS – TUTORIAL 7 – GESTIRE LE ECCEZIONI

In questo articolo vedremo la gestione delle eccezioni e i meccanismi che Spring-ws offre per la loro gestione.

Spring mette a disposizione un gestore delle eccezioni che carica la mappa delle eccezioni e crea opportunamente i fault in corrispondenza di ogni eccezioni.

Nel nostro esempio stiamo dicendo al gestore delle eccezioni che in corrispondenza di una eccezione LibroException deve essere creato un fault con i parametri indicati, come quello mostrato sotto.

Per chi usale annotazioni e non vuole file xml con lunghe configurazione Spring mette a disposizione la annotazione @SoapFault. Una volta definita una eccezione è possibile definire il fault da lanciare e i parametri con cui configurarla

Possiamo ottenere un fault analogo a quello descritto sopra definendo così la nostra eccezione

e aggiungendo tra i bean di Spring l’opportuna implementazione

Per chi ha creato il progetto tramite Maven ricordarsi di aggiungere la dipendenza dalle librerie di spring-ws che supportano le feature della jdk 1.5.

SPRING WS – TUTORIAL 6 – USARE GLI INTERCEPTOR

In questo articolo vedremo come poter intercettare le richieste di servizio per effettuare le operazioni prima e dopo l’esecuzione dell’endpoint.

Fondamentale l’interceptor ci permette di:

  • loggare le richieste e le risposte inviate
  • applicare dei meccanismi di sicurezza alle richieste pervenute
  • gestire i fault di sistema
Per definire un interceptor occorre implementare l’interfaccia EndpointInterceptot che presenta i seguenti metodi:
  • handleRequest
  • handleResponse
  • handleFault
Il metodo handleRequest viene invocato prima dell’esecuzione dell’endpoint e il suo utilizzo principale è quello di bloccare l’esecuzione di un servizio.
Il metodo handleResponse viene invocato dopo l’esecuzione dell’endpoint e il sul utilizzo principale è quello di elaborare la risposta, magari aggiungendo attributi.
Il metodo handleFault viene invocato dopo l’esecuzione di un fault con finalità analoghe a quelle del metodo handleResponse.
Per chi non avesse particolari esigenze Spring offre già alcune implementazioni di interceptor:
  • PayloadLoggingInterceptor
  • PayloadValidatingInterceptor
  • PayloadTransformingInterceptor
Il PayloadLoggingInterceptor permette di loggare le richieste e le risposte.
Il PayloadValidatingInterceptor valida le richieste e le risposte in base ad uno schema xsd indicato nelle sue properties.
Il PayloadTransformingInterceptor effettua una transformazione delle richieste e delle risposte basate su XSLT. Viene usato quando il server gestisce più versioni dello stesso servizio.

Nel nostro progetto applichiamo un logger delle richieste e delle risposte e un validatore, ottenendo una configurazione di questo tipo.

SPRING WS – TUTORIAL 5 – USARE IL MARSHALLING

In questo articolo vedremo le tecniche di marshalling che mette a disposizione Spring-ws per la gestione dei messaggi di richiesta e risposta dei web services.

Tutte le implementazione degli endpoint fornite dal framework prevedono 2 proprietà:

  • marshaller
  • unmarshaller
Il marshaller è responsabile di serializzare l’oggetto in un frammento xml, mentre l’unmarsheller effettua l’operazione contraria.
Sono previste più implementazioni dei marsheller, pertanto lo sviluppatore può scegliere con libertà l’implementazione più conveniente. Personalmente utilizzo jaxb2 che è disponibile a partire da java 6 con la virtual machine.
Per le altre implementazioni JAXB1, Castor, XMLBEANS rimando alla javadoc disponibile su spring-ws.
Definiamo il bean che descrive il marshaller e lo settiamo come attributo dell’endpoint

La property schema del marshaller serve per la validazione della richiesta, mentre nella property contextPath specifichiamo il package dove sono disponibili le classi per il marshalling. Tali classi possono essere generate in automatico tramite un plugin disponibile per Maven. Per sfruttare questo plugin occorre inserire questo frammento nel pom.xml


e definire le resources


Tale plugin analizza i file xsd disponibili nella directory resource e genera le classi nel package configurato.

Infine occorre cambiare l’implementazione dell’endpoint estendendo la classe di spring-ws che supporta il marshalling:

A questo punto mvn install e proviamo il frutto delle nostre fatiche.

SPRING WS – TUTORIAL 4 – MAPPING DEI SERVIZI

Nell’articolo di oggi vedremo come mappare i servizi e gestire la loro implementazione.

Occorre prima di tutto scegliere la tecnica di gestione per i messaggi xml. Possiamo usare delle librerie di gestione di messaggi xml come JDOM o SAX oppure delle tecniche di marshalling per la trasformazione di flussi xml in classi java e viceversa, come JAXB e XMLBEANS.

Spring-ws supporta tutte le principali librerie per la gestione dei file xml pertanto la scelta della libreria deve essere fatta valutando anche l’ambiente a disposizione.

In questo caso ho scelto JDOM, una libreria opensource che semplifica la gestione di DOM. Occorre modificare il file pom.xml per introdurre le dipendenza dalla libreria JDOM. Nel nostro caso si traduce in questo set di dipendenze:

All’interno del file spring-ws-servlet.xml definiamo il bean che implementa il servizio di RicercaLibro.

Tale classe estende la classe di Spring che gestisce l’integrazione con JDOM

Definiti il bean ci preoccupiamo di definire il mapping dei servizi, ovvero quale classe invocare in corrispondenza di uno specifico servizio:

In questo caso stiamo dicendo al gestore delle mappe dei servizi, la classe implementata da Spring-Ws, che il servizio RicercaLibro deve invocare l’endpoint ricercaLibroEndpoint. Per la gestione del mapping spring-ws offre 2 diverse implementazione da scegliere in base al contesto in cui vi trovate.

  • PayloadRootQNameEndpointMapping
  • SoapActionEndpointMapping

Il mapping basato su Payload prevede l’analisi della richiesta per stabilire quale servizio stiamo invocando. Tale meccanismo è più lento ma è indipendente dalla specifica SOA e pertanto può essere usato sia in caso di SOA 1.1, 1.2 o qualsiasi altro livello di trasporto.

Il secondo mapping sfrutta l’header SOAPAction, che permette di individuare il corretto routing senza analizzare tutta la risposta. Pertanto è più veloce ma è valido solo con la SOA 1.1, poichè nella SOA 1.2 tale parametro è stato reso deprecato.

A questo punto non resta che provare il nostro servizio tramite Soap Ui e verificare il corretto funzionamento del routing.

SPRING WS – TUTORIAL 3 – CREARE IL PROGETTO

Dopo aver definito il contratto passiamo all’implementazione del nostro server con servizi SOA. Per fare ciò usiamo Maven, che permette di automatizzare parte dei processi nella gestione del nostro sistema

Per chi non conoscesse Maven rimando alla serie di articoli pubblicati nella sezione Documentazione.

Apriamo una shell nella directory che ospita il nostro workspace e lanciamo il seguente comando

con questo comando stiamo dicendo a maven di creare un nuovo artefatto basato sull’archetipo di spring-ws versione 1.5.9.

A questo punto Maven ha creato una directory con l’alberatura tipica di una web application e i file xml configurati per la sua gestione.

Per semplificare i prossimi step possiamo importare il progetto tramite la direttiva eclipse:eclipse di maven. Troviamo 2 file xml pronti per essere modificati, il classico web.xml dove è definita la servlet preposta a ricevere i messaggi e il file spring-ws-servlet.xml dove definiremo le varie componenti del nostro server.

Nella directory WEB-INF inseriamo il file xsd contenente la struttura dei nostri servizi e nel file spring-ws-servlet.xml definiamo un bean che possa gestirlo.

Il bean ‘schema’ mappa il file xsd tramite una classe implementata da Spring e il bean ‘gestioneLibri’ si preoccupa di generare il file wsdl a partire dall’analisi dello schema xsd e dalle proprietà definite, secondo quanto indicato nel precedente articolo.

A questo punto tramite la direttiva install creiamo il file war e facciamo il deploy della nostra applicazione su tomcat.

Una volta attivato il contesto il file wsdl sarà disponibile all’indirizzo http://<server>:<port>/<context>/gestioneLibri.wsdl.

Nel prossimo articolo vedremo come gestire le chiamate ai servizi esposti.

SPRING WS – TUTORIAL 2 – CONOSCERE IL WSDL

Per generarare il wsdl a partire dal file xsd occorre utilizzare una classe fornita da spring ws che in automatico nel rispetto di determinate convenzioni genera il nostro wsdl.

La classe da utilizzare è la DefaultWsdl11Definition

  • L’attributo id determina il nome del wsdl. In questo caso esporrà il wsdl libreria.wsdl
  • La proprietà schema indica il file da utilizzare per la generazione del file wsdl
  • le proprietà portTypeName e locationUri indicano i parametri da inserire all’interno del wsdl per la richiesta dei servizi.
La nostra classe genera analizza il file xsd alla ricerca di elementi con il suffisso Request e Response e per ogni elemento individua gli elementi tipici della specifica SOA.
Nel nostro caso il wsdl generato ha la seguente forma

 

  • La sezione type presenta i tipi e gli elementi definiti nell’xsd.
  • La sezione messages presenta tutti i messaggi gestibili dal nostro soa server. La nostra classe ha individuato tanti messaggi quanti sono gli elementi definiti nell’xsd con suffisso Request e Response
  • La sezione operation presenta i servizi esposti dal server specificando per ogni servizio il messaggio di ingresso e di uscita.
  • infine la sezione servizi indica a quale url sono disponibili i nostri servizi.

Nel nostro caso la classe ha individuato un solo servizio RicercaLibro che riceve in ingresso la RicercaLibroRequest e restituisce in uscita la RicercaLibroResponse. Tale servizio è disponibile all’url http://localhost:10000/libreria/webservice.

Per poter avere un riscontro agevole di quanto fatto possiamo caricare il nostro wsdl tramite il tool soap ui, ottimo strumento per il testing dei servizi SOA.

Nel prossimo articolo vedremo come mettere in piedi il nostro server con l’aiuto di spring-ws.

SPRING WS – TUTORIAL 1 – PRIMA IL CONTRATTO

Vediamo come usare Spring Ws per la realizzazione di un web service.

Spring Ws parte dalla definizione del contratto e solo successivamente affronta il problema dell’implementazione. Il vantaggio di questo approccio è quello di permettere allo sviluppatore di concentrarsi sul design del servizio e solo successivamente sulla stesura del codice.

Scopo di questa serie di articoli è la realizzazione di un web service per la ricerca di un libro da un catalogo. La ricerca del libro avviene per titolo o per cognome dell’autore.

Definiamo prima di tutto la struttura dati utilizzata dal web service.

Per semplificazione la struttura dati del libro è di questo tipo:


mentre richiesta e risposta hanno questa struttura


Definite le strutture dati possiamo definire il wsdl, ovvero il file che descrive il web service in modo completo. Usando Spring ws non è necessario farlo a mano, in quanto è disponibile un modulo che a partire dalla struttura dati indicata sopra può generare il file a runtime. Nel prossimo articolo vedremo la struttura del file per ripassare i concetti sul contratto.

SPRING WS – INTRODUZIONE

Spring Web Services è un prodotto della comuntà Spring che permette di creare web services partendo dal contratto. Esso facilita lo sviluppo tramite una gestione più flessibile della creazione dei web services.

Permette di sviluppare ed esporre web services in modo estremamente semplice; la possibilità di godere delle implementazioni di Spring permette agli sviluppatori di concentrarsi sul design dei servizi e riutilizzare le competenze maturate su un modulo basato su spring.

Il motore di Spring Ws consente di disaccoppiare facilmente il contratto dalla sua implementazione, di redirigere le richieste in arrivo verso gli endpoint appropriati in base al contenuto del messaggio, al SOAP header od ad una XPath expression. Inoltre esso consente di integrare le varie librerie per la gestione di file xml in base alle varie esigenze dello sviluppatore.

Supporta la WS-Security e consente di integrare facilmente il modulo Acegi Security, che gestisce la sicurezza dei propri servizi.

I sorgenti di Spring-Ws sono disponibili tramite Maven e pertanto facilmente riusabili nei nostri progetti.

Infine viene rilasciato con licenza Apache, il che permette di poterlo integrare nei nostri progetti salvo indicarlo nei nostri rilasci.

TUTORIAL SENCHA GXT 1 – LAVORARE CON MAVEN

Iniziamo una serie di articoli dedicati a Ext GWT, più brevemente GXT, il framework sviluppato da Sencha, che consente di estendere le potenzialità della libreria del Google Web Toolkit.

In questo articolo ci preoccupiamo di configurare un progetto GXT usando Maven ed Eclipse come IDE. Per configurare Eclipse occorre scaricare la versione Juno (4.2) , installare il GWT plugin usando l’update site disponibile all’url http://dl.google.com/eclipse/plugin/4.2 e installare m2eclipse tramite l’update site disponibile all’url http://download.eclipse.org/technology/m2e/releases.

Configurato Eclipse realizziamo il nostro primo progetto avvalendoci di maven e dell’archetipo gwt-maven-plugin tramite la direttiva

Tramite questa direttiva maven crea un progetto che supporta l’alberatura di GWT. Durante l’esecuzione della direttiva specifichiamo il nome del modulo principale (nel mio caso Application), ovvero la classe che implementa l’entry point, il punto di accesso alla nostra applicazione.

A questo punto tramite la direttiva mvn gwt:eclipse possiamo generare i file necessari ad effettuare l’import in Eclipse.

Resta da aggiungere la dipendenza da GXT, agendo sul pom.xml e sul file xml associato al modulo entry point.

Aggiungiamo la versione di GXT da usare tramite il tag <gxt.version>3.0.1</gxt.version>

Specifichiamo il repository  da cui scaricare i sorgenti di GXT

E infine aggiungiamo la dipendenza da GXT tramite il blocco

Una volta aggiunta la dipendenza rendiamola attiva nel progetto eclipse tramite la direttiva mvn gwt:eclipse che si preoccuperà di scaricare le nuove librerie.

Resta da modificare il modulo Application.gwt.xml per rimuovere il tema di GWT e innestare l’eredità da GXT tramite il comando

e linkare il file reset.css nella pagina Application.html tramite la direttiva

Nel file Application.java sostituiamo il gwt-button con un oggetto sencha com.sencha.gxt.widget.core.client.button.TextButton  e se abbiamo operato correttamente tramite la direttiva mvn gwt:run possiamo verificare che il progetto venga avviato correttamente.

XML TUTORIAL – 6 – USARE XMLBEANS

Con l’articolo di oggi vediamo in dettaglio come sfruttare una delle librerie più note nella gestione dei file XML, ovvero XMLBEANS dell’Apache Software Foundation.

Questa libreria permette di generare a partire dallo schema XSD tutte le classi per la manipolazione di file xml che rispettino lo schema dato.

Per l’installazione rimando alla guida esauriente presente sul sito di XMLBEANS. Per l’utilizzo vediamo invece quali sono gli step da seguire.

Individuiamo uno schema XSD, da cui generare le nostre classi e scegliamo la struttura libro.

Tramite la direttiva scomp posso generare la libreria contenente le classi per la manipolazione dei file.

Con questo comando dico a XmlBeans di generare un jar che libro.jar secondo gli standard di java 1.5

A questo punto importanto la libreria dentro un qualsiasi progetto posso creare file xml in accordo con lo schema definito o validare dei file xml esistenti.

Lettura File XML

In questo modo posso instanziare un oggetto libro ottenuto dalla lettura del file xml

Creazione File XML

In questo modo posso creare un file xml a partire dall’oggetto java.

Validazione File XML

Ultimo caso, ma non per questo meno interessante, prevede lo scenario in cui l’utente vuole verificare se il file da analizzare rispetta lo schema e in caso negativo in quali punti non è corretto.