Archivi categoria: DOCUMENTAZIONE

La categoria contiene tutta la documentazione disponibile per la consultazione

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.

 

XML TUTORIAL – 5 – XSD E PARSER

Per poter validare un file XML occorre indicare al parser dove recuperare lo schema. Tale informazione può essere indicata  nell’elemento radice del file usando i tag xmlns:xsi e xsi:noNamespaceSchemaLocation.

L’attributo xmlns:xsi indica un URL che specifica la modalità con cui si indicherà il riferimento allo schema XML, mentre l’attributoxsi:noNamespaceSchemaLocation indica il nome e l’eventuale percorso del file contenente lo schema XML di riferimento.

Concetto fondamentale è quello del namespace, che permette di individuare univocamente un tipo all’interno del file xml, qualora all’interno del file sia presenti grammatiche diverse.

Per namespace si intende un insieme di nomi di elementi e nomi di attributi identificati univocamente da un identificatore.

Per definire un namespace si usa l’attributo xmlns associato al root element, come nel seguente esempio:

Questa formula indica che l’elemento articolo ed i suoi sottoelementi utilizzano i nomi definiti nel namespace identificato dall’identificatore http://www.valeriofinazzo.it/libro. Il valore del namespace è una stringa libera, che per prassi, viene indicata tramite una URI, Uniform Resource Identifier.

È possibile creare delle abbreviazioni per fare riferimento ai namespace, costituite da caratteri alfanumerici seguiti da due punti (:) dichiarati nel root element ed utilizzati come prefissi dei nomi degli elementi.

Es. <lib:libro titolo=”Titolo” xmlns:lib=”http://www.valeriofinazzo.it/libro”  >

XML TUTORIAL – 4 – XML SCHEMA DEFINITION

Dopo aver visto i limiti del DTD analizziamo l’altra soluzione che li supera e permette una definizione univoca di tutte le caratteristiche di un file xml.

L’XML Schema introduce il concetto di tipo di dato semplice per definire gli elementi che non possono contenere altri elementi e non prevedono attributi. Tali dati semplici possono essere utilizzati per definire elementi più complessi.

Sono previsti dei dati predefiniti come ad esempio l’integer, che definisce un numero intero oppure è possibile definire altri tipi semplici.

Ad esempio <xs:element name=”nome” type=”xs:string” /> preveve che l’elemento name in un documento XML possa contenere una sequenza di caratteri.

A partire dai dati predefiniti è possibile definire altri tipi di dati semplici, potendo aggiungere ulteriori restrizioni. Ad esempio possiamo ridefinire l’elemento nome aggiungendo che sia una stringa di almeno 5 caratteri. La definizione di un tipo semplice utilizza il tag simpleType.

In altre parole, la dichiarazione indica che l’elemento <quantita> è di tipo semplice e prevede una restrizione sul tipo di dato intero predefinito accettando valori compresi tra 1 e 100.

Per dato complesso si intende un elemento che possa contenere altri elementi o avere attributi. La definizione di un elemento complesso si avvale del tag complexType. Per definire gli elementi che un elemento complesso sono disponibili 3 costruttori diversi:

  • <xs:sequence> Consente di definire una sequenza ordinata di sottoelementi
  • <xs:choice> Consente di definire un elenco di sottoelementi alternativi
  • <xs:all> Consente di definire una sequenza non ordinata di sottoelementi

Per ciascuno di questi costruttori e per ciascun elemento è possibile definire il numero di occorrenze previste utilizzando gli attributi minOccurs e maxOccurs.

Per definire gli attributi di un elemento si usa il tag <xs:attribute>, che può essere dichiarato opzionale o obbligatorio.

XML TUTORIAL – 3 – DOCUMENT TYPE DEFINITION

Il Document Type Definitio, detto Dtd, è un documento che descrive i tag previsti in un documento XML, la loro relazione e le informazioni sugli attributi di ciascun tag.

All’interno di un Dtd si individuano essenzialmente 2 tag:

  • <!ELEMENT>
  • <!ATTLIST>

<!ELEMNT> definisce gli elementi del documento, la loro relazione e di conseguenza la struttura del documento.

<!ATTLIST> definisce la lista di attributi di ciascun elemento.

La sintassi del Dtd prevede l’utilizzo di alcuni operatori per individuare l’occorrenza degli elementi in uno schema.

  • + indica che l’elemento è presente una o più volte

  • * indica che l’elemento è presente zero o più volte

  • ? indica che l’elemento è presente zero o una sola volta

Dunque un DTD del genere <!ELEMENT libro(autore, capitolo+)> indica che un libro contiene un elemento autore e una o più occcorenze di un elemente capitolo.

Per gestire il contenuto di un elemento si posso usare le parole chiavi EMPTY, PCDATA, CDATA e ANY.

Un tag vuoto viene definito come <!ELEMENT vuoto EMPTY>, un tag che contiene solo testo prevede una definizione del tipo <!ELEMENT text (#PCDATA)>, se non sono noti valori a priori si usa ANY con una dichiarazione del tipo <!ELEMENT jolly ANY>

Per definire gli attributi di un elemento si usa il tag <!ATTLIST>, con l’ausilio delle parole chiavi

  • #REQUIRED (obbligatorio)
  • #IMPLIED     (opzionale)

  • #FIXED        (valore fisso)

Ad esempio la dichiarazione <!ATTLIST libro titolo   CDATA #REQUIRED > indica che l’elemento libro ha un attributo obbligatorio di tipo testo denominato titolo.

Per indicare il Dtd cui fa riferimento un file XML è possibile seguire 2 approcci: inserire il Dtd all’interno del file XML utilizzando il tag !DOCTYPE oppure inserendo il path del file Dtd, che può essere un path locale o un indirizzo web.

es. 1  <?xml version=”1.0″><!DOCTYPE libro[…Definizioni del Dtd…]>

es. 2  <?xml version=”1.0″><!DOCTYPE libro SYSTEM “articolo.dtd”>

es.3  <?xml version=”1.0″><!DOCTYPE articolo SYSTEM http://www.valeriofinazzo.it/libro.dtd”>

Con l’uso dei Dtd un parser può verificare la correttezza sintattica di un file xml, tuttavia alcune limitazioni del Dtd ne sconsigliano l’uso in favore di un altro approccio, quello dell’XML Schema.

XML TUTORIAL – 2 – ELEMENTI BASE

partiamo da un esempio di file xml per evidenziare le caratteristiche basi di un file xml

La prima riga del documento  <?xml version=”1.0″ ?> identifica il file documento XML specificando la versione.

XML permette di definire quanti tag si voglia purchè essi vengano sempre chiusi. Inoltre è possibile specificare un attributo inserendo il nome dell’attributo con il relativo valore all’interno del tag di apertura dell’elemento.

XML prevede una sintassi abbreviata per gli elementi vuoti che evita di dover specificare il tag di chiusura, terminando il tag di apertura con la sequenza di caratteri “/>”, come nel seguente esempio.

Le due notazioni per gli elementi vuoti sono equivalenti.

Riassumendo tutti i documenti XML devono essere ben formati e affinchè un documento XML sia ben formato deve rispettare le seguenti regole:

  • Ogni documento XML deve contenere un unico elemento di massimo livello (root) che contenga tutti gli altri elementi del documento.
  • Ogni elemento deve avere un tag di chiusura o, se vuoti, possono prevedere la forma abbreviata (/>)
  • Gli elementi devono essere opportunamente nidificati, cioè i tag di chiusura devono seguire l’ordine inverso dei rispettivi tag di apertura
  • XML fa distinzione tra maiuscole e minuscole, per cui i nomi dei tag e degli attributi devono coincidere nei tag di apertura e chiusura anche in relazione a questo aspetto
  • I valori degli attributi devono sempre essere racchiusi tra singoli o doppi apici

La scelta dei nomi dei tag deve seguire alcune regole: un tag può iniziare con un lettera o un underscore (_) e può contenere lettere, numeri, il punto, l’underscore (_) o il trattino (-). Non sono ammessi spazi o altri caratteri. Inoltre XML è sensibile all’uso di maiuscolo e minuscolo.

Per quanto riguarda il contenuto, un documento XML può contenere potenzialmente qualsiasi carattere dell’alfabeto latino, cifre e punteggiatura. L’encoding deve essere specificato nell’intestazione del documento, es.

E’ possibile inserire dei commenti tramite le sequenze di caratteri <!– e –> e possono trovarsi in qualsiasi punto del documento.

Infine per poter inserire caratteri chiavi dell’xml in modo che vengano considerati come semplice testo si fa ricorso alla sezione CDATA.

La sezione CDATA (Character DATA) è un blocco di testo che viene considerato sempre come testo, anche se contiene codice XML o altri caratteri speciali. Per indicare una sezione CDATA è sufficiente racchiuderla tra le sequenze di caratteri <![CDATA[ e ]]>.

XML TUTORIAL – 1 – INTRODUZIONE

Inizia una serie di articoli dedicati a quel componente che ha influenzato pesantemente lo sviluppo delle applicazioni in ambito enterprise, ovvero l’XML, acronimo di eXtensible Markup Language.

Esso è un linguaggio che permette di definire altri linguaggi di markup. Definisce un insieme standard di regole sintattiche per modellare la struttura di documenti e dati. Tali specifiche ufficiali sono state definite dal W3C (Worl Wide Web Consortium) e sono consultabili all’indirizzo http://www.w3.org/XML.

XML è dunque un meta-linguaggio per definire la struttura di documenti e dati, dove per documento XML si intende un file di testo contenente una serie di tag, attributi e testo secondo regole sintattiche ben definite.

Il documento XML è caratterizzato da una struttura gerarchica, composto da componenti denominati elementi. Ciascun elemento rappresenta un componente logico del documento e può contenere altri elementi (sottoelementi) o del testo. Ad ogni elemento possono essere associate informazioni dette attributi, che descrivono le proprietà dell’elemento.

L’organizzazione degli elementi presenta un ordine gerarchico con un elemento principale detto root element e gli elementi che compongono l’albero vengono definiti tag.

Nel prossimo articolo vedremo in dettaglio una struttura xml per approfondire i contetti espressi