Tutorial di configurazione e programmazione di OpenSPCoop. Tutorial di configurazione e programmazione di OpenSPCoop



Documenti analoghi
Tutorial di configurazione e programmazione di OpenSPCoop. Tutorial di configurazione e programmazione di OpenSPCoop

Manuale Gestione di OpenSPCoop 1.4 i. Manuale Gestione di OpenSPCoop 1.4

QUALIFICAZIONE DELLA PORTA DI DOMINIO

Manuale gestione Porta di Dominio OpenSPCoop 1.1

Guida Utente della PddConsole. Guida Utente della PddConsole

ZTL Firenze Inserimento Automatico

PROGETTO TESSERA SANITARIA

INF-1: Specifiche Tecniche di Interfaccia

Guida Utente della PddConsole. Guida Utente della PddConsole

PROGETTO TESSERA SANITARIA

Guida Utente della PddConsole. Guida Utente della PddConsole

Guida alla programmazione e integrazione di servizi in OpenSPCoop. Guida alla programmazione e integrazione di servizi in OpenSPCoop

Specifiche di invocazione del sistema di monitoraggio e controllo servizi CART

Tutorial di configurazione e programmazione OpenSPCoop. Tutorial di configurazione e programmazione OpenSPCoop

Web Service SOAP e WSDL. Tito Flagella tito@link.it Lorenzo Nardi nardi80@gmail.com

Il Registro dei Servizi di OpenSPCoop i. Il Registro dei Servizi di OpenSPCoop

Il Gestore Eventi di OpenSPCoop i. Il Gestore Eventi di OpenSPCoop

1. Accordo di servizio Richiesta Indirizzi PEC CAD Art6 [concessionario del servizio di posta certificata al cittadino]

A2A Specifiche Web Services

Guida alla programmazione e integrazione di servizi in OpenSPCoop. Guida alla programmazione e integrazione di servizi in OpenSPCoop

Gestione XML della Porta di Dominio OpenSPCoop

Il Web-Service SDMX dell ISTAT

SOMMARIO... 3 INTRODUZIONE...

PROGETTO TESSERA SANITARIA SERVIZI DI COMUNICAZIONE ATTIVAZIONE E REVOCA DELLE TS-CNS

WEB SERVICES SERVIZI PER RICEZIONE ED ELABORAZIONE MESSAGGI AMBIENTE REALE

WEB SERVICES SERVIZI PER RICEZIONE ED ELABORAZIONE MESSAGGI AMBIENTE PROVA

Progetto SIRPE De-materializzazione delle prescrizioni. Servizi personalizzati della CIL

Client e Server comunicano tramite il protocollo SOAP.

Regione Piemonte Portale Rilevazioni Crediti EELL Manuale Utente

Integrazione InfiniteCRM - MailUp

Gestione Richieste Patenti Web

Procedura SMS. Manuale Utente

Release Notes di OpenSPCoop2. Release Notes di OpenSPCoop2

Software di interfacciamento sistemi gestionali Manuale di installazione, configurazione ed utilizzo

Portale regionale della Salute. Servizi di prenotazione prestazione e pagamento ticket.

appunti delle lezioni Architetture client/server: applicazioni client

Il Web-Service SDMX dell ISTAT

NOTE OPERATIVE. Prodotto Inaz Download Manager. Release 1.3.0

Software Servizi Web UOGA

GateManager. 1 Indice. tecnico@gate-manager.it

ALICE AMMINISTRAZIONE UTENTI WEB

Registratori di Cassa

PROGETTO TESSERA SANITARIA WEB SERVICE CMS ATTIVAZIONE E REVOCA TS-CNS IN INTEROPERABILITA FRA CARD MANAGEMENT SYSTEM

Manuale Amministratore Legalmail Enterprise. Manuale ad uso degli Amministratori del Servizio Legalmail Enterprise

Servizi Remoti. Servizi Remoti. TeamPortal Servizi Remoti

Specifiche tecniche per il controllo e la trasmissione telematica delle pratiche di Comunicazione Unica

SDK-CART. Versione 1.1

Guida alla registrazione on-line di un DataLogger

Manuale d uso Software di parcellazione per commercialisti Ver [05/01/2015]

Configurazione di Outlook Express

Gestione Risorse Umane Web

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

Web Service per il controllo e la trasmissione telematica delle pratiche di Comunicazione Unica

SIRTEL. Sistema Informativo per la Rendicontazione Telematica degli Enti Locali. Schema di funzionamento del processo per l Ente Locale

Release Notes di OpenSPCoop2. Release Notes di OpenSPCoop2

DOCFINDERWEB SERVICE E CLIENT

Mon Ami 3000 MACommerce La soluzione per il commercio elettronico totalmente integrata con Mon Ami 3000

Sistema per il monitoraggio della Spesa Sanitaria

Guida all accesso al portale e ai servizi self service

Hub-PA Versione Manuale utente

Il Sistema di interscambio: Prodotti di TEST a supporto dell adesione ai servizi

Specifiche Tecnico-Funzionali

OSSERVATORIO REGIONALE CONTRATTI PUBBLICI DI LAVORI, SERVIZI E FORNITURE

MANUALE DI UTILIZZO: INTRANET PROVINCIA DI POTENZA

Mac Application Manager 1.3 (SOLO PER TIGER)

PSNET UC RUPAR PIEMONTE MANUALE OPERATIVO

SOFTWARE A SUPPORTO DELLA GESTIONE AMMINISTRATIVA DELLO SPORTELLO UNICO SPECIFICA DEI REQUISITI UTENTE

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

Manuale per la ricezione del DURC tramite Posta Elettronica Certificata

Sistema per il monitoraggio della Spesa Sanitaria

Omnia Web Timesheet. Manuale utente

Progetto interregionale ICAR Interoperabilità e Cooperazione Applicativa tra le Regioni. <Task AP3>

Guida alla Prima Configurazione dei Servizi

Cup HiWeb. Integrazione dei servizi del CUP Marche in applicativi di terze parti

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

MANUALE UTENTE FORMULA PEC

GUIDA TECNICA ALLA RENDICONTAZIONE SU SIRIO

MANUALE UTENTE Fiscali Free

1. Compilazione dell istanza di adesione

Accreditamento al SID

Manuale Gestore. STWS Web Energy Control - Servizio di telelettura sul WEB

Appendice A: Schema XML della descrizione della Busta e-gov

Progetto: ARPA Fonte Dati. ARPA Fonte Dati. Regione Toscana. Manuale Amministratore

FATTURA ELETTRONICA {

Università degli Studi di Padova Centro di Calcolo di Ateneo

Airone Gestione Rifiuti Funzioni di Esportazione e Importazione

Guida all utilizzo del web tool di gestione accesso ai Datacenter

I TUTORI. I tutori vanno creati la prima volta seguendo esclusivamente le procedure sotto descritte.

NAVIGAZIONE DEL SI-ERC: UTENTE PROGETTISTA

PRACTICAL DEVELOPMENT OF A WEB SERVICE

Regione Toscana. ARPA Fonte Dati. Manuale Amministratore. L. Folchi (TAI) Redatto da

Transcript:

i Tutorial di configurazione e programmazione di OpenSPCoop

ii Copyright 2005-2008 Link.it s.r.l.

iii COLLABORATORI TITOLO : Tutorial di configurazione e programmazione di OpenSPCoop AZIONE NOME DATA FIRMA A CURA DI 8 settembre 2009 CRONOLOGIA DELLE REVISIONI POSIZIONE DATA DESCRIZIONE NOME

iv Indice 1 Introduzione 1 2 Ambiente di sviluppo 1 3 Presentazione degli scenari di riferimento 2 4 Comunicazione Variazione (oneway) 3 4.1 Descrizione formale dell Accordo di Servizio: WSDL e WSBL........................... 3 4.2 Configurazione Porta di Dominio e Registro Servizi................................. 5 4.2.1 Configurazioni comuni a tutti gli esempi del tutorial............................ 5 4.2.2 Configurazione del registro dei servizi di OpenSPCoop........................... 7 4.3 Programmazione................................................... 12 4.3.1 Fruitore: Servizio Applicativo del Comune................................. 12 4.3.1.1 Modalità trasparente........................................ 12 4.3.1.2 Modalità via Integration Manager................................. 12 4.3.2 Erogatore: Servizio Applicativo del CentroAnagrafico........................... 13 4.4 Test e verifica..................................................... 14 5 Stato Famiglia (sincrono) 17 5.1 Descrizione formale dell Accordo di Servizio: WSDL e WSBL........................... 17 5.2 Configurazione Porta di Dominio e Registro Servizi................................. 19 5.3 Programmazione................................................... 21 5.4 Test e verifica..................................................... 21 6 Stampa Documento (AsincronoAsimmetrico) 21 6.1 Descrizione formale dell Accordo di Servizio: WSDL e WSBL........................... 21 6.2 Configurazione Porta di Dominio e Registro Servizi................................. 24 6.3 Programmazione................................................... 26 6.4 Test e verifica..................................................... 27 7 Identifica Soggetto (AsincronoSimmetrico) 27 7.1 Descrizione formale dell Accordo di Servizio: WSDL e WSBL........................... 27 7.2 Configurazione Porta di Dominio e Registro Servizi................................. 30 7.3 Programmazione................................................... 32 7.4 Test e verifica..................................................... 32

v Elenco delle tabelle 1 Dati autenticazione Registro Servizi......................................... 5 2 Dati Soggetto SPCoop Fruitore............................................ 5 3 Connettore del Soggetto SPCoop fruitore...................................... 6 4 Dati Servizio Applicativo Fruitore.......................................... 6 5 Dati del Soggetto SPCoop erogatore......................................... 6 6 Connettore del Soggetto SPCoop erogatore..................................... 7 7 Dati Accordo di servizio............................................... 7 8 Dati Servizio dell Accordo.............................................. 8 9 Dati delle azioni del servizio............................................. 8 10 Dati Servizio SPCoop................................................. 9 11 Dati Porta Applicativa................................................. 10 12 Dati Servizio Applicativo............................................... 11 13 Dati invocazione Servizio Applicativo........................................ 11 14 Dati Accordo di servizio............................................... 19 15 Dati Servizio dell Accordo.............................................. 19 16 Dati delle azioni del servizio............................................. 19 17 Dati Servizio SPCoop................................................. 20 18 Dati Porta Applicativa................................................. 20 19 Dati Servizio Applicativo............................................... 20 20 Dati invocazione Servizio Applicativo........................................ 21 21 Dati Accordo di servizio............................................... 24 22 Dati Servizio dell Accordo.............................................. 24 23 Dati delle azioni del servizio............................................. 24 24 Dati Servizio SPCoop................................................. 25 25 Dati Porta Applicativa................................................. 25 26 Dati Servizio Applicativo............................................... 26 27 Dati invocazione Servizio Applicativo........................................ 26 28 Dati Accordo di servizio............................................... 30 29 Dati Servizio Asincrono Simmetrico nell accordo di servizio............................ 30 30 Dati Servizio Asincrono Simmetrico Correlato nell accordo di servizio....................... 30 31 Dati Servizio SPCoop................................................. 31 32 Dati Servizio SPCoop correlato............................................ 31 33 Dati Porta Applicativa................................................. 31 34 Dati Servizio Applicativo Erogatore......................................... 32 35 Dati Servizio Applicativo Fruitore.......................................... 32 36 Dati invocazione Servizio Applicativo erogatore................................... 32 37 Dati risposta asincrona Servizio Applicativo fruitore................................. 33

1 / 33 1 Introduzione Questa guida documenta le procedure necessarie per la realizzazione di alcuni scenari tipici di Cooperazione Applicativa. Queste procedure riguardano sia l aspetto di cooperazione, con i passi necessari alla configurazione della Porta di Dominio OpenSPCoop, sia quello di integrazione, con lo sviluppo dei servizi applicativi. Nella figura che segue le entità che collaborano nella realizzazione di uno d interazione tra due servizi applicativi in accordo allo standard SPCoop. Nello figura proposta sono identificabili i due domini che intendono scambiare messaggi tra i rispettivi Servizi Applicativi. Le Porte di Dominio fanno da interfaccia pubblica a tali servizi, comunicando tra loro tramite messaggi secondo le specifiche e-gov. Gli aspetti di cooperazione delle Porte di Dominio coinvolte sono specificati in un Accordo di Servizio, contenuto nel Registro dei Servizi. Questo Registro contiene infatti l elenco dei Soggetti abilitati alle comunicazioni SPCoop, l elenco dei servizi erogati da ogni Soggetto e i relativi accordi di servizio. Per dare maggiore efficacia all esposizione dei contenuti si farà riferimento a quattro scenari di esempio che rappresentano casi abbastanza verosimili nell ambito della cooperazione applicativa. 2 Ambiente di sviluppo L ambiente scelto per provare gli scenari di esempio è quello risultante da un installazione Standard di OpenSPCoop. Avremo quindi a disposizione l interfaccia di gestione web Control Station per la configurazione della Porta di Dominio e del Registro dei Servizi. Nota Per semplificare la realizzazione dello scenario ed evitare il proliferare delle installazioni, erogatore e fruitore del servizio appartengono a domini gestiti della solita installazione della Porta di Dominio SPCoop (modalità loopback) Avendo una sola porta di dominio, questa sarà fruitore degli stessi servizi che eroga, ai fini del funzionamento delle sample application a corredo con il tutorial, anche se gli scenari saranno presentati mostrando fruitore ed erogatore come se fossero appartenenti a domini distinti con Porte di Dominio distinte. Per quanto riguarda i soggetti cooperanti si utilizzeranno come esempio: CentroAnagrafico, che rappresenta una generica amministrazione centrale orientata ai servizi anagrafici (soggetto erogatore)

2 / 33 Comune, che rappresenta una generica amministrazione locale che richiede dei servizi anagrafici (soggetto fruitore) Il presente tutorial assume che si siano adottate le impostazioni di default per l installazione di JBoss e che quindi i connettori per entrambi i soggetti coincidano e siano uguali a: http://localhost:8080/openspcoop/pa Suggerimento Per maggiori informazioni sulle modalità di installazione della Porta di Dominio OpenSPCoop, rimandiamo alla lettura della Guida d Installazione La figura seguente schematizza il comportamento di una Porta di Dominio con soggetti multipli 3 Presentazione degli scenari di riferimento Immaginiamo di dover sviluppare una serie di servizi di carattere anagrafico che utilizzino l infrastruttura fornira da OpenSP- Coop per le proprie comunicazioni. Immaginiamo poi che altri servizi, ad esempio quelli di un generico comune, abbiano bisogno di servirsi dei servizi erogati dall Anagrafe. Tra le varie operazioni da implementare supponiamo che ce ne sia una, che chiameremo Comunicazione Variazione, che prevede l invio di un messaggio contenente le informazioni riguardo una modifica nei dati anagrafici di un soggetto, senza aspettarsi messaggi di risposta. Analizziamo quindi le operazioni che fruitore, che chiameremo Comune, ed erogatore dovranno eseguire per realizzare questo scenario. ComunicazioneVariazione: con questa operazione si inviano i dati anagrafici di un soggetto da sostituire a quelli preesistenti. Non richiede nessuna risposta. (Oneway) RichiestaStatoFamiglia: questa operazione permette di recuperare i dati anagrafici di un soggetto. Nella richiesta viene inserito il codice fiscale di un soggetto e nella risposta saranno inclusi di dati di quel soggetto. (Sincrono) StampaDocumento: viene usato per richiedere la stampa di un documento. Poiché è un operazione che può richiedere giorni per essere portata a termine, la richiesta di stampa e il messaggio che conferma il completamento sono consegnati su connessioni distinte. Immaginiamo inoltre che per questa particolare operazione l infrastruttura del centro Anagrafe non consenta connessioni in uscita, quindi entrambe le connessioni saranno aperte dal Comune. (AsincronoAsimmetrico) IdentificaSoggetto: quest operazione permette di risalire ad un soggetto con i dati di un documento qualora non si disponesse di un codice fiscale. Anche in questo caso l operazione può essere lunga da portare a termine, quindi richiesta e risposta vengono comunicate su differenti connessioni. A differenza dell operazione StampaDocumento, immaginiamo che l infrastruttura del centro Anagrafe consenta connessioni in ingresso e in uscita. (AsincronoSimmetrico) Nei prossimi capitoli vedremo in dettaglio come realizzare gli scenari appena descritti analizzando come creare i descrittori dell Accordo di Servizio, come configurare Porta di Dominio e Registro dei Servizi, come programmare il fruitore e l erogatore dei servizi in questione ed infine come effettuare un test di verifica.

3 / 33 4 Comunicazione Variazione (oneway) 4.1 Descrizione formale dell Accordo di Servizio: WSDL e WSBL Il primo passo sarà, per l erogatore del servizio, quello di fornire il WSDL che descrive il servizio che si intende erogare. Il WSDL poi dovrà essere partizionato secondo le specifiche del CNIPA. WSDL Definitorio (definitorio.xsd) <xs:schema xmlns:so="http://www.openspcoop.org/example" xmlns:xs="http://www.w3.org/2001/xmlschema" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www.openspcoop.org/example"> <xs:element name="comunicazionevariazione"> <xs:complextype> <xs:complexcontent> <xs:extension base="so:personatype"> <xs:attribute name="cf" type="so:codicefiscaletype" use="required"/> </xs:extension> </xs:complexcontent> </xs:complextype> </xs:element> <xs:simpletype name="codicefiscaletype"> <xs:restriction base="xs:string"> <xs:pattern value="[a-za-z]{6}\d\d[a-za-z]\d\d[a-za-z]\d\d\d[a-za-z]"/> </xs:restriction> </xs:simpletype> <xs:complextype name="personatype"> <xs:sequence> <xs:element name="nome" type="xs:string"/> <xs:element name="cognome" type="xs:string"/> <xs:element name="codicefiscale" type="so:codicefiscaletype"/> <xs:element name="nascita" type="xs:date"/> <xs:element name="statocivile" type="xs:string"/> </xs:sequence> </xs:complextype> <xs:element name="notifica"> <xsd:complextype> <xsd:sequence> <xsd:element name="comunicazionevariazione" type="so:comunicazionevariazionetype"/> </xsd:sequence> </xsd:complextype> </xs:element> </xs:schema> WSDL Concettuale (concettuale.wsdl). <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc="http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

4 / 33 <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd" /> <wsdl:message name="comunicazionevariazionerequest"> <wsdl:part element="spc:notifica" name="comunicazionevariazionepart" /> <wsdl:porttype name="comunicazionevariazione"> <wsdl:operation name="notifica"> <wsdl:input message="spc:comunicazionevariazionerequest" /> </wsdl:operation> </wsdl:porttype> </wsdl:definitions> WSDL Logico Erogatore (logicoerogatore.wsdl). <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc="http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd" /> <wsdl:message name="comunicazionevariazionerequest"> <wsdl:part element="spc:notifica" name="comunicazionevariazionepart" /> <wsdl:porttype name="comunicazionevariazione"> <wsdl:operation name="notifica"> <wsdl:input message="spc:comunicazionevariazionerequest" /> </wsdl:operation> </wsdl:porttype> </wsdl:definitions> WSDL Logico Fruitore Il fruitore, per realizzare questo scenario, non ha bisogno di esporre nessun servizio, quindi non ha un WSDL che lo descrive. WSDL Implementativo Erogatore (implementativoerogatore.wsdl). <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc="http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="logicoerogatore.wsdl "/> <wsdl:binding name="comunicazionevariazionebinding" type="spc:comunicazionevariazione"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="notifica"> <wsdl:input> <soap:body use="literal"/> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:service name="comunicazionevariazioneservice"> <wsdl:port name="comunicazionevariazioneinterfaceendpoint" binding="spc: ComunicazioneVariazioneBinding">

5 / 33 <soap:address location="http://localhost:8080/anagrafe"/> </wsdl:port> </wsdl:service> </wsdl:definitions> WSDL Implementativo Fruitore Come per il WSDL Logico Fruitore, non ci sono servizi da implementare per il fruitore del servizio in questo scenario. WSBL Dal momento che lo scenario prevede solo un operazione di tipo Oneway, non c è bisogno di definire alcun WSBL. 4.2 Configurazione Porta di Dominio e Registro Servizi 4.2.1 Configurazioni comuni a tutti gli esempi del tutorial Le operazioni descritte in questo paragrafo forniscono entità (soggetti, servizi...) utili per tutti i profili di collaborazione che verranno configurati successivamente. 1. Configuriamo il registro dei servizi attraverso l apposita interfaccia web reperibile all indirizzo http://localhost:8080/crtlstat. Identifichiamoci con diritti di amministratore: Login Password amministratore secret Tabella 1: Dati autenticazione Registro Servizi Una volta effettuato il login, nel menù a sinistra sono elencate le operazioni di modifica e visualizzazione della configurazione. 2. Creazione del Soggetto SPCoop Comune avente il ruolo di fruitore negli esempi del tutorial: Aggiungiamo il soggetto che fruirà del servizio ComunicazioneVariazione. Comune Tabella 2: Dati Soggetto SPCoop Fruitore (a) Selezionare aggiungi nel menù Soggetti SPCoop (b) Utilizzare la form per inserire i parametri del soggetto fruitore del servizio

6 / 33 Nota Se non viene indicato il nome della Porta di dominio che ospita il soggetto, viene usato il valore di default: [_Soggetto]SPCoopIT. (c) Premere il pulsante Invia 3. Impostazione del connettore relativo al Soggetto SPCoop Comune. URL http://localhost:8080/openspcoop/pa Tabella 3: Connettore del Soggetto SPCoop fruitore (a) Dalla lista dei soggetti selezionare visualizza relativamente alla riga del soggetto Comune in corrispondenza della colonna Connettore (b) Utilizzare la form per inserire il valore del connettore (c) Premere il pulsante Invia 4. Creazione del Servizio Applicativo Comune_SA utilizzato per l integrazione del client fruitore nei primi tre scenari: Comune_SA Soggetto SPCoop SPC/Comune Invocazione porta / tipo basic Utente Comune_SA Password 123456 Modalità di fault soap Tabella 4: Dati Servizio Applicativo Fruitore (a) Selezionare aggiungi nel menù Servizi Applicativi (b) Utilizzare la form per inserire i parametri del servizio applicativo fruitore (c) Premere il pulsante Invia 5. Creazione del Soggetto SPCoop CentroAnagrafico avente il ruolo di erogatare dei servizi di esempio del tutorial. CentroAnagrafico Tabella 5: Dati del Soggetto SPCoop erogatore

7 / 33 (a) Dalla lista dei soggetti selezionare visualizza relativamente alla riga del soggetto Comune in corrispondenza della colonna Connettore (b) Utilizzare la form per inserire il valore del connettore (c) Premere il pulsante Invia 6. Impostazione del connettore relativo al Soggetto SPCoop CentroAnagrafico. URL http://localhost:8080/openspcoop/pa Tabella 6: Connettore del Soggetto SPCoop erogatore (a) Dalla lista dei soggetti selezionare visualizza relativamente alla riga del soggetto CentroAnagrafico in corrispondenza della colonna Connettore (b) Utilizzare la form per inserire il valore del connettore (c) Premere il pulsante Invia 4.2.2 Configurazione del registro dei servizi di OpenSPCoop Una volta creati i descrittori (WSDL) del servizio, possiamo procedere con la creazione dell accordo di servizio nella Control Station. 1. Creazione dell Accordo di Servizio Referente WSDL Definitorio WSDL Concettuale WSDL Logico Erogatore AS_ComunicazioneVariazione SPC/CentroAnagrafico definitorio.xsd concettuale.wsdl logicoerogatore.wsdl Tabella 7: Dati Accordo di servizio (a) Selezionare aggiungi nel menù Accordi servizio (b) Utilizzare la form per inserire i vari parametri dell Accordo

8 / 33 2. Aggiungiamo il Servizio all Accordo: il nome del servizio dovrà avere lo stesso nome del PortType indicato nel WSDL Concettuale. Profilo ComunicazioneVariazione oneway Tabella 8: Dati Servizio dell Accordo (a) Dalla lista degli Accordi di Servizio, selezionare visualizza nella colonna servizi in corrispondenza dell Accordo creato al punto precedente. (b) Selezionare aggiungi e completare la form per l aggiunta di un nuovo servizio. 3. Specifichiamo le azioni del Servizio: le azioni del Servizio corrispondono alle Operation specificate nel WSDL Notifica Tabella 9: Dati delle azioni del servizio (a) Dalla lista degli Accordi di Servizio, selezionare visualizza nella colonna servizi in corrispondenza dell Accordo creato al punto precedente. (b) Selezionare visualizza nella colonna azioni in corrispondenza del servizio ComunicazioneVariazione

9 / 33 (c) Selezionare aggiungi e completare la form per l aggiunta di una nuova azione. 4. Aggiungere il servizio SPCoop: Soggetto SPCoop Accordo Servizio Servizio WSDL Implementativo Erogatore SPC/CentroAnagrafico AS_ComunicazioneVariazione ComunicazioneVariazione implementazioneerogatore.wsdl Tabella 10: Dati Servizio SPCoop (a) Nella sezione Servizi SPCoop selezionare Aggiungi. (b) Utilizzare la form per inserire i parametri del Servizio SPCoop (c) Premere il pulsante Invia 5. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire del servizio: l installazione standard di OpenSP- Coop attiva di default l autenticazione SPCoop che controlla se il fruitore di un servizio compare nella lista dei fruitori. Per superare questo controllo dobbiamo quindi aggiungere il soggetto Comune ai fruitori del servizio ComunicazioneVariazione (a) Nell elenco dei Servizi SPCoop individuare il servizio ComunicazioneVariazione e selezionare visualizza nella colonna Fruitori: (b) Selezionare Add ed utilizzare la form per inserire i parametri del soggetto fruitore del servizio

10 / 33 (c) Premere il pulsante Invia Nota Si tenga presente che l operazione descritta in questo passaggio comporta la creazione automatica di una porta delegata associata al soggetto fruitore appena aggiunto. La porta delegata viene inizializzata con dei valori di default che vanno bene in molti casi. Se si vogliono modificare tali impostazioni si deve procedere con la modifica della porta delegata individuabile nella lista per ciascun soggetto SPCoop. 6. Aggiungere nelle politiche sicurezza il servizio applicativo autorizzato ad invocare il servizio. Quersto passaggio è essenziale ai fini dell autenticazione da parte del servizio applicativo in fase di invocazione della porta delegata. (a) Dall elenco dei fruitori del servizio, in corrispondenza del soggetto Comune, nella colonna politiche sicurezza selezionare visualizza, quindi il pulsante Aggiungi (b) Compilare il form selezionando il servizio applicativo Comune_SA dalla lista a discesa e confermando con il pulsante Invia (c) Premere il pulsante Invia Nota L operazione descritta in questo passaggio, creerà automaticamente un associazione tra il servizio applicativo e la porta delegata creata automaticamente al passo precedente. 7. Aggiungere la Porta Applicativa: aggiungiamo al soggetto SPC/CentroAnagrafico la porta applicativa che si occuperà dello sbustamento delle richieste e-gov dei fruitori e di consegnarle al servizio applicativo erogato. Validazione Contenuti Stateless Gestione Body Gestione Manifest Servizio SPCoop Azione ComunicazioneVariazione_PA disabilitato default none abilitato ComunicazioneVariazione Notifica Tabella 11: Dati Porta Applicativa (a) Selezionare aggiungi nel menù Porte Applicative (b) Utilizzare la form per inserire i parametri della Porta Applicativa per il soggetto CentroAnagrafico.

11 / 33 (c) Premere il pulsante Invia 8. Aggiungere il Servizio Applicativo Erogatore: Soggetto SPCoop Tipo invocazione Modalità fault ComunicazioneVariazione_SA CentroAnagrafico nessuna soap Tabella 12: Dati Servizio Applicativo (a) Selezionare aggiungi nel menù Servizi Applicativi (b) Utilizzare la form per inserire i parametri del Servizio Applicativo. (c) Premere il pulsante Invia 9. Impostare i parametri di invocazione del Servizio Applicativo: Sbustamento Get message Connettore abilitato Url connettore Tipo credenziali d accesso ComunicazioneVariazione_SA no disabilitato si http://localhost:8080/tutorial/oneway none Tabella 13: Dati invocazione Servizio Applicativo (a) Abilitare l invocazione del servizio ComunicazioneServizio_SA dall elenco dei Servizi Applicativi (b) Utilizzare la form per inserire i parametri del Servizio Applicativo. (c) Premere il pulsante Invia 10. Associare alla Porta Applicativa il Servizio Applicativo Erogatore:

12 / 33 (a) Dall elenco dei Soggetti SPCoop visualizzare le Porta Applicative associati al soggetto SPC/CentroAnagrafico. Selezionare ComunicazioneVariazione_PA e quindi visualizzare l elenco dei Servizi Applicativi (b) Selezionare add. (c) Selezionare il servizio applicativo creato in precedenza. (d) Premere il pulsante Invia 4.3 Programmazione 4.3.1 Fruitore: Servizio Applicativo del Comune 4.3.1.1 Modalità trasparente Cominciamo con la programmazione del fruitore. wsdl2java fornito da CXF. Per completare gli esempi sono stati utilizzati gli stub generati dal tool 1 2 ComunicazioneVariazioneService ss = new ComunicazioneVariazioneService(wsdlURL, SERVICE_NAME); 3 ComunicazioneVariazione port = ss.getcomunicazionevariazioneinterfaceendpoint(); 4 5 /* 6 * Imposto la url della porta di dominio come destinazione 7 * Imposto username e password per l autenticazione 8 */ 9 10 ((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, SOAPUrl); 11 ((BindingProvider)port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, username); 12 ((BindingProvider)port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, password); 13 14 org.openspcoop.example.comunicazionevariazione_type _notifica_comunicazionevariazionepart = new ComunicazioneVariazione_Type(); 15 _notifica_comunicazionevariazionepart.setcf("bbbccc11f11f111f"); 16... 17... 18 port.notifica(_notifica_comunicazionevariazionepart); 4.3.1.2 Modalità via Integration Manager Un altro modo per inviare i messaggi alla Porta di Dominio è quello di utilizzare il servizio di Integration Manager. Generiamo gli stub partendo dal wsdl del servizio: wsdl2java -all http://localhost:8080/openspcoop/integrationmanager?wsdl ottenuti gli stub possiamo inviare il messaggio di richiesta: QName SERVICE_NAME = new QName("http://services.pdd.openspcoop.org", " IntegrationManagerService"); try{ URL wsdlurl = new URL(...); } catch (MalformedURLException e) {

13 / 33 } e.printstacktrace(); try{ String file = "request.xml"; String PD = "ComunicazioneVariazione_PD"; /* * Creo il port per l IntegrationManager */ IntegrationManagerService ss = new IntegrationManagerService(wsdlURL, SERVICE_NAME); IntegrationManager port = ss.getintegrationmanager(); /* * Invoco il servizio invocaportadelegata */ java.lang.string _invocaportadelegata_portadelegata = PD; SPCoopMessage _invocaportadelegata_msg = new SPCoopMessage(); File xmlmessage = new File(file); byte[] msg = new byte[(int)xmlmessage.length()]; FileInputStream strm = new FileInputStream(xmlMessage); strm.read(msg); _invocaportadelegata_msg.setmessage(msg); System.out.println("Invocazione Comunicazione Variazione via Integration Manager..."); System.out.println("Request Message:"); System.out.println(new String(_invocaPortaDelegata_msg.getMessage())); try { SPCoopMessage _invocaportadelegata return = port.invocaportadelegata( _invocaportadelegata_portadelegata, _invocaportadelegata_msg); System.out.println("\n Response Message:"); System.out.println(new String(_invocaPortaDelegata return.getmessage())) ; } catch (SPCoopException_Exception e) { System.out.println("Expected exception: SPCoopException has occurred."); System.out.println(e.toString()); return; } } catch(exception e){ System.out.println("Errore::::" + e); return; } 4.3.2 Erogatore: Servizio Applicativo del CentroAnagrafico Il Servizio Applicativo del Centro Anagrafico deve ricevere il messaggio SOAP senza mandare una risposta. un implementazione con gli skeleton generati dal tool wsdl2java di CXF package org.openspcoop.example; Vediamone @javax.jws.webservice(

14 / 33 servicename = "ComunicazioneVariazioneService", portname = "ComunicazioneVariazioneInterfaceEndpoint", targetnamespace = "http://www.openspcoop.org/example", wsdllocation = "file:comunicazionevariazione.wsdl", endpointinterface = "org.openspcoop.example.comunicazionevariazione") public class ComunicazioneVariazioneImpl implements ComunicazioneVariazione { public void notifica(comunicazionevariazione_type comunicazionevariazionepart) { try { System.out.println("========== Ricevuta Comunicazione Variazione ==============") ; System.out.println("== Codice fiscale da modificare: " + comunicazionevariazionepart. getcf()); System.out.println(); System.out.println("== Nuovo nome: " + comunicazionevariazionepart.get()); System.out.println("== Nuovo cognome: " + comunicazionevariazionepart.getcognome()); System.out.println("== Nuovo codice fiscale: " + comunicazionevariazionepart. getcodicefiscale()); System.out.println("== Nuova data di nascita: " + comunicazionevariazionepart. getnascita()); System.out.println("== Nuovo stato civile: " + comunicazionevariazionepart. getstatocivile()); } catch (Exception ex) { ex.printstacktrace(); throw new RuntimeException(ex); } } } 4.4 Test e verifica Seguendo le istruzioni fornite con i sorgenti per la configurazione, compilazione ed esecuzione degli esempi, avviamo il test per il servizio ComunicazioneVariazione Il Client invierà il messaggio di richiesta alla Porta Delegata: (Messaggio 1 e 4 in figura) POST /tutorial/ HTTP/1.1 Content-Type: text/xml; charset=utf-8 SOAPAction: tutorial Content-Length: 504 Cache-Control: no-cache Pragma: no-cache User-Agent: Java/1.5.0_11 Host: 127.0.0.1:8888 Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 Connection: keep-alive <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <soapenv:body> <Notifica xmlns="http://www.openspcoop.org/example">

15 / 33 <comunicazionevariazione CF="BBBCCC11F11F111F"> <nome>mario</nome> <cognome>rossi</cognome> <codicefiscale>dddfff22g22g222g</codicefiscale> <nascita>1980-01-01t12:00:00.000z</nascita> <statocivile>celibe</statocivile> </comunicazionevariazione> </Notifica> </soapenv:body> </soapenv:envelope> La Porta di Dominio recupera le informazioni necessarie alla gestione della richiesta, riconosce che il tipo di comunicazione è Oneway e si occupa quindi di generare sia la risposta di OK da inviare al client di Comune, sia di imbustare la richiesta da inviare alla Porta di Dominio di destinazione. La risposta inviata al client è questa (Messaggio 2 in figura): HTTP/1.1 200 OK Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; JBoss-4.0.5.GA_CP04 (build: CVSTag=https://svn.jboss.org/repos/ jbossas/tags/jboss_4_0_5_ga_cp04 date=200709031023)/tomcat-5.5 SPCoopTipoMittente: SPC SPCoopID: Comune_ComuneSPCoopIT_0000019_2008-07-31_10:56 SPCoopServizio: ComunicazioneVariazione SPCoopDestinatario: CentroAnagrafico SPCoopTipoDestinatario: SPC SPCoopAzione: Notifica SPCoopTipoServizio: SPC SPCoopMittente: Comune Content-Length: 0 Date: Thu, 31 Jul 2008 08:56:56 GMT La Porta di Dominio invia quindi la richiesta alla Porta di Dominio destinataria, nel nostro caso a se stessa, arricchita dell header e-gov (Messaggio 3 in figura): <soapenv:envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"> <soapenv:header> <egov_it:intestazione SOAP_ENV:actor="http://www.cnipa.it/eGov_it/portadominio" SOAP_ENV:mustUnderstand="1" xmlns:soap_env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:egov_it="http://www.cnipa.it/schemas/2003/egovit/busta1_0 /"> <egov_it:intestazionemessaggio> <egov_it:mittente> <egov_it:identificativoparte tipo="spc">comune</egov_it:identificativoparte> </egov_it:mittente> <egov_it:destinatario> <egov_it:identificativoparte tipo="spc">centroanagrafico</egov_it: IdentificativoParte> </egov_it:destinatario> <egov_it:profilocollaborazione>egov_it_messaggiosingolooneway</egov_it: ProfiloCollaborazione> <egov_it:servizio tipo="spc">comunicazionevariazione</egov_it:servizio> <egov_it:azione>notifica</egov_it:azione> <egov_it:messaggio> <egov_it:identificatore>comune_comunespcoopit_0000001_2008-07-31_12:07</egov_it: Identificatore> <egov_it:oraregistrazione tempo="egov_it_spc">2008-07-31t12:07:05.897</egov_it: OraRegistrazione> </egov_it:messaggio> <egov_it:profilotrasmissione confermaricezione="false" inoltro=" EGOV_IT_ALPIUUNAVOLTA"/>

16 / 33 </egov_it:intestazionemessaggio> <egov_it:listatrasmissioni> <egov_it:trasmissione> <egov_it:origine> <egov_it:identificativoparte tipo="spc">comune</egov_it:identificativoparte> </egov_it:origine> <egov_it:destinazione> <egov_it:identificativoparte tipo="spc">centroanagrafico</egov_it: IdentificativoParte> </egov_it:destinazione> <egov_it:oraregistrazione tempo="egov_it_spc">2008-07-31t12:07:05.897</egov_it: OraRegistrazione> </egov_it:trasmissione> </egov_it:listatrasmissioni> </egov_it:intestazione> </soapenv:header> <soapenv:body> <comunicazionevariazione CF="BBBCCC11F11F111F" xmlns="http://www.openspcoop.org/example "> <nome>mario</nome> <cognome>rossi</cognome> <codicefiscale>dddfff22g22g222g</codicefiscale> <nascita>1980-01-01t12:00:00.000z</nascita> <statocivile>celibe</statocivile> </comunicazionevariazione> </soapenv:body> </soapenv:envelope> Controllando il file openspcoop.log possiamo verificare il corretto funzionamento della porta: ComuneSPCoopIT.RicezioneContenutiApplicativiWS <2008-07-31T11:18:49.369> (infoopenspcoop) ID:Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18 PD:ComunicazioneVariazione_PD SA: Anonimo FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ComunicazioneVariazione_Notifica Ricevuta richiesta di servizio dal Servizio Applicativo Anonimo verso la porta delegata ComunicazioneVariazione_PD ComuneSPCoopIT.InoltroBusteEGov <2008-07-31T11:18:49.476> (infospcoop) ID: Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18 PD:ComunicazioneVariazione_PD SA:Anonimo FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ComunicazioneVariazione_Notifica Invio Messaggio SPCoop con identificativo [Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18] in corso (location: http://localhost:8080/openspcoop/pa)... CentroAnagraficoSPCoopIT.RicezioneBusteEGovWS <2008-07-31T11:18:49.559> (infospcoop) ID: Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18 FR:SPC/Comune -> S:SPC/ CentroAnagrafico_SPC/ComunicazioneVariazione_Notifica Ricevuto messaggio SPCoop con identificativo [Comune_ComuneSPCoopIT_0000022_2008-07-31_11 :18] inviata dalla parte mittente [SPC/Comune]. CentroAnagraficoSPCoopIT.Sbustamento <2008-07-31T11:18:49.605> (infoopenspcoop) ID: Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18 FR:SPC/Comune -> S:SPC/ CentroAnagrafico_SPC/ComunicazioneVariazione_Notifica Ricevuta Busta EGov [Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18], con l attributo ALPIUUNAVOLTA nel profilo di trasmissione: Busta salvata nell History delle buste ricevute. CentroAnagraficoSPCoopIT.ConsegnaContenutiApplicativi <2008-07-31T11:18:49.624> (infospcoop ) ID:Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18 SA:ComunicazioneVariazione_SA FR:SPC /Comune -> S:SPC/CentroAnagrafico_SPC/ComunicazioneVariazione_Notifica

17 / 33 Invio Messaggio SPCoop con identificativo [Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18] in corso (location: http://localhost:8080/tutorial)... CentroAnagraficoSPCoopIT.ConsegnaContenutiApplicativi <2008-07-31T11:18:49.635> (infospcoop ) ID:Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18 SA:ComunicazioneVariazione_SA FR:SPC /Comune -> S:SPC/CentroAnagrafico_SPC/ComunicazioneVariazione_Notifica Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18], generato dal mittente [SPC/Comune], consegnato al servizio applicativo [ComunicazioneVariazione_SA] mediante connettore [http] (location: http://localhost:8080/tutorial) con codiceconsegna: 200 ComuneSPCoopIT.InoltroBusteEGov <2008-07-31T11:18:49.703> (infospcoop) ID: Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18 PD:ComunicazioneVariazione_PD SA:Anonimo FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ComunicazioneVariazione_Notifica Messaggio SPCoop con identificativo [Comune_ComuneSPCoopIT_0000022_2008-07-31_11:18] inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( location: http://localhost:8080/openspcoop/pa) con codiceconsegna: 202 5 Stato Famiglia (sincrono) 5.1 Descrizione formale dell Accordo di Servizio: WSDL e WSBL Come per il servizio ComunicazioneVariazione, creiamo un accordo di servizio fornendo i wsdl e wsbl che descrivono il servizio applicativo in questione. I wsdl in questione sono forniti insieme ai sorgenti degli esempi: WSDL Definitorio (definitorio.xsd) <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:so="http://www.openspcoop.org/example" xmlns:xs="http://www.w3.org/2001/ XMLSchema" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www. openspcoop.org/example"> <xs:simpletype name="codicefiscaletype"> <xs:restriction base="xs:string"> <xs:pattern value="[a-za-z]{6}\d\d[a-za-z]\d\d[a-za-z]\d\d\d[a-za-z]"/> </xs:restriction> </xs:simpletype> <xs:complextype name="personatype"> <xs:sequence> <xs:element name="nome" type="xs:string"/> <xs:element name="cognome" type="xs:string"/> <xs:element name="codicefiscale" type="so:codicefiscaletype"/> <xs:element name="nascita" type="xs:date"/> <xs:element name="statocivile" type="xs:string"/> </xs:sequence> </xs:complextype> <xs:element name="richiestastatofamiglia" type="so:codicefiscaletype"/> <xs:element name="statofamiglia" type="so:personatype"/> </xs:schema> WSDL Concettuale (concettuale.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

18 / 33 <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="statofamigliaresponse"> <wsdl:part name="statofamigliaresponsepart" element="spc:statofamiglia"> <wsdl:message name="statofamigliarequest"> <wsdl:part name="statofamigliarequestpart" element="spc:richiestastatofamiglia"> <wsdl:porttype name="richiestastatofamiglia"> <wsdl:operation name="acquisisci"> <wsdl:input message="spc:statofamigliarequest"> </wsdl:input> <wsdl:output message="spc:statofamigliaresponse"> </wsdl:output> </wsdl:operation> </wsdl:porttype> </wsdl:definitions> WSDL Logico Erogatore (logicoerogatore.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="statofamigliaresponse"> <wsdl:part name="statofamigliaresponsepart" element="spc:statofamiglia"> <wsdl:message name="statofamigliarequest"> <wsdl:part name="statofamigliarequestpart" element="spc:richiestastatofamiglia"> <wsdl:porttype name="richiestastatofamiglia"> <wsdl:operation name="acquisisci"> <wsdl:input message="spc:statofamigliarequest"> </wsdl:input> <wsdl:output message="spc:statofamigliaresponse"> </wsdl:output> </wsdl:operation> </wsdl:porttype> </wsdl:definitions> WSDL Logico Fruitore Il fruitore, per realizzare questo scenario, non ha bisogno di esporre nessun servizio, quindi non ha un WSDL che lo descrive. WSDL Implementativo Erogatore (implementativoerogatore.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="logicoerogatore.wsdl "> </wsdl:import> <wsdl:binding name="richiestastatofamigliabinding" type="spc:richiestastatofamiglia"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="acquisisci"> <wsdl:input>

19 / 33 <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="richiestastatofamigliaservice"> <wsdl:port name="richiestastatofamigliainterfaceendpoint" binding="spc: RichiestaStatoFamigliaBinding"> <soap:address location="http://localhost:8080/anagrafe"/> </wsdl:port> </wsdl:service> </wsdl:definitions> WSDL Implementativo Fruitore Come per il WSDL Logico Fruitore, non ci sono servizi da implementare per il fruitore del servizio in questo scenario. 5.2 Configurazione Porta di Dominio e Registro Servizi Eseguiamo la configurazione sulla Control Station sulla falsariga di quanto fatto per lo scenario oneway visto in precedenza. Una volta creati i descrittori WSDL del servizio, possiamo procedere con la creazione dell accordo di servizio. 1. Creazione dell Accordo di Servizio con i dati riportati in Tabella 14. Referente WSDL Definitorio WSDL Concettuale WSDL Logico Erogatore AS_RichiestaStatoFamiglia SPC/CentroAnagrafico definitorio.xsd concettuale.wsdl logicoerogatore.wsdl Tabella 14: Dati Accordo di servizio 2. Aggiungiamo il Servizio all Accordo: il nome del servizio dovrà avere lo stesso nome del PortType indicato nel WSDL Concettuale. Profilo RichiestaStatoFamiglia sincrono Tabella 15: Dati Servizio dell Accordo 3. Specifichiamo le azioni del Servizio: le azioni del Servizio corrispondono alle Operation specificate nel WSDL Acquisisci Tabella 16: Dati delle azioni del servizio 4. Aggiungere il servizio SPCoop con i dati riportati in Tabella 17. 5. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire del servizio: avendo attiva di default l autenticazione SPCoop dobbiamo aggiungere il soggetto Comune ai fruitori del servizio RichiestaStatoFamiglia

20 / 33 Soggetto SPCoop Accordo Servizio Servizio WSDL Implementativo Erogatore SPC/CentroAnagrafico AS_RichiestaStatoFamiglia RichiestaStatoFamiglia implementazioneerogatore.wsdl Tabella 17: Dati Servizio SPCoop 6. Aggiungere nelle politiche sicurezza il servizio applicativo autorizzato ad invocare il servizio. Questo passaggio è essenziale ai fini dell autenticazione da parte del servizio applicativo in fase di invocazione della porta delegata. (a) Dall elenco dei fruitori del servizio, in corrispondenza del soggetto Comune, nella colonna politiche sicurezza selezionare visualizza, quindi il pulsante Aggiungi (b) Compilare il form selezionando il servizio applicativo Comune_SA dalla lista a discesa e confermando con il pulsante Invia (c) Premere il pulsante Invia Nota L operazione descritta in questo passaggio, creerà automaticamente un associazione tra il servizio applicativo e la porta delegata creata automaticamente al passo precedente. 7. Aggiungere la Porta Applicativa: aggiungiamo al soggetto SPC/CentroAnagrafico la porta applicativa che si occuperà dello sbustamento delle richieste e-gov dei fruitori e di consegnarle al servizio applicativo erogato. Validazione Contenuti Stateless Gestione Body Gestione Manifest Servizio SPCoop Azione RichiestaStatoFamiglia_PA disabilitato default none abilitato RichiestaStatoFamiglia Acquisisci Tabella 18: Dati Porta Applicativa 8. Aggiungere il Servizio Applicativo Erogatore: Soggetto SPCoop Tipo invocazione Modalità fault RichiestaStatoFamiglia_SA CentroAnagrafico nessuna soap Tabella 19: Dati Servizio Applicativo 9. Impostare i parametri di invocazione del Servizio Applicativo con i valori riportati in Tabella 20: 10. Associare alla Porta Applicativa il Servizio Applicativo

21 / 33 Sbustamento Get message Connettore abilitato Url connettore Tipo credenziali d accesso RichiestaStatoFamiglia_SA no disabilitato si http://localhost:8080/tutorial/sincrono none Tabella 20: Dati invocazione Servizio Applicativo 5.3 Programmazione La programmazione di un servizio ed un client sincrono è molto simile a quella di un Oneway, tranne per il fatto che il servizio in questo caso restituisce un messaggio SOAP in risposta ad una richiesta. Nella programmazione dei servizi a livello di operazioni, questo si traduce in un operazione con un oggetto di ritorno invece di void. public interface RichiestaStatoFamiglia { } @WebResult(name = "statofamiglia", targetnamespace = "http://www.openspcoop.org/example ", partname = "statofamigliaresponsepart") @WebMethod(operationName = "Acquisisci") public PersonaType acquisisci( @WebParam(partName = "statofamigliarequestpart", name = "richiestastatofamiglia", targetnamespace = "http://www.openspcoop.org/example") java.lang.string statofamigliarequestpart ); 5.4 Test e verifica Seguendo le istruzioni fornite con i sorgenti per la configurazione, compilazione ed esecuzione degli esempi, avviamo il test per il servizio RichiestaStatoFamiglia. 6 Stampa Documento (AsincronoAsimmetrico) 6.1 Descrizione formale dell Accordo di Servizio: WSDL e WSBL Creiamo un accordo di servizio fornendo i wsdl che descrivono il servizio applicativo in questione. I wsdl in questione sono forniti insieme ai sorgenti degli esempi: WSDL Definitorio (definitorio.xsd) <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:so="http://www.openspcoop.org/example" xmlns:xs="http://www.w3.org/2001/ XMLSchema" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www. openspcoop.org/example"> <xs:simpletype name="codicefiscaletype"> <xs:restriction base="xs:string"> <xs:pattern value="[a-za-z]{6}\d\d[a-za-z]\d\d[a-za-z]\d\d\d[a-za-z]"/> </xs:restriction> </xs:simpletype> <xs:complextype name="richiestadocumento"> <xs:sequence> <xs:element name="codicedocumento" type="xs:string"/> </xs:sequence>

22 / 33 </xs:complextype> <xs:element name="stampadocumento"> <xs:complextype> <xs:complexcontent> <xs:extension base="so:richiestadocumento"> <xs:attribute name="cf" type="so:codicefiscaletype" use="required"/> </xs:extension> </xs:complexcontent> </xs:complextype> </xs:element> <xs:element name="presaconsegnastampa"> <xs:complextype> <xs:sequence> <xs:element name="idstampa" type="xs:long"/> <xs:element name="stimacompletamento" type="xs:date"/> </xs:sequence> </xs:complextype> </xs:element> <xs:element name="statodocumento" type="xs:long"/> <xs:element name="esito" type="xs:string"/> </xs:schema> WSDL Concettuale (concettuale.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="stampadocumentoresponse"> <wsdl:part name="stampadocumentoresponsepart" element="spc:presaconsegnastampa"> <wsdl:message name="statodocumentorequest"> <wsdl:part name="statodocumentorequestpart" element="spc:statodocumento"> <wsdl:message name="stampadocumentorequest"> <wsdl:part name="stampadocumentorequestpart" element="spc:stampadocumento"> <wsdl:message name="statodocumentoresponse"> <wsdl:part name="statodocumentoresponsepart" element="spc:esito"> <wsdl:porttype name="stampadocumento"> <wsdl:operation name="stampa"> <wsdl:input message="spc:stampadocumentorequest"> </wsdl:input> <wsdl:output message="spc:stampadocumentoresponse"> </wsdl:output> </wsdl:operation> <wsdl:operation name="stato"> <wsdl:input message="spc:statodocumentorequest"> </wsdl:input> <wsdl:output message="spc:statodocumentoresponse"> </wsdl:output> </wsdl:operation> </wsdl:porttype>

23 / 33 </wsdl:definitions> WSDL Logico Erogatore (logicoerogatore.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="stampadocumentoresponse"> <wsdl:part name="stampadocumentoresponsepart" element="spc:presaconsegnastampa"> <wsdl:message name="statodocumentorequest"> <wsdl:part name="statodocumentorequestpart" element="spc:statodocumento"> <wsdl:message name="stampadocumentorequest"> <wsdl:part name="stampadocumentorequestpart" element="spc:stampadocumento"> <wsdl:message name="statodocumentoresponse"> <wsdl:part name="statodocumentoresponsepart" element="spc:esito"> <wsdl:porttype name="stampadocumento"> <wsdl:operation name="stampa"> <wsdl:input message="spc:stampadocumentorequest"> </wsdl:input> <wsdl:output message="spc:stampadocumentoresponse"> </wsdl:output> </wsdl:operation> <wsdl:operation name="stato"> <wsdl:input message="spc:statodocumentorequest"> </wsdl:input> <wsdl:output message="spc:statodocumentoresponse"> </wsdl:output> </wsdl:operation> </wsdl:porttype> </wsdl:definitions> WSDL Logico Fruitore Il fruitore, per realizzare questo scenario, non ha bisogno di esporre nessun servizio, quindi non ha un WSDL che lo descrive. WSDL Implementativo Erogatore (implementativoerogatore.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="logicoerogatore.wsdl "> </wsdl:import> <wsdl:binding name="stampadocumentobinding" type="spc:stampadocumento"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="stampa"> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/>

24 / 33 </wsdl:output> </wsdl:operation> <wsdl:operation name="stato"> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="stampadocumentoservice"> <wsdl:port name="stampadocumentointerfaceendpoint" binding="spc:stampadocumentobinding "> <soap:address location="http://localhost:8080/anagrafe"/> </wsdl:port> </wsdl:service> </wsdl:definitions> WSDL Implementativo Fruitore Come per il WSDL Logico Fruitore, non ci sono servizi da implementare per il fruitore del servizio in questo scenario. 6.2 Configurazione Porta di Dominio e Registro Servizi Una volta creati i descrittori del servizio, possiamo procedere con la creazione dell accordo di servizio. 1. Creazione dell Accordo di Servizio Referente WSDL Definitorio WSDL Concettuale WSDL Logico Erogatore AS_StampaDocumento SPC/CentroAnagrafico definitorio.xsd concettuale.wsdl logicoerogatore.wsdl Tabella 21: Dati Accordo di servizio 2. Aggiungiamo il Servizio all Accordo: il nome del servizio dovrà avere lo stesso nome del PortType indicato nel WSDL Concettuale. Profilo StampaDocumento asincronoasimmetrico Tabella 22: Dati Servizio dell Accordo 3. Specifichiamo le azioni del Servizio: le azioni del Servizio corrispondono alle Operation specificate nel WSDL Stampa Stato Tabella 23: Dati delle azioni del servizio

25 / 33 A differenza dei profili di collaborazione esaminati in precedenza, nel caso dell asincronoasimmetrico abbiamo due azioni per lo stesso servizio, uno per consegnare la richiesta ed uno per richiedere la risposta. Dobbiamo quindi informare la Porta di Dominio che le due operazioni sono correlate al momento della creazione della seconda azione: 4. Aggiungere il servizio SPCoop: Soggetto SPCoop Accordo Servizio Servizio WSDL Implementativo Erogatore SPC/CentroAnagrafico AS_StampaDocumento StampaDocumento implementazioneerogatore.wsdl Tabella 24: Dati Servizio SPCoop 5. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire del servizio: avendo attiva di default l autenticazione SPCoop dobbiamo aggiungere il soggetto Comune ai fruitori del servizio StampaDocumento 6. Aggiungere nelle politiche sicurezza il servizio applicativo autorizzato ad invocare il servizio. Questo passaggio è essenziale ai fini dell autenticazione da parte del servizio applicativo in fase di invocazione della porta delegata. (a) Dall elenco dei fruitori del servizio, in corrispondenza del soggetto Comune, nella colonna politiche sicurezza selezionare visualizza, quindi il pulsante Aggiungi (b) Compilare il form selezionando il servizio applicativo Comune_SA dalla lista a discesa e confermando con il pulsante Invia (c) Premere il pulsante Invia Nota L operazione descritta in questo passaggio, creerà automaticamente un associazione tra il servizio applicativo e la porta delegata creata automaticamente al passo precedente. 7. Aggiungere la Porta Applicativa: aggiungiamo al soggetto SPC/CentroAnagrafico la porta applicativa che si occuperà dello sbustamento delle richieste e-gov dei fruitori e di consegnarle al servizio applicativo erogato. Validazione Contenuti Stateless Gestione Body Gestione Manifest Servizio SPCoop Azione StampaDocumento_PA disabilitato default none abilitato StampaDocumento Stampa Tabella 25: Dati Porta Applicativa 8. Aggiungere il Servizio Applicativo con i dati riportati in Tabella 26:

26 / 33 Soggetto SPCoop Tipo invocazione Modalità fault StampaDocumento_SA CentroAnagrafico nessuna soap Tabella 26: Dati Servizio Applicativo Sbustamento Get message Connettore abilitato Url connettore Tipo credenziali d accesso StampaDocumento_SA no disabilitato si http://localhost:8080/tutorial/asincronoasimmetrico none Tabella 27: Dati invocazione Servizio Applicativo 9. Impostare i parametri di invocazione del Servizio Applicativo con i valori riportati in Tabella 27. 10. Associare alla Porta Applicativa il Servizio Applicativo. 6.3 Programmazione La fruizione di un servizio asincronoasimmetrico è dal punto di vista logico equivalente ad due richieste sincrone consecutive. Le due richieste, oltre al payload, differiscono per la url invocata che rispecchia la diversa operazione richiesta. Per la richiesta, l operazione da invocare è Stampa, mentre per la risposta Stato. Per correlare i due messaggi, dobbiamo includere nell header HTTP della risposta, l id SPCoop ritornato dalla richiesta. In CXF un modo per reperire l id SPCoop dall header SPCoopID della richiesta è quello di aggiungere un Interceptor nella catena di input: Client client = org.apache.cxf.frontend.clientproxy.getclient(port); client.getininterceptors().add((new StampaDocumento_StampaDocumentoInterfaceEndpoint_Client ()).new SPCoopIdInInterceptor()); dove la classe SPCoopIdInInterceptor è così definita: public class SPCoopIdInInterceptor extends AbstractPhaseInterceptor<Message> { public SPCoopIdInInterceptor() { super(phase.receive); } public void handlemessage(message message) { Map<String, List<String>> headers = CastUtils.cast((Map)message.get(Message. PROTOCOL_HEADERS)); riferimento = headers.get("spcoopid").get(0); } } public void handlefault(message messageparam) { } a questo punto non resta che aggiungere questo parametro nella successiva risposta con nome SPCoopRiferimentoMessaggio inserendolo ad esempio nella url di invocazione.

27 / 33 6.4 Test e verifica Seguendo le istruzioni fornite con i sorgenti per la configurazione, compilazione ed esecuzione degli esempi, avviamo il test per il servizio StampaDocumento. Vedremo, lato client, che verrà effettuata una richiesta e successivamente una serie di interrogazioni finchè non viene pervenuta una risposta di successo. 7 Identifica Soggetto (AsincronoSimmetrico) 7.1 Descrizione formale dell Accordo di Servizio: WSDL e WSBL Creiamo un accordo di servizio fornendo i wsdl che descrivono il servizio applicativo in questione. I wsdl in questione sono forniti insieme ai sorgenti degli esempi: WSDL Definitorio (definitorio.xsd) <?xml version="1.0" encoding="utf-8"?> <xs:schema xmlns:so="http://www.openspcoop.org/example" xmlns:xs="http://www.w3.org/2001/ XMLSchema" xmlns:xsd="http://www.w3.org/2001/xmlschema" targetnamespace="http://www. openspcoop.org/example"> <xs:element name="identifica"> <xs:complextype> <xs:sequence maxoccurs="1"> <xs:element name="tipodocumento" type="xs:string"/> <xs:element name="codicedocumento" type="xs:string"/> </xs:sequence> </xs:complextype> </xs:element> <xs:element name="presaconsegnaidentifica" type="xs:string"/> <xs:simpletype name="codicefiscaletype"> <xs:restriction base="xs:string"> <xs:pattern value="[a-za-z]{6}\d\d[a-za-z]\d\d[a-za-z]\d\d\d[a-za-z]"/> </xs:restriction> </xs:simpletype> <xs:complextype name="personatype"> <xs:sequence> <xs:element name="nome" type="xs:string"/> <xs:element name="cognome" type="xs:string"/> <xs:element name="codicefiscale" type="so:codicefiscaletype"/> <xs:element name="nascita" type="xs:date"/> <xs:element name="statocivile" type="xs:string"/> </xs:sequence> </xs:complextype> <xs:element name="risultato" type="so:personatype"/> <xs:element name="risultatoresponse" type="xs:string"/> </xs:schema> WSDL Concettuale (concettuale.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">

28 / 33 <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="risultatoidentificarequest"> <wsdl:part name="identificarequestpart" element="spc:risultato"> <wsdl:message name="risultatoidentificaresponse"> <wsdl:part name="risultatoidentificaresponse" element="spc:risultatoresponse"> <wsdl:porttype name="esitoidentificazione"> <wsdl:operation name="risultato"> <wsdl:input message="spc:risultatoidentificarequest"> </wsdl:input> <wsdl:output message="spc:risultatoidentificaresponse"> </wsdl:output> </wsdl:operation> </wsdl:porttype> <wsdl:message name="identificaresponse"> <wsdl:part name="identificaresponsepart" element="spc:presaconsegnaidentifica"> <wsdl:message name="identificarequest"> <wsdl:part name="identificarequestpart" element="spc:identifica"> <wsdl:porttype name="identificasoggetto"> <wsdl:operation name="cerca"> <wsdl:input message="spc:identificarequest"> </wsdl:input> <wsdl:output message="spc:identificaresponse"> </wsdl:output> </wsdl:operation> </wsdl:porttype> </wsdl:definitions> WSDL Logico Erogatore (logicoerogatore.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="identificaresponse"> <wsdl:part name="identificaresponsepart" element="spc:presaconsegnaidentifica"> <wsdl:message name="identificarequest"> <wsdl:part name="identificarequestpart" element="spc:identifica"> <wsdl:porttype name="identificasoggetto"> <wsdl:operation name="cerca"> <wsdl:input message="spc:identificarequest"> </wsdl:input> <wsdl:output message="spc:identificaresponse"> </wsdl:output> </wsdl:operation> </wsdl:porttype> </wsdl:definitions>

29 / 33 WSDL Logico Fruitore (implementativofruitore.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="risultatoidentificarequest"> <wsdl:part name="identificarequestpart" element="spc:risultato"> <wsdl:message name="risultatoidentificaresponse"> <wsdl:part name="risultatoidentificaresponse" element="spc:risultatoresponse"> <wsdl:porttype name="esitoidentificazione"> <wsdl:operation name="risultato"> <wsdl:input message="spc:risultatoidentificarequest"> </wsdl:input> <wsdl:output message="spc:risultatoidentificaresponse"> </wsdl:output> </wsdl:operation> </wsdl:porttype> </wsdl:definitions> WSDL Implementativo Erogatore (implementativoerogatore.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="logicoerogatore.wsdl "> </wsdl:import> <wsdl:binding name="identificasoggettobinding" type="spc:identificasoggetto"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="cerca"> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="identificasoggettoservice"> <wsdl:port name="identificasoggettointerfaceendpoint" binding="spc: IdentificaSoggettoBinding"> <soap:address location="http://localhost:8080/anagrafe"/> </wsdl:port> </wsdl:service> </wsdl:definitions> WSDL Implementativo Fruitore (implementativofruitore.wsdl). <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions targetnamespace="http://www.openspcoop.org/example" xmlns:xsd="http://www.w3.org/2001/xmlschema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc=" http://www.openspcoop.org/example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://www.openspcoop.org/example" location="logicoerogatore.wsdl ">

30 / 33 </wsdl:import> <wsdl:binding name="esitoidentificazionebinding" type="spc:esitoidentificazione"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="risultato"> <wsdl:input> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="esitoidentificazioneservice"> <wsdl:port name="esitoidentificazioneinterfaceendpoint" binding="spc: EsitoIdentificazioneBinding"> <soap:address location="http://localhost:9090/anagrafe"/> </wsdl:port> </wsdl:service> </wsdl:definitions> 7.2 Configurazione Porta di Dominio e Registro Servizi Una volta creati i descrittori del servizio, possiamo procedere con la creazione dell accordo di servizio. 1. Creazione dell Accordo di Servizio Referente WSDL Definitorio WSDL Concettuale WSDL Logico Fruitore WSDL Logico Erogatore AS_IdentificaSoggetto SPC/CentroAnagrafico definitorio.xsd concettuale.wsdl logicofruitore.wsdl logicoerogatore.wsdl Tabella 28: Dati Accordo di servizio 2. Aggiungiamo i due servizi all accordo di Servizio: i nomi dei servizio dovranno avere lo stesso nome del PortType indicato nel WSDL Concettuale. Per ciascun servizio aggiungiamo le azioni ad essi associate, corrispondenti alle Operation specificate nel WSDL. Facciamo riferimento ai valori riportati in Tabella 29 e Tabella 30 Azione Profilo IdentificaSoggetto Cerca asincronosimmetrico Tabella 29: Dati Servizio Asincrono Simmetrico nell accordo di servizio Azione Profilo EsitoIdentificazione Esito asincronosimmetrico Tabella 30: Dati Servizio Asincrono Simmetrico Correlato nell accordo di servizio

31 / 33 3. Aggiungere il servizio SPCoop e il suo correlato erogato dal soggetto fruitore con i dati riportati in Tabella 31 e in Tabella 32: Soggetto SPCoop Accordo Servizio Servizio WSDL Implementativo Erogatore SPC/CentroAnagrafico AS_IdentificaSoggetto IdentificaSoggetto implementazioneerogatore.wsdl Tabella 31: Dati Servizio SPCoop Soggetto SPCoop Accordo Servizio Servizio Correlato WSDL Implementativo Fruitore SPC/Comune AS_EsitoIdentificazione EsitoIdentificazione Si implementazionefruitore.wsdl Tabella 32: Dati Servizio SPCoop correlato 4. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire del servizio: avendo attiva di default l autenticazione SPCoop dobbiamo aggiungere il soggetto Comune ai fruitori del servizio IdentificaSoggetto e il soggetto CentroAnagrafico ai fruitori del servizio EsitoIdentificazione 5. Aggiungere nelle politiche sicurezza i servizi applicativi appena autorizzati. Questo passaggio è essenziale ai fini dell autenticazione da parte del servizio applicativo in fase di invocazione della porta delegata. (a) Dall elenco dei fruitori del servizio, in corrispondenza del soggetto Comune, nella colonna politiche sicurezza selezionare visualizza, quindi il pulsante Aggiungi (b) Compilare il form selezionando il servizio applicativo Comune_SA dalla lista a discesa e confermando con il pulsante Invia (c) Premere il pulsante Invia Nota L operazione descritta in questo passaggio, creerà automaticamente un associazione tra il servizio applicativo e la porta delegata creata automaticamente al passo precedente. 6. Aggiungere la Porta Applicativa: aggiungiamo al soggetto SPC/CentroAnagrafico la porta applicativa che si occuperà dello sbustamento delle richieste e-gov dei fruitori e di consegnarle al servizio applicativo erogato. Validazione Contenuti Stateless Gestione Body Gestione Manifest Servizio SPCoop Azione IdentificaSoggetto_PA disabilitato default none abilitato IdentificaSoggetto Cerca Tabella 33: Dati Porta Applicativa 7. Aggiungere i Servizi Applicativi erogatore e fruitore con i valori riportati in Tabella 34 e Tabella 35.

32 / 33 Soggetto SPCoop Tipo invocazione Modalità fault IdentificaSoggetto_SA CentroAnagrafico nessuna soap Tabella 34: Dati Servizio Applicativo Erogatore Soggetto SPCoop Tipo invocazione Modalità fault IdentificaSoggettoComune_SA Comune nessuna soap Tabella 35: Dati Servizio Applicativo Fruitore 8. Impostare i parametri di invocazione del Servizio Applicativo con i valori riportati in Tabella 36. Impostare la Risposta Asincrona per il Servizio Applicativo fruitore con i valori riportati in Tabella 37. 9. Associare alla Porta Applicativa il Servizio Applicativo erogatore 7.3 Programmazione La fruizione di un servizio asincronosimmetrico è dal punto di vista logico equivalente ad due richieste sincrone consecutive a ruoli invertiti. Abbiamo quindi che entrambi i soggetti sono sia erogatori che fruitori.come per l asincrono Asimmetrico, per correlare la richiesta con la risposta dobbiamo includere nella risposta l SPCoopID della richiesta. 7.4 Test e verifica Seguendo le istruzioni fornite con i sorgenti per la configurazione, compilazione ed esecuzione degli esempi, avviamo il test per il servizio StampaDocumento. Vedremo, lato client, che verrà effettuata una richiesta e successivamente una serie di interrogazioni finchè non viene pervenuta una risposta di successo. Sbustamento Get message Connettore abilitato Url connettore Tipo credenziali d accesso IdentificaSoggetto_SA no disabilitato si http://localhost:8080/tutorial/asincronosimmetrico none Tabella 36: Dati invocazione Servizio Applicativo erogatore

33 / 33 Sbustamento Get message Connettore abilitato Url connettore Tipo credenziali d accesso IdentificaSoggettoComune_SA no disabilitato si http://localhost:9090/tutorial/asincronosimmetrico none Tabella 37: Dati risposta asincrona Servizio Applicativo fruitore