JAX-WS e JAX-RS
Come sviluppare servizi SOAP e REST in standard JAX-WS e
JAX-RS su Liferay
Antonio Musarra, Software e Architectural Consultant, Key-Biz Srl
@antonio_musarra
Antonio Musarra (@antonio_musarra)
Software e Architectural Consultant, Key-Biz Srl
Web: http://www.key-biz.it
Blog: http://www.dontesta.it/blog
GitHub: https://github.com/amusarra
SlideShare: http://www.slideshare.net/amusarra
Ho iniziato il mio viaggio nel mondo dell'informatica da un Olivetti M24 dotato di un
processore Intel 8086 acquistato da mio padre esclusivamente per il suo lavoro. Non ho mai
posseduto console di nessun genere (Commodore, Amiga, etc…) e inizialmente
quell'enorme scatola mi terrorizzava, terrore durato poco; giorno dopo giorno prendevo
rapidamente il controllo fino a quando….
Ho sempre creduto che la condivisione della conoscenza sia un ottimo mezzo per la crescita
personale e questo è stato uno dei principali motivi che mi ha spinto sei anni fa a creare il
mio blog personale www.dontesta.it
Dicono di me che sono bravo nell'analizzare e risolvere rapidamente i problemi complessi.
La mia attività odierna è quella di consulente in progetti enterprise che utilizzano tecnologie
Web Oriented come J2EE, Web Services, ESB, TIBCO.
Java standard per Web Service
JAX-WS (Java API for XML Web Services): è un insieme di API Java dedicate allo
sviluppo di servizi web. L'insieme fa parte della piattaforma Java EE. JAX-WS usa
annotazioni per semplificare lo sviluppo e le implementazioni di client. JAX-WS include
Java Architecture for XML Binding (JAXB) e SOAP.
@antonio_musarra
JAX-RS (Java API for RESTful): è un insieme di API Java dedicate allo sviluppo di
servizi web in base al pattern architetturale Representational State Transfer (REST).
L'insieme fa parte della piattaforma Java EE. JAX-RS usa annotazioni per semplificare lo
sviluppo e le implementazioni di client.
Liferay Web Service
• La generazione e l’invocazione dei servizi web è una parte centrale della esperienza di
sviluppo Liferay
• Liferay senza servizi web sarebbe come una macchina di lusso senza ruote.
• Fortunatamente, Liferay è dotato di una serie completa di servizi JSON e SOAP che
espongo tutte le funzionalità core.
• Liferay offre anche il framework (Service Builder) per generare servizi locali e remoti
per le tue applicazioni.
@antonio_musarra
Standard JAX-WS e JAX-RS
@antonio_musarra
• Dalla versione 7 Liferay supporta i due standard java per i servizi web JAX-WS e
JAX-RS
• L’implementazione dei due standard JAX-WS e JAX-RS che Liferay ha deciso di
adottare è Apache CXF
• Ogni Apps può pubblicare i servizi web su endpoint Apache CXF definiti sulla propria
istanza Liferay
• Gli endpoint Apache CXF sono effettivamente percorsi di contesto (o context path)
dei servizi web dove vengono distribuiti e resi accessibili
• E’ possibile definire sulla propria istanza Liferay uno o più endpoint Apache CXF
• Per accedere ai servizi web, un extender deve essere configurato nell'istanza Liferay
Liferay SOAP e REST Extender
@antonio_musarra
Gli Extenders specificano dove i servizi vengono distribuiti
e se hanno handler, filter, provider, etc. Ci sono due tipi di
extender:
• SOAP Extenders: Richiesto per la pubblicazione di
servizi web JAX-WS in grado di distribuire su uno o più
endpoint CXF con la possibilità di configurare handler,
filter, provider, etc.
• REST Extenders: Richiesto per la pubblicazione di
servizi web JAX-RS e offre servizi analoghi
all’extender SOAP.
JAX WS API
JSR-224
JAX RS API
JSR-370
Apache CXF
(v. 3.0.3)
Liferay
SOAP Extender
Liferay
REST Extender
My Liferay 7 App
Rest Service SOAP Service
Liferay SOAP e REST Extender
@antonio_musarra
• I SOAP e REST Extender sono dei sottosistemi che tracciano i servizi corrispondenti
ai filtri OSGi specificati in configurazione e li distribuiscono sotto a specifici endpoint
CXF
• Tramite i filtri OSGi posso istruire gli extender per registrare non solo i servizi web
REST e SOAP ma anche per indicare quali sono i componenti che implementano gli
eventuali handler, filter e provider
• Gli endpoint CXF per entrambi i tipi di extender possono essere creati a livello di
codice o tramite il Pannello di controllo di Liferay
Liferay SOAP e REST Extender
@antonio_musarra
Per ogni extenders abbiamo
la possibilità di
configurare ogni
elemento tramite Pannello
di controllo Liferay o per
via programmatica
attraverso l’indicazione
sul file bnd di quale sia il
file di configurazione da
adottare per il bundle che
contiene i servizi web.
Pubblicazione dei servizi JAX-RS
@antonio_musarra
È possibile pubblicare un servizio web JAX-RS che risiede all’interno di un modulo
Liferay così come si farebbe al di fuori di Liferay. A seguire l’esempio di un servizio.
Pubblicazione dei servizi JAX-WS
@antonio_musarra
È possibile pubblicare un servizio web JAX-WS che risiede all’interno di un modulo
Liferay così come si farebbe al di fuori di Liferay. A seguire l’esempio di un servizio
Costruiamo un progetto d’esempio
@antonio_musarra
Supponiamo che un sistema esterno abbia bisogno di accedere ad un set di dati che
risiedono su Liferay attraverso un set di API semplici esposte via JAX-RS e JAX-WS.
Come procedere?
• Definire l’insieme d’interfacce, quindi il set di API
• Implementare l’insieme d’interfacce come servizi locali
• Implementare l’endpoint JAX-RS per i servizi web REST
• Implementare l’endpoint JAX-WS per i servizi web SOAP
• Configurare gli Extender SOAP e REST sull’instanza di Liferay
Costruiamo un progetto d’esempio
@antonio_musarra
Il progetto Liferay è organizzato in moduli distribuiti così come indicato nella mappa e ogni
modulo è poi i realtà un bundle OSGi che andrà installato sull’istanza Liferay. La nostra
istanza Liferay conterrà quindi quattro bundle OSGi.
Costruiamo un progetto d’esempio
@antonio_musarra
I due bundle rappresentano i due endpoint JAX-RS e JAX-WS che implementano le API
definite dal modulo Custom User Service API. In figura sono evidenti gli endpoint CXF e i
filtri OSGi che consento agli extender la registrazione come servizi.
Costruiamo un progetto d’esempio
@antonio_musarra
Nel class diagram sono indicate le interfacce e le implementazioni dei servizi locali e remoti
esposti come endpoint JAX-WS e JAX-RS
Deploy e test dei servizi
@antonio_musarra
Dopo il deploy del progetto abbiamo attivi i quattro bundle OSGi, così come visibile nella
figura a seguire (esecuzione del comando lb | grep Custom). Da questo momento i servizi
web sono disponibili.
Gli endpoint dei servizi web (sulla propria istanza Liferay) sono:
• http://localhost:8080/o/rest/ext.persons
• http://localhost:8080/o/web-services/CustomUserServiceWSEndPoint
Deploy e test dei servizi
@antonio_musarra
In figura l’esempio un esempio di
chiamata al servizio web JAX-RS appena
installato. La chiamata è stata eseguita
tramite il comando curl.
curl -v
http://localhost:8080/o/rest/ext.persons
/list/tag/it-architect | prettyjson
In questo caso il servizio restituisce i
contatti Liferay che sono taggati con il
valore it-architect.
Ci vediamo al prossimo Symposium
@antonio_musarra
…Però, se siete curiosi di scoprire di più su Liferay 7:
• http://www.dontesta.it/blog
• http://www.slideshare.net/amusarra
• https://github.com/amusarra
• https://dev.liferay.com
…e nel frattempo scaricate l’intero progetto da https://github.com/amusarra/liferay-web-
services-jaxwsrs
Antonio Musarra
@antonio_musarra
Grazie!

JAX-WS e JAX-RS

  • 1.
    JAX-WS e JAX-RS Comesviluppare servizi SOAP e REST in standard JAX-WS e JAX-RS su Liferay Antonio Musarra, Software e Architectural Consultant, Key-Biz Srl
  • 2.
    @antonio_musarra Antonio Musarra (@antonio_musarra) Softwaree Architectural Consultant, Key-Biz Srl Web: http://www.key-biz.it Blog: http://www.dontesta.it/blog GitHub: https://github.com/amusarra SlideShare: http://www.slideshare.net/amusarra Ho iniziato il mio viaggio nel mondo dell'informatica da un Olivetti M24 dotato di un processore Intel 8086 acquistato da mio padre esclusivamente per il suo lavoro. Non ho mai posseduto console di nessun genere (Commodore, Amiga, etc…) e inizialmente quell'enorme scatola mi terrorizzava, terrore durato poco; giorno dopo giorno prendevo rapidamente il controllo fino a quando…. Ho sempre creduto che la condivisione della conoscenza sia un ottimo mezzo per la crescita personale e questo è stato uno dei principali motivi che mi ha spinto sei anni fa a creare il mio blog personale www.dontesta.it Dicono di me che sono bravo nell'analizzare e risolvere rapidamente i problemi complessi. La mia attività odierna è quella di consulente in progetti enterprise che utilizzano tecnologie Web Oriented come J2EE, Web Services, ESB, TIBCO.
  • 3.
    Java standard perWeb Service JAX-WS (Java API for XML Web Services): è un insieme di API Java dedicate allo sviluppo di servizi web. L'insieme fa parte della piattaforma Java EE. JAX-WS usa annotazioni per semplificare lo sviluppo e le implementazioni di client. JAX-WS include Java Architecture for XML Binding (JAXB) e SOAP. @antonio_musarra JAX-RS (Java API for RESTful): è un insieme di API Java dedicate allo sviluppo di servizi web in base al pattern architetturale Representational State Transfer (REST). L'insieme fa parte della piattaforma Java EE. JAX-RS usa annotazioni per semplificare lo sviluppo e le implementazioni di client.
  • 4.
    Liferay Web Service •La generazione e l’invocazione dei servizi web è una parte centrale della esperienza di sviluppo Liferay • Liferay senza servizi web sarebbe come una macchina di lusso senza ruote. • Fortunatamente, Liferay è dotato di una serie completa di servizi JSON e SOAP che espongo tutte le funzionalità core. • Liferay offre anche il framework (Service Builder) per generare servizi locali e remoti per le tue applicazioni. @antonio_musarra
  • 5.
    Standard JAX-WS eJAX-RS @antonio_musarra • Dalla versione 7 Liferay supporta i due standard java per i servizi web JAX-WS e JAX-RS • L’implementazione dei due standard JAX-WS e JAX-RS che Liferay ha deciso di adottare è Apache CXF • Ogni Apps può pubblicare i servizi web su endpoint Apache CXF definiti sulla propria istanza Liferay • Gli endpoint Apache CXF sono effettivamente percorsi di contesto (o context path) dei servizi web dove vengono distribuiti e resi accessibili • E’ possibile definire sulla propria istanza Liferay uno o più endpoint Apache CXF • Per accedere ai servizi web, un extender deve essere configurato nell'istanza Liferay
  • 6.
    Liferay SOAP eREST Extender @antonio_musarra Gli Extenders specificano dove i servizi vengono distribuiti e se hanno handler, filter, provider, etc. Ci sono due tipi di extender: • SOAP Extenders: Richiesto per la pubblicazione di servizi web JAX-WS in grado di distribuire su uno o più endpoint CXF con la possibilità di configurare handler, filter, provider, etc. • REST Extenders: Richiesto per la pubblicazione di servizi web JAX-RS e offre servizi analoghi all’extender SOAP. JAX WS API JSR-224 JAX RS API JSR-370 Apache CXF (v. 3.0.3) Liferay SOAP Extender Liferay REST Extender My Liferay 7 App Rest Service SOAP Service
  • 7.
    Liferay SOAP eREST Extender @antonio_musarra • I SOAP e REST Extender sono dei sottosistemi che tracciano i servizi corrispondenti ai filtri OSGi specificati in configurazione e li distribuiscono sotto a specifici endpoint CXF • Tramite i filtri OSGi posso istruire gli extender per registrare non solo i servizi web REST e SOAP ma anche per indicare quali sono i componenti che implementano gli eventuali handler, filter e provider • Gli endpoint CXF per entrambi i tipi di extender possono essere creati a livello di codice o tramite il Pannello di controllo di Liferay
  • 8.
    Liferay SOAP eREST Extender @antonio_musarra Per ogni extenders abbiamo la possibilità di configurare ogni elemento tramite Pannello di controllo Liferay o per via programmatica attraverso l’indicazione sul file bnd di quale sia il file di configurazione da adottare per il bundle che contiene i servizi web.
  • 9.
    Pubblicazione dei serviziJAX-RS @antonio_musarra È possibile pubblicare un servizio web JAX-RS che risiede all’interno di un modulo Liferay così come si farebbe al di fuori di Liferay. A seguire l’esempio di un servizio.
  • 10.
    Pubblicazione dei serviziJAX-WS @antonio_musarra È possibile pubblicare un servizio web JAX-WS che risiede all’interno di un modulo Liferay così come si farebbe al di fuori di Liferay. A seguire l’esempio di un servizio
  • 11.
    Costruiamo un progettod’esempio @antonio_musarra Supponiamo che un sistema esterno abbia bisogno di accedere ad un set di dati che risiedono su Liferay attraverso un set di API semplici esposte via JAX-RS e JAX-WS. Come procedere? • Definire l’insieme d’interfacce, quindi il set di API • Implementare l’insieme d’interfacce come servizi locali • Implementare l’endpoint JAX-RS per i servizi web REST • Implementare l’endpoint JAX-WS per i servizi web SOAP • Configurare gli Extender SOAP e REST sull’instanza di Liferay
  • 12.
    Costruiamo un progettod’esempio @antonio_musarra Il progetto Liferay è organizzato in moduli distribuiti così come indicato nella mappa e ogni modulo è poi i realtà un bundle OSGi che andrà installato sull’istanza Liferay. La nostra istanza Liferay conterrà quindi quattro bundle OSGi.
  • 13.
    Costruiamo un progettod’esempio @antonio_musarra I due bundle rappresentano i due endpoint JAX-RS e JAX-WS che implementano le API definite dal modulo Custom User Service API. In figura sono evidenti gli endpoint CXF e i filtri OSGi che consento agli extender la registrazione come servizi.
  • 14.
    Costruiamo un progettod’esempio @antonio_musarra Nel class diagram sono indicate le interfacce e le implementazioni dei servizi locali e remoti esposti come endpoint JAX-WS e JAX-RS
  • 15.
    Deploy e testdei servizi @antonio_musarra Dopo il deploy del progetto abbiamo attivi i quattro bundle OSGi, così come visibile nella figura a seguire (esecuzione del comando lb | grep Custom). Da questo momento i servizi web sono disponibili. Gli endpoint dei servizi web (sulla propria istanza Liferay) sono: • http://localhost:8080/o/rest/ext.persons • http://localhost:8080/o/web-services/CustomUserServiceWSEndPoint
  • 16.
    Deploy e testdei servizi @antonio_musarra In figura l’esempio un esempio di chiamata al servizio web JAX-RS appena installato. La chiamata è stata eseguita tramite il comando curl. curl -v http://localhost:8080/o/rest/ext.persons /list/tag/it-architect | prettyjson In questo caso il servizio restituisce i contatti Liferay che sono taggati con il valore it-architect.
  • 17.
    Ci vediamo alprossimo Symposium @antonio_musarra …Però, se siete curiosi di scoprire di più su Liferay 7: • http://www.dontesta.it/blog • http://www.slideshare.net/amusarra • https://github.com/amusarra • https://dev.liferay.com …e nel frattempo scaricate l’intero progetto da https://github.com/amusarra/liferay-web- services-jaxwsrs Antonio Musarra @antonio_musarra Grazie!