Tutorial di configurazione e programmazione OpenSPCoop Tutorial di configurazione e programmazione OpenSPCoop i Tutorial di configurazione e programmazione OpenSPCoop Copyright © 2005-2014 Link.it s.r.l. ii Tutorial di configurazione e programmazione OpenSPCoop iii Indice 1 Introduzione 1 2 Presentazione degli scenari di esempio 1 3 Tutorial per SPCoop 2 3.1 Comunicazione Variazione (Oneway) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.1.1 Descrizione formale dell’Accordo di Servizio: WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3.1.2 Configurazione Porta di Dominio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3.1.2.1 Configurazioni comuni a tutti gli esempi del tutorial SPCoop . . . . . . . . . . . . . . . . . . 5 3.1.2.2 Configurazione del registro dei servizi della PdD . . . . . . . . . . . . . . . . . . . . . . . . . 8 3.1.3 Programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.3.1 3.1.3.2 3.1.4 3.2 3.3 3.4 4 Fruitore: Servizio Applicativo del Comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.3.1.1 Modalità Proxy Transparent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 3.1.3.1.2 Modalità via Integration Manager . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 Erogatore: Servizio Applicativo del CentroAnagrafico . . . . . . . . . . . . . . . . . . . . . . 15 Esecuzione e Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 Stato Famiglia (sincrono) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.1 Descrizione formale dell’Accordo di Servizio: WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . 19 3.2.2 Configurazione Porta di Dominio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.2.3 Programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.2.4 Esecuzione e Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23 Stampa Documento (AsincronoAsimmetrico) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3.1 Descrizione formale dell’Accordo di Servizio: WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 3.3.2 Configurazione Porta di Dominio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.3.3 Programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 3.3.4 Esecuzione e Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 Identifica Soggetto (AsincronoSimmetrico) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.4.1 Descrizione formale dell’Accordo di Servizio: WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . 45 3.4.2 Configurazione Porta di Dominio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 3.4.3 Programmazione . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 3.4.4 Esecuzione e Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Tutorial per il protocollo trasparente 4.1 4.2 61 RichiestaStatoFamiglia Proxy Erogazione SOAP1.1 (sincrono trasparente) . . . . . . . . . . . . . . . . . . . . . 63 4.1.1 Descrizione formale dell’Accordo di Servizio: WSDL . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 4.1.2 Configurazione Porta di Dominio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 4.1.3 Esecuzione e Verifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 I rimanenti scenari del protocollo trasparente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74 Tutorial di configurazione e programmazione OpenSPCoop iv Elenco delle tabelle 1 Dati autenticazione PddConsole . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2 Dati Soggetto Fruitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 3 Connettore del Soggetto fruitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 4 Dati Servizio Applicativo Fruitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 5 Dati del Soggetto erogatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 6 Connettore del Soggetto erogatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 7 Dati Accordo di Servizio Parte Comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 8 Dati Servizio dell’Accordo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 Dati delle azioni del servizio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 10 Dati Servizio Applicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 11 Dati invocazione Servizio Applicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 12 Dati dell’Accordo di Servizio Parte Specifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 13 Dati Accordo di Servizio Parte Comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 14 Dati Servizio dell’Accordo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 15 Dati delle azioni del servizio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 16 Dati Servizio Applicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 17 Dati invocazione Servizio Applicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 18 Dati Accordo di Servizio Parte Specifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 19 Dati Accordo di Servizio Parte Comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 20 Dati Servizio dell’Accordo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 21 Dati delle azioni del servizio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 22 Dati Servizio Applicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 23 Dati invocazione Servizio Applicativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 24 Dati invocazione Risposta Asincrona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 25 Dati Accordo di Servizio Parte Specifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 26 Dati Servizio Applicativo Erogatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50 27 Dati Servizio Applicativo Fruitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 28 Dati invocazione Servizio Applicativo erogatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 29 Dati risposta asincrona Servizio Applicativo fruitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51 30 Dati Accordo di Servizio Parte Comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 31 Dati Servizio Asincrono Simmetrico nell’accordo di servizio . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52 32 Dati Servizio Asincrono Simmetrico Correlato nell’accordo di servizio . . . . . . . . . . . . . . . . . . . . . . . 53 33 Dati Accordo di Servizio Parte Specifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 34 Dati Accordo di Servizio Parte Specifica correlato . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 35 Dati del Soggetto erogatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65 36 Dati Soggetto Fruitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 37 Dati Servizio Applicativo Fruitore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 Tutorial di configurazione e programmazione OpenSPCoop v 38 Dati invocazione Servizio Applicativo erogatore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 39 Dati Accordo di Servizio Parte Comune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 40 Dati Servizio dell’Accordo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 41 Dati delle azioni del servizio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68 42 Dati dell’Accordo di Servizio Parte Specifica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 Tutorial di configurazione e programmazione OpenSPCoop 1 1 / 74 Introduzione Lo scopo del presente tutorial è quello di mostrare, tramite semplici casi d’uso realistici, i diversi aspetti legati all’adozione della Porta di Dominio OpenSPCoop-v2. Gli aspetti illustrati riguardano la configurazione della PdD, gli aspetti implementativi relativi all’integrazione degli applicativi, l’esecuzione e le verifiche di funzionamento sulla PdD degli stessi. Come ampiamente descritto nella documentazione del prodotto, OpenSPCoop nasce come implementazione della Porta di Dominio per la gestione del protocollo SPCoop. Con OpenSPCoop-v2 si è voluta superare la limitazione al solo protocollo SPCoop, estendendo le funzionalità della Porta di Dominio alla gestione di un qualunque protocollo di comunicazione in ambito SOA. La PdD OpenSPCoop2 supporta built-in, oltre ad SPCoop, il protocollo trasparente. Questo protocollo non prevede alcun header SOAP aggiuntivo per la comunicazione tra le PdD che svolgono quindi il compito di proxy trasparenti garantendo gli usuali servizi: tracciamento, autenticazione, autorizzazione, validazione, gestione security, ecc. Per l’aggiunta di ulteriori protocolli è necessario sviluppare dei plugin seguendo l’approccio descritto nel Manuale SDK di OpenSPCoop2. Il tutorial, dopo aver presentato i casi d’uso adottati negli scenari di esempio, prosegue differenziandosi in due sezioni distinte relative ai casi del protocollo SPCoop e di quello Trasparente. 2 Presentazione degli scenari di esempio Per la descrizione dei casi d’uso esemplificativi ipotizziamo l’esistenza dei seguenti Enti Amministrativi, vale a dire Soggetti SPCoop: • CentroAnagrafico, che rappresenta un ipotetico Centro Operativo che eroga servizi anagrafici con tecnologia SOA oriented (soggetto erogatore). • Comune, che rappresenta lo sportello anagrafico di una generica amministrazione locale che richiede dei servizi anagrafici al CentroAnagrafico (soggetto fruitore). Elenchiamo i servizi di esempio: • ComunicazioneVariazione: con questa operazione il soggetto Comune invia i dati anagrafici aggiornati di una persona fisica al soggetto CentroAnagrafico. La ricezione del messaggio comporta l’aggiornamento della posizione anagrafica. Non richiede alcuna risposta (profilo di cooperazione Oneway). • RichiestaStatoFamiglia: con questa operazione il soggetto Comune richiede al soggetto CentroAnagrafico i dati anagrafici che compongono lo stato di famiglia di una persona fisica. Nella richiesta viene inserito il codice fiscale della persona e nella risposta saranno inclusi i dati richiesti (profilo di cooperazione Sincrono). • StampaDocumento: viene usato per richiedere la stampa di un documento. Poiché è un’operazione che può richiedere un tempo indefinito e non immediato 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 CentroAnagrafico non consenta connessioni in uscita, quindi entrambe le connessioni saranno aperte dal Comune (profilo di cooperazione 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 CentroAnagrafico consenta connessioni in ingresso e in uscita (profilo di cooperazione AsincronoSimmetrico). Nelle sezioni successive vedremo in dettaglio come realizzare gli scenari appena descritti analizzando la progettazione dei descrittori dell’Accordo di Servizio, i passi di configurazione della Porta di Dominio, la fase di programmazione dei servizi di fruizione ed erogazione ed infine come effettuare un test di verifica complessivo. Se si è interessati al tutorial per SPCoop si può procedere con la lettura della sezione seguente. Il materiale di esempio, illustrato nel tutorial, contenente le descrizioni formali (wsdl) dei servizi e l’implementazione delle applicazioni è reperibile nell’archivio relativo alla distribuzione di OpenSPCoop2 al percorso protocolli/spcoop/example/tutorial. Per il tutorial sul protocollo trasparente e la PdD in modalità Proxy proseguire con la lettura della [?title]. Il materiale di esempio, illustrato nel tutorial, relativo a questo tipo di protocollo è reperibile nell’archivio relativo alla distribuzione di OpenSPCoop2 al percorso protocolli/trasparente/example/tutorial. Tutorial di configurazione e programmazione OpenSPCoop 3 2 / 74 Tutorial per SPCoop Nel caso del protocollo SPCoop lo scenario previsto è quello che vede i due domini organizzativi, CentroAnagrafico e Comune, interoperare con la mediazione delle rispettive Porte di Dominio in base agli accordi di servizio presenti sul Registro dei Servizi. La figura che segue mostra le entità che collaborano nell’interazione tra due servizi applicativi in accordo allo standard SPCoop. Nella 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 in accordo alle 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 la messa in opera degli scenari di esempio trattati in questo tutorial si assume che l’installazione standard (binary release) di OpenSPCoop2 sia stata completata correttamente e che quindi i servizi della porta di dominio, PD, PA e IntegrationManager, siano raggiungibili e che si disponga dell’accesso all’interfaccia di gestione web pddConsole per la configurazione della Porta di Dominio. Nota Per semplificare l’esecuzione degli esempi di scenario ed evitare di dover installare una seconda porta di dominio o creare numerosi soggetti cooperanti, si è scelto di utilizzare due soggetti, uno erogatore e l’altro fruitore, gestiti entrambi dalla medesima porta di dominio (modalità loopback). Il fatto di realizzare gli esempi utilizzando la medesima porta di dominio in fruizione ed erogazione è un dettaglio trascurabile che non modifica sostanzialmente il modus operandi nel caso in cui fruitore ed erogatore fossero appartenenti a domini distinti con Porte di Dominio distinte. Assumiamo che si siano adottate le impostazioni di default per l’installazione di JBoss e che quindi l’indirizzo di ricezione delle buste eGov della porta di dominio sia uguale a: http://localhost:8080/openspcoop2/PA. Essendo i due soggetti entrambi interni al dominio, possiamo assumere che questa url corrisponda al loro connettore. La figura seguente schematizza il flusso di una richiesta gestita dalla Porta di Dominio configurata in modalità loopback. Tutorial di configurazione e programmazione OpenSPCoop 3 / 74 Nei paragrafi seguenti passiamo ad illustrare i 4 servizi di esempio che corrispondono agli altrettanti profili di cooperazione previsti dal protocollo SPCoop. 3.1 3.1.1 Comunicazione Variazione (Oneway) Descrizione formale dell’Accordo di Servizio: WSDL 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, in definitorio, concettuale, logico fruitore/erogatore e implementativo fruitore/erogatore. WSDL Definitorio (/protocolli/spcoop/example/tutorial/oneway/configurazionePdD/wsdl/definitorio.xsd) Contiene le definizioni dei tipi di dato utilizzati per la codifica dei messaggi. <xs:schema xmlns:so="http://openspcoop2.org/example/pdd/server/ComunicazioneVariazione" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://openspcoop2.org/example/pdd/server/ComunicazioneVariazione"> <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:schema> Tutorial di configurazione e programmazione OpenSPCoop 4 / 74 WSDL Concettuale (/protocolli/spcoop/example/tutorial/oneway/configurazionePdD/wsdl/concettuale.wsdl) Specifica l’interfaccia completa dell’accordo di servizio indipendentemente da chi espone i servizi. <wsdl:definitions targetNamespace="http://openspcoop2.org/example/pdd/server/ ←ComunicazioneVariazione" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http ←://schemas.xmlsoap.org/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/ ←ComunicazioneVariazione" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/ComunicazioneVariazione ←" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="comunicazioneVariazioneRequest"> <wsdl:part name="comunicazioneVariazionePart" element="spc:comunicazioneVariazione"> </wsdl:part> </wsdl:message> <wsdl:portType name="ComunicazioneVariazione"> <wsdl:operation name="Notifica"> <wsdl:input message="spc:comunicazioneVariazioneRequest"> </wsdl:input> </wsdl:operation> </wsdl:portType> </wsdl:definitions> WSDL Logico Erogatore (/protocolli/spcoop/example/tutorial/oneway/configurazionePdD/wsdl/logicoErogatore.wsdl) Specifica l’interfaccia di servizi e operazioni esposte dal soggetto erogatore. <wsdl:definitions targetNamespace="http://openspcoop2.org/example/pdd/server/ComunicazioneVariazione" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/ ←soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/ComunicazioneVariazione" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/ComunicazioneVariazione" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="comunicazioneVariazioneRequest"> <wsdl:part name="comunicazioneVariazionePart" element="spc:comunicazioneVariazione"> </wsdl:part> </wsdl:message> <wsdl:portType name="ComunicazioneVariazione"> <wsdl:operation name="Notifica"> <wsdl:input message="spc:comunicazioneVariazioneRequest"> </wsdl:input> </wsdl:operation> </wsdl:portType> </wsdl:definitions> WSDL Logico Fruitore Specifica le interfacce di servizi e operazioni esposte dal soggetto fruitore. Il fruitore, per realizzare questo scenario, non ha bisogno di esporre nessun servizio, quindi non è presente il WSDL Logico Fruitore. WSDL Implementativo Erogatore (/protocolli/spcoop/example/tutorial/oneway/configurazionePdD/wsdl/implementativoErogato Specifica i dettagli di protocollo e porti di accesso per servizi e operazioni esposti dal soggetto erogatore. <wsdl:definitions targetNamespace="http://openspcoop2.org/example/pdd/server/ ←ComunicazioneVariazione" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/ ←soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/ComunicazioneVariazione" xmlns:wsdl ←="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/ComunicazioneVariazione ←" location="logicoErogatore.wsdl"> Tutorial di configurazione e programmazione OpenSPCoop 5 / 74 </wsdl:import> <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"> <soap:address location="http://localhost:8888/tutorial/oneway" /> </wsdl:port> </wsdl:service> </wsdl:definitions> WSDL Implementativo Fruitore Specifica i dettagli di protocollo e porti di accesso per servizi e operazioni esposti dal soggetto erogatore. Come per il WSDL Logico Fruitore, non ci sono servizi da implementare per il fruitore del servizio in questo scenario. 3.1.2 Configurazione Porta di Dominio 3.1.2.1 Configurazioni comuni a tutti gli esempi del tutorial SPCoop 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’interfaccia web di gestione pddConsole. Identifichiamoci con diritti di amministratore: Nome Login Password Valore d’esempio amministratore secret Tabella 1: Dati autenticazione PddConsole Una volta effettuato il login, nel menù a sinistra sono elencate le operazioni di modifica e visualizzazione della configurazione. 2. Creazione del Soggetto SPC/Comune avente il ruolo di fruitore negli esempi del tutorial: Aggiungiamo il soggetto che fruirà del servizio ComunicazioneVariazione. Nome Nome Valore d’esempio Comune Tabella 2: Dati Soggetto Fruitore Tutorial di configurazione e programmazione OpenSPCoop 6 / 74 (a) Selezionare aggiungi nel menù Soggetti (b) Utilizzare il form presentato per inserire i parametri del soggetto fruitore del servizio Nota Se non viene indicato il nome della Porta di dominio che ospita il soggetto, viene usato il valore di default: [Nome_Soggetto]SPCoopIT. (c) Premere il pulsante Invia 3. Impostazione del connettore, cioè l’indirizzo della porta di dominio per la ricezione delle richieste indirizzate ad un determinato soggetto, relativo al Soggetto SPC/Comune. Nome URL Valore d’esempio http://localhost:8080/openspcoop2/spcoop/PA Tabella 3: Connettore del Soggetto fruitore (a) Dalla lista dei soggetti selezionare visualizza relativamente alla riga del soggetto SPC/Comune in corrispondenza della colonna Connettore (b) Abilitare quindi il connettore dall’apposito checkbox e Utilizzare il campo testo sottostante 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: (a) Selezionare aggiungi nel menù Servizi Applicativi (b) Utilizzare il form presentato per inserire i parametri del servizio applicativo fruitore (c) Premere il pulsante Invia Tutorial di configurazione e programmazione OpenSPCoop Nome Nome Soggetto Invocazione porta / Credenziale di accesso Utente Password Modalità di fault Sbustamento Informazioni di Protocollo 7 / 74 Valore d’esempio Comune_SA SPC/Comune basic Comune_SA 123456 soap abilitato Tabella 4: Dati Servizio Applicativo Fruitore 5. Creazione del Soggetto SPC/CentroAnagrafico avente il ruolo di erogatore dei servizi di esempio del tutorial. Nome Nome Valore d’esempio CentroAnagrafico Tabella 5: Dati del Soggetto erogatore (a) Selezionare aggiungi nel menù Soggetti (b) Utilizzare la form per inserire i parametri del soggetto erogatore del servizio Tutorial di configurazione e programmazione OpenSPCoop 8 / 74 Nota Se non viene indicato il nome della Porta di dominio che ospita il soggetto, viene usato il valore di default: [Nome_Soggetto]SPCoopIT. (c) Premere il pulsante Invia 6. Impostazione del connettore relativo al Soggetto SPC/CentroAnagrafico. Nome URL Valore d’esempio http://localhost:8080/openspcoop2/spcoop/PA Tabella 6: Connettore del Soggetto erogatore (a) Dalla lista dei soggetti selezionare visualizza relativamente alla riga del soggetto SPC/CentroAnagrafico in corrispondenza della colonna Connettore (b) Utilizzare il form presentato per inserire il valore del connettore (c) Premere il pulsante Invia 3.1.2.2 Configurazione del registro dei servizi della PdD Una volta creati i descrittori (WSDL) del servizio, possiamo procedere con la creazione dell’Accordo di Servizio Parte Comune nella pddConsole. 1. Creazione dell’Accordo di Servizio Parte Comune Nome Nome Soggetto Referente Versione WSDL Definitorio WSDL Concettuale WSDL Logico Erogatore Valore d’esempio AS_ComunicazioneVariazione SPC/CentroAnagrafico 1 definitorio.xsd concettuale.wsdl logicoErogatore.wsdl Tabella 7: Dati Accordo di Servizio Parte Comune (a) Selezionare aggiungi nel menù Accordi Servizio Parte Comune (b) Utilizzare il form presentato per inserire i vari parametri dell’Accordo Tutorial di configurazione e programmazione OpenSPCoop 9 / 74 2. Aggiungiamo il Servizio generico all’Accordo: il nome del servizio dovrà avere lo stesso nome del PortType indicato nel WSDL Concettuale. Nome Nome Profilo Valore d’esempio ComunicazioneVariazione oneway Tabella 8: Dati Servizio dell’Accordo (a) Dalla lista degli Accordi di Servizio Parte Comune, selezionare visualizza nella colonna Servizi in corrispondenza dell’Accordo creato al punto precedente. (b) Premere il pulsante Aggiungi e completare il form per l’aggiunta di un nuovo servizio. 3. Specifichiamo le azioni del Servizio: le azioni del Servizio corrispondono alle Operation specificate nel WSDL Nome Nome Valore d’esempio Notifica Tabella 9: Dati delle azioni del servizio Tutorial di configurazione e programmazione OpenSPCoop 10 / 74 (a) Selezionare visualizza nella colonna Azioni in corrispondenza del servizio ComunicazioneVariazione appena creato. (b) Premere il pulsante Aggiungi e completare il form per l’aggiunta di una nuova azione. 4. Aggiungere il Servizio Applicativo Erogatore: Nome Nome Soggetto Credenziale di accesso Modalità fault Sbustamento Informazioni di Protocollo Valore d’esempio ComunicazioneVariazione_SA CentroAnagrafico nessuna soap abilitato Tabella 10: Dati Servizio Applicativo (a) Selezionare Visualizza nella sezione Servizi Applicativi del menu di sinistra. (b) Premere il pulsante Aggiungi presente sotto la lista dei Servizi Applicativi (c) Utilizzare il form per inserire i parametri del Servizio Applicativo. (d) Premere il pulsante Invia 5. Impostare i parametri di invocazione del Servizio Applicativo: Nome Nome Sbustamento SOAP Sbustamento Informazioni di Protocollo Salvataggio in Message Box Connettore abilitato Url connettore Tipo credenziali d’accesso Valore d’esempio ComunicazioneVariazione_SA disabilitato abilitato disabilitato si http://localhost:8888/tutorial/oneway nessuna Tabella 11: Dati invocazione Servizio Applicativo Tutorial di configurazione e programmazione OpenSPCoop 11 / 74 (a) Abilitare l’invocazione del servizio applicativo ComunicazioneServizio_SA dall’elenco dei Servizi Applicativi (selezionare disabilitato nella colonna Invocazione servizio) (b) Utilizzare il form presentato per inserire i parametri del Servizio Applicativo. (c) Premere il pulsante Invia 6. Aggiungere l’Accordo di Servizio Parte Specifica: Nome Soggetto Erogatore Accordo di Servizio Parte Comune Servizio Applicativo Erogatore Servizio WSDL Implementativo Erogatore Valore d’esempio SPC/CentroAnagrafico AS_ComunicazioneVariazione ComunicazioneVariazione_SA ComunicazioneVariazione implementativoErogatore.wsdl Tabella 12: Dati dell’Accordo di Servizio Parte Specifica (a) Nella sezione Accordi Servizio Parte Specifica selezionare Aggiungi. (b) Utilizzare il form presentato per inserire i parametri della parte specifica dell’accordo di servizio Tutorial di configurazione e programmazione OpenSPCoop 12 / 74 (c) Premere il pulsante Invia Nota Si tenga presente che l’operazione descritta in questo passaggio comporta la creazione automatica di una porta applicativa, con il nome e il servizio applicativo indicati nel form, associata al soggetto erogatore dell’accordo di servizio parte specifica appena creato. La porta applicativa creata per default è unica per tutte le azioni del servizio e viene inizializzata con dei valori di default che vanno bene in molti casi. Se si vogliono modificare tali impostazioni (ad esempio una porta applicativa diversa per azione) si deve procedere con la modifica della porta applicativa individuabile nella lista delle porte applicative relative al soggetto erogatore. 7. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire del servizio: l’installazione standard di OpenSPCoop2 attiva di default l’autorizzazione basata sul Registro che attiva il controllo da parte della porta applicativa che il soggetto che invoca un servizio sia un fruitore autorizzato. Per superare questo controllo dobbiamo quindi aggiungere il soggetto SPC/Comune ai fruitori del servizio ComunicazioneVariazione. (a) Nell’elenco degli Accordi Servizio Parte Specifica individuare ComunicazioneVariazione e selezionare visualizza nella colonna Fruitori: (b) Selezionare Aggiungi ed utilizzare il form per inserire i parametri del soggetto fruitore del servizio (c) Premere il pulsante Invia Tutorial di configurazione e programmazione OpenSPCoop 13 / 74 Nota Si tenga presente che l’operazione descritta in questo passaggio comporta la creazione automatica di una porta delegata associata al soggetto fruitore appena associato al servizio. 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 delle porte delegata relative al soggetto fruitore. 8. Autorizzare il servizio applicativo fruitore all’invocazione della porta delegata appena creata. (a) Dall’elenco dei fruitori del servizio, in corrispondenza del soggetto SPC/Comune, nella colonna Servizi Applicativi Autorizzati 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. 3.1.3 Programmazione Completata la configurazione della Porta di Dominio, si passa alla fase di integrazione degli applicativi tramite l’implementazione delle componenti relative ai servizi applicativi erogatore e fruitore. 3.1.3.1 3.1.3.1.1 Fruitore: Servizio Applicativo del Comune Modalità Proxy Transparent Cominciamo con la programmazione del fruitore. Per completare gli esempi sono stati utilizzati gli stub generati dal tool wsdl2java fornito da CXF. L’approccio in modalità Proxy Transparent prevede che l’invocazione del servizio avvenga tramite l’interfaccia descritta nel WSDL dell’accordo di servizio. ComunicazioneVariazioneService ss = new ComunicazioneVariazioneService(wsdlURL, ←SERVICE_NAME); ComunicazioneVariazione port = ss.getComunicazioneVariazioneInterfaceEndpoint(); /* * Imposto la url della porta di dominio come destinazione * Imposto username e password per l’autenticazione */ ((BindingProvider)port).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, SOAPUrl); ((BindingProvider)port).getRequestContext().put(BindingProvider.USERNAME_PROPERTY, ←username); ((BindingProvider)port).getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, ←password); ←- org.openspcoop.example.ComunicazioneVariazione_Type _notifica_comunicazioneVariazionePart = ←new ComunicazioneVariazione_Type(); Tutorial di configurazione e programmazione OpenSPCoop 14 / 74 _notifica_comunicazioneVariazionePart.setCF("BBBCCC11F11F111F"); ... ... port.notifica(_notifica_comunicazioneVariazionePart); 3.1.3.1.2 Modalità via Integration Manager Un’altro modo per inviare i messaggi alla Porta di Dominio è quello di utilizzare il servizio PD di Integration Manager. Generiamo gli stub partendo dal wsdl del servizio: wsdl2java -all http://localhost:8080/openspcoop2/IntegrationManager/PD?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) { e.printStackTrace(); } try{ String file = "request.xml"; String portaDelegata = "/SPCComune/SPCCentroAnagrafico/ ←SPCComunicazioneVariazione/Notifica"; /* * Creo il port per l’IntegrationManager */ PDService ss = new PDService(wsdlURL, SERVICE_NAME); PD port = ss.getPD(); /* * Invoco il servizio invocaPortaDelegata */ java.lang.String _invocaPortaDelegata_portaDelegata = portaDelegata; IntegrationManagerMessage _invocaPortaDelegata_msg = new ←IntegrationManagerMessage(); 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 { IntegrationManagerMessage _invocaPortaDelegata__return = port. ←invocaPortaDelegata(_invocaPortaDelegata_portaDelegata, ←_invocaPortaDelegata_msg); System.out.println("\n Response Message:"); ←- Tutorial di configurazione e programmazione OpenSPCoop 15 / 74 System.out.println(new String(_invocaPortaDelegata__return.getMessage())) ←; } catch (IntegrationManagerException_Exception e) { System.out.println("Expected exception: IntegrationManagerException has ←occurred."); System.out.println(e.toString()); return; } } catch(Exception e){ System.out.println("Errore::::" + e); return; } 3.1.3.2 Erogatore: Servizio Applicativo del CentroAnagrafico Il Servizio Applicativo del Centro Anagrafico deve ricevere il messaggio SOAP senza mandare una risposta. Vediamone un’implementazione con gli skeleton generati dal tool wsdl2java di CXF. package org.openspcoop.example; @javax.jws.WebService( 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.getNome()); 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); } } } Tutorial di configurazione e programmazione OpenSPCoop 3.1.4 16 / 74 Esecuzione e Verifica La visione d’insieme dell’intero flusso di invocazione è mostrata nella figura seguente, tenendo presente però che, nel caso del tu- torial, la PdD è unica per entrambi i soggetti per semplificare le configurazioni. • Il Client invia il messaggio di richiesta alla Porta Delegata (Messaggio 1 in figura). • La Porta di Dominio si occupa quindi di imbustare la richiesta ed inviarla alla Porta di Dominio destinataria, nel nostro caso a se stessa, arricchita dell’header e-Gov (Messaggio 2 in figura). • La Porta di Dominio destinataria recupera le informazioni necessarie alla gestione della richiesta, riconosce che il tipo di comunicazione è Oneway e si occupa quindi di consegnare il messaggio applicativo al servizio erogatore (Messaggio 3 in figura) e quindi inviare la risposta alla PdD mittente con payload vuoto (come previsto nei profili oneway, Messaggio 5 in figura). • La PdD mittente quindi invia anch’essa la risposta con payload vuoto al servizio applicativo fruitore del soggetto Comune. (Messaggio 6 in figura). Per l’esecuzione delle applicazioni di esempio si può utilizzare l’ambiente presente nella distribuzione di openspcoop2 al percorso: protocolli/spcoop/example/tutorial/oneway eseguendo i seguenti passi: • Configurare l’applicazione client editando il file Client.properties. Ecco un esempio di possibili valori di configurazione: invocazioneTramitePdD=true # Invocazione diretta del servizio # endpoint=http://localhost:8888/tutorial/oneway # Invocazione tramite PdD portaDiDominio=http://localhost:8080/openspcoop2/spcoop/PD/ portaDelegata=SPCComune/SPCCentroAnagrafico/SPCComunicazioneVariazione/Notifica # Credenziali http basic username=Comune_SA password=123456 • Configurare l’applicazione server editando il file Server.properties. In questo caso si tratterà di impostare semplicemente l’endpoint del servizio esposto: endpoint=http://localhost:8888/tutorial/oneway • Avviare il Server tramite il comando ant run_server. L’output ottenuto sarà: [root@ws5 oneway]# ant run_server Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/spcoop/example/tutorial/ ←oneway/build.xml _run_server_spcoop_tutorial_oneway: [java] ************************************** [java] Starting Server [java] Jul 12, 2013 3:59:31 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL Tutorial di configurazione e programmazione OpenSPCoop 17 / 74 [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←ComunicazioneVariazione}ComunicazioneVariazioneService from WSDL: file: ←configurazionePdD/wsdl/implementazioneErogatore.wsdl [java] Jul 12, 2013 3:59:31 PM org.apache.cxf.endpoint.ServerImpl initDestination [java] INFO: Setting the server’s publish address to be http://localhost:8888/ ←tutorial/oneway [java] Server ready... [java] 2013-07-12 15:59:31.787:INFO:oejs.Server:jetty-8.1.7.v20120910 [java] 2013-07-12 15:59:31.831:INFO:oejs.AbstractConnector:Started ←SelectChannelConnector@localhost:8888 • Avviare il Client tramite il comando ant run_client. L’output ottenuto sarà: [root@ws5 oneway]# ant run_client Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/spcoop/example/tutorial/ ←oneway/build.xml _run_client_spcoop_tutorial_oneway: [java] Jul 12, 2013 4:26:07 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←ComunicazioneVariazione}ComunicazioneVariazioneService from WSDL: file: ←configurazionePdD/wsdl/implementazioneErogatore.wsdl [java] Invoking notifica... run_client: BUILD SUCCESSFUL Total time: 3 seconds Contestualmente l’output della console su cui è stato avviato il server mostra il seguente output: [java] [java] [java] [java] [java] [java] [java] [java] ========== Ricevuta Comunicazione Variazione ============== == Codice fiscale da modificare: BBBCCC11F11F111F == == == == == Nuovo Nuovo Nuovo Nuova Nuovo nome: Mario cognome: Rossi codice fiscale: DDDFFF22G22G222G data di nascita: 1980-01-01Z stato civile: Celibe Per verificare il corretto funzionamento si possono consultare i messaggi diagnostici presenti nella directory configurata in openspcoop2 ed in particolare il file openspcoop2.log: <spcoop> 001003 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T16 ←:01:29.463> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 PD: ←SPCComune/SPCCentroAnagrafico/SPCComunicazioneVariazione SA:Comune_SA FR:SPC/Comune -> ←ER:SPC/CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [Comune_SA] ) ←Comune_SA verso la porta delegata SPCComune/SPCCentroAnagrafico/ ←SPCComunicazioneVariazione <spcoop> 001007 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T16 ←:01:30.386> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 PD: ←SPCComune/SPCCentroAnagrafico/SPCComunicazioneVariazione SA:Comune_SA FR:SPC/Comune -> ←ER:SPC/CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Connessione verso il servizio applicativo terminata con codice di trasporto: 200 Tutorial di configurazione e programmazione OpenSPCoop 18 / 74 <spcoop> 003006 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T16:01:30.709> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 PD:SPCComune/ ←SPCCentroAnagrafico/SPCComunicazioneVariazione SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000001_2013 ←-07-12_16:01] in corso (location: http://localhost:8080/openspcoop2/PA) ... <spcoop> 004001 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T16:01:31.019> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Ricevuto messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000001_2013 ←-07-12_16:01] inviata dalla parte mittente [SPC/Comune] <spcoop> 004003 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T16:01:31.087> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/ComunicazioneVariazione:1--Notifica] ... <spcoop> 004004 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T16:01:31.091> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/ComunicazioneVariazione:1--Notifica]: autorizzato (client-auth disabilitato nella ←porta di dominio PddOpenSPCoop) <spcoop> 005012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico Sbustamento <2013-07-12T16 ←:01:31.176> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Ricevuta Busta [Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01] con filtro duplicati attivo ←nel profilo di trasmissione associato: effettuato salvataggio nell’History delle buste ←ricevute <spcoop> 004013 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T16:01:31.263> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Connessione verso la porta di dominio mittente terminata con codice di trasporto: 200 <spcoop> 003007 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T16:01:31.322> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01 PD:SPCComune/ ←SPCCentroAnagrafico/SPCComunicazioneVariazione SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/ComunicazioneVariazione A:Notifica Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000001_2013-07-12_16 ←:01] inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( ←location: http://localhost:8080/openspcoop2/PA) con codice di trasporto: 200 <spcoop> 007011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T16:01:31.341> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16 ←:01 SA:ComunicazioneVariazione_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←ComunicazioneVariazione A:Notifica Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000001_2013 ←-07-12_16:01] in corso (location: http://localhost:8888/tutorial/oneway) ... Tutorial di configurazione e programmazione OpenSPCoop 19 / 74 <spcoop> 007012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T16:01:32.002> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000001_2013-07-12_16 ←:01 SA:ComunicazioneVariazione_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←ComunicazioneVariazione A:Notifica Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000001_2013-07-12_16:01], generato dal ←mittente [SPC/Comune], consegnato al servizio applicativo [ComunicazioneVariazione_SA] ←mediante connettore [http] (location: http://localhost:8888/tutorial/oneway) con codice ←di trasporto: 202 3.2 3.2.1 Stato Famiglia (sincrono) Descrizione formale dell’Accordo di Servizio: WSDL Come per il servizio ComunicazioneVariazione, 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 (/protocolli/spcoop/example/tutorial/sincrono/configurazionePdD/wsdl/definitorio.xsd) Contiene le definizioni dei tipi di dato utilizzati per la codifica dei messaggi. <xs:schema xmlns:so="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia" ←xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/ ←XMLSchema" targetNamespace="http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia"> <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 (/protocolli/spcoop/example/tutorial/sincrono/configurazionePdD/wsdl/concettuale.wsdl) Specifica l’interfaccia completa dell’accordo di servizio indipendentemente da chi espone i servizi. <wsdl:definitions targetNamespace="http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http:// ←schemas.xmlsoap.org/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia" ←location="definitorio.xsd"> </wsdl:import> <wsdl:message name="statoFamigliaResponse"> <wsdl:part name="statoFamigliaResponsePart" element="spc:statoFamiglia"> </wsdl:part> </wsdl:message> <wsdl:message name="statoFamigliaRequest"> <wsdl:part name="statoFamigliaRequestPart" element="spc:richiestaStatoFamiglia"> </wsdl:part> Tutorial di configurazione e programmazione OpenSPCoop 20 / 74 </wsdl:message> <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 (/protocolli/spcoop/example/tutorial/sincrono/configurazionePdD/wsdl/logicoErogatore.wsdl) Specifica l’interfaccia di servizi e operazioni esposte dal soggetto erogatore. <wsdl:definitions targetNamespace="http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http:// ←schemas.xmlsoap.org/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia" ←location="definitorio.xsd"> </wsdl:import> <wsdl:message name="statoFamigliaResponse"> <wsdl:part name="statoFamigliaResponsePart" element="spc:statoFamiglia"> </wsdl:part> </wsdl:message> <wsdl:message name="statoFamigliaRequest"> <wsdl:part name="statoFamigliaRequestPart" element="spc:richiestaStatoFamiglia"> </wsdl:part> </wsdl:message> <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 (/protocolli/spcoop/example/tutorial/sincrono/configurazionePdD/wsdl/implementativoErogat Specifica i dettagli di protocollo e porti di accesso per servizi e operazioni esposti dal soggetto erogatore. <wsdl:definitions targetNamespace="http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http:// ←schemas.xmlsoap.org/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia" ←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> <soap:body use="literal"/> </wsdl:input> <wsdl:output> <soap:body use="literal"/> </wsdl:output> </wsdl:operation> Tutorial di configurazione e programmazione OpenSPCoop 21 / 74 </wsdl:binding> <wsdl:service name="RichiestaStatoFamigliaService"> <wsdl:port name="RichiestaStatoFamigliaInterfaceEndpoint" binding="spc: ←RichiestaStatoFamigliaBinding"> <soap:address location="http://localhost:8888/tutorial/sincrono"/> </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. 3.2.2 Configurazione Porta di Dominio Eseguiamo la configurazione sulla pddConsole 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 Parte Comune con i dati riportati in Tabella 13. Nome Nome Referente WSDL Definitorio WSDL Concettuale WSDL Logico Erogatore Valore d’esempio AS_RichiestaStatoFamiglia SPC/CentroAnagrafico definitorio.xsd concettuale.wsdl logicoErogatore.wsdl Tabella 13: Dati Accordo di Servizio Parte Comune 2. Aggiungiamo il Servizio Generico all’Accordo: il nome del servizio dovrà avere lo stesso nome del PortType indicato nel WSDL Concettuale. Nome Nome Profilo Valore d’esempio RichiestaStatoFamiglia sincrono Tabella 14: Dati Servizio dell’Accordo 3. Specifichiamo le azioni del Servizio: le azioni del Servizio corrispondono alle Operation specificate nel WSDL Nome Nome Valore d’esempio Acquisisci Tabella 15: Dati delle azioni del servizio 4. Aggiungere il Servizio Applicativo Erogatore: 5. Impostare i parametri di invocazione del Servizio Applicativo, per la consegna trasparente delle richieste al servizio, con i valori riportati in Tabella 17: 6. Aggiungere l’Accordo di Servizio Parte Specifica con i dati riportati in Tabella 18. 7. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire della parte specifica appena creata: avendo attiva di default l’autenticazione basata sul Registro dobbiamo aggiungere il soggetto SPC/Comune ai fruitori del servizio RichiestaStatoFamiglia Tutorial di configurazione e programmazione OpenSPCoop Nome Nome Soggetto Credenziale di accesso Modalità fault 22 / 74 Valore d’esempio RichiestaStatoFamiglia_SA CentroAnagrafico nessuna soap Tabella 16: Dati Servizio Applicativo Nome Nome Sbustamento SOAP Sbustamento Informazioni di Protocollo Salvataggio in Message Box Connettore abilitato Url connettore Tipo credenziali d’accesso Valore d’esempio RichiestaStatoFamiglia_SA disabilitato abilitato disabilitato si http://localhost:8888/tutorial/sincrono nessuna Tabella 17: Dati invocazione Servizio Applicativo 8. Inserire il servizio applicativo tra quelli autorizzati ad invocare il servizio. Questo passaggio attiva l’autorizzazione del servizio applicativo fruitore all’invocazione della porta delegata generata al passo precedente. (a) Dall’elenco dei fruitori del servizio, in corrispondenza del soggetto SPC/Comune, nella colonna Servizi Applicativi Autorizzati 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 Nota L’operazione descritta in questo passaggio, creerà automaticamente un’associazione tra il servizio applicativo e la porta delegata creata automaticamente al passo precedente. 3.2.3 Programmazione Gli aspetti di programmazione di un servizio e relativo client, per il profilo sincrono, sono molto simili al caso del profilo Oneway, tranne per il fatto che il servizio in questo caso restituisce un messaggio SOAP di risposta che deve essere gestita dal chiamante. 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") Nome Soggetto Accordo Servizio Parte Comune Servizio Servizio Applicativo Erogatore WSDL Implementativo Erogatore Valore d’esempio SPC/CentroAnagrafico AS_RichiestaStatoFamiglia RichiestaStatoFamiglia RichiestaStatoFamiglia_SA implementativoErogatore.wsdl Tabella 18: Dati Accordo di Servizio Parte Specifica Tutorial di configurazione e programmazione OpenSPCoop public PersonaType acquisisci( @WebParam(partName = "statoFamigliaRequestPart", name = "richiestaStatoFamiglia", targetNamespace = "http://www.openspcoop.org/example") java.lang.String statoFamigliaRequestPart ); 23 / 74 ←- } 3.2.4 Esecuzione e Verifica La visione d’insieme dell’intero flusso di invocazione è mostrata nella figura seguente, tenendo presente però che, nel caso del tu- torial, la PdD è unica per entrambi i soggetti per semplificare le configurazioni. • Il Client invia il messaggio di richiesta alla Porta Delegata (Messaggio 1 in figura) • La Porta di Dominio si occupa quindi di imbustare la richiesta ed inviarla alla Porta di Dominio destinataria, nel nostro caso a se stessa, arricchita dell’header e-Gov (Messaggio 2 in figura). • La Porta di Dominio destinataria recupera le informazioni necessarie alla gestione della richiesta, riconosce che il tipo di comunicazione è Sincrona e si occupa quindi di consegnare il messaggio applicativo al servizio erogatore (Messaggio 3 in figura) e quindi inviare il messaggio di risposta alla PdD mittente (Messaggio 5 in figura). • La PdD mittente quindi invia la risposta al servizio applicativo fruitore del soggetto SPC/Comune (Messaggio 6 in figura). Per l’esecuzione delle applicazioni di esempio si può utilizzare l’ambiente presente nella distribuzione di openspcoop2 al percorso: protocolli/spcoop/example/tutorial/sincrono eseguendo i seguenti passi: • Configurare l’applicazione client editando il file Client.properties. Ecco un esempio di possibili valori di configurazione: invocazioneTramitePdD=true # Invocazione diretta del servizio endpoint=http://localhost:8888/tutorial/sincrono # Invocazione tramite PdD portaDiDominio=http://localhost:8080/openspcoop2/spcoop/PD/ portaDelegata=SPCComune/SPCCentroAnagrafico/SPCRichiestaStatoFamiglia/Acquisisci # Credenziali http basic username=Comune_SA password=123456 • Configurare l’applicazione server editando il file Server.properties. In questo caso si tratterà di impostare semplicemente l’endpoint del servizio esposto: endpoint=http://localhost:8888/tutorial/sincrono • Avviare il Server tramite il comando ant run_server. L’output ottenuto sarà: [root@ws5 sincrono]# ant run_server Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/spcoop/example/tutorial/ ←sincrono/build.xml Tutorial di configurazione e programmazione OpenSPCoop 24 / 74 _run_server_spcoop_tutorial_sincrono: [java] Starting Server [java] Jul 12, 2013 6:27:02 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia}RichiestaStatoFamigliaService from WSDL: file: ←configurazionePdD/wsdl/implementazioneErogatore.wsdl [java] Jul 12, 2013 6:27:02 PM org.apache.cxf.endpoint.ServerImpl initDestination [java] INFO: Setting the server’s publish address to be http://localhost:8888/ ←tutorial/sincrono [java] Server ready... [java] 2013-07-12 18:27:02.924:INFO:oejs.Server:jetty-8.1.7.v20120910 [java] 2013-07-12 18:27:02.965:INFO:oejs.AbstractConnector:Started ←SelectChannelConnector@localhost:8888 • Avviare il Client tramite il comando ant run_client. L’output ottenuto sarà: [root@ws5 sincrono]# ant run_client Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/spcoop/example/tutorial/ ←sincrono/build.xml _run_client_spcoop_tutorial_sincrono: [java] Jul 12, 2013 6:27:12 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia}RichiestaStatoFamigliaService from WSDL: file: ←configurazionePdD/wsdl/implementazioneErogatore.wsdl [java] Invoking acquisisci... Contestualmente l’output della console su cui è stato avviato il server mostra il seguente output: [java] Richiesto Stato Famiglia per cf:DDDFFF22G22G222G e quindi l’output del client mostra: [java] [java] [java] [java] [java] [java] ========== Ricevuti dati del Soggetto ============== == Nuovo nome: Mario == Nuovo cognome: Rossi == Nuovo codice fiscale: DDDFFF22G22G222G == Nuova data di nascita: 1980-01-01Z == Nuovo stato civile: Celibe Per verificare il corretto funzionamento si possono consultare i messaggi diagnostici presenti nella directory configurata in openspcoop2 ed in particolare il file openspcoop2.log: ComuneSPCoopIT.RicezioneContenutiApplicativiWS <2009-11-18T15:29:25.889> (infoOpenspcoop) ←IDeGov:Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 PD:SPCComune/SPCCentroAnagrafico/ ←SPCRichiestaStatoFamiglia SA:Comune_SA FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ ←RichiestaStatoFamiglia_Acquisisci Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [Comune_SA] ) ←Comune_SA verso la porta delegata SPCComune/SPCCentroAnagrafico/ ←SPCRichiestaStatoFamiglia ComuneSPCoopIT.InoltroBusteEGov <2009-11-18T15:29:25.960> (infoSpcoop) IDeGov: ←Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 PD:SPCComune/SPCCentroAnagrafico/ ←SPCRichiestaStatoFamiglia SA:Comune_SA FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ ←RichiestaStatoFamiglia_Acquisisci Invio Messaggio SPCoop con identificativo [Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29] ←in corso (location: http://localhost:8080/openspcoop/PA) ... Tutorial di configurazione e programmazione OpenSPCoop 25 / 74 CentroAnagraficoSPCoopIT.RicezioneBusteEGovWS <2009-11-18T15:29:26.161> (infoSpcoop) IDeGov ←:Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 FR:SPC/Comune -> S:SPC/ ←CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci Ricevuto messaggio SPCoop con identificativo [Comune_ComuneSPCoopIT_0000092_2009-11-18_15 ←:29] inviata dalla parte mittente [SPC/Comune] CentroAnagraficoSPCoopIT.RicezioneBusteEGovWS <2009-11-18T15:29:26.169> (infoOpenspcoop) IDeGov:Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 FR:SPC/Comune -> S:SPC/ ←CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci Controllo Autorizzazione[spcoop] messaggio SPCoop con identificativo [ ←Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29] FR[SPC/Comune]->ER[SPC/ ←CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci] ... ←- CentroAnagraficoSPCoopIT.RicezioneBusteEGovWS <2009-11-18T15:29:26.213> (infoOpenspcoop) ←IDeGov:Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 FR:SPC/Comune -> S:SPC/ ←CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci Controllo Autorizzazione[spcoop] messaggio SPCoop con identificativo [ ←Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29] FR[SPC/Comune]->ER[SPC/ ←CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci]: autorizzato (client-auth ←disabilitato nella porta di dominio PddOpenSPCoop) CentroAnagraficoSPCoopIT.Sbustamento <2009-11-18T15:29:26.220> (infoOpenspcoop) IDeGov: ←Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 FR:SPC/Comune -> S:SPC/ ←CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci Ricevuta Busta EGov [Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29] con l’attributo ←ALPIUUNAVOLTA nel profilo di trasmissione: busta salvata nell’History delle buste ←ricevute CentroAnagraficoSPCoopIT.ConsegnaContenutiApplicativi <2009-11-18T15:29:26.235> (infoSpcoop ←) IDeGov:Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 SA:RichiestaStatoFamiglia_SA FR: ←SPC/Comune -> S:SPC/CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci Invio Messaggio SPCoop con identificativo [Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29] ←in corso (location: http://localhost:8080/tutorial/sincrono) ... CentroAnagraficoSPCoopIT.ConsegnaContenutiApplicativi <2009-11-18T15:29:26.528> (infoSpcoop ←) IDeGov:Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 SA:RichiestaStatoFamiglia_SA FR: ←SPC/Comune -> S:SPC/CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29], generato dal ←mittente [SPC/Comune], consegnato al servizio applicativo [RichiestaStatoFamiglia_SA] ←mediante connettore [http] (location: http://localhost:8888/tutorial/sincrono) con ←codiceConsegna: 200 CentroAnagraficoSPCoopIT.RicezioneBusteEGovWS <2009-11-18T15:29:26.599> (infoSpcoop) IDeGov ←:Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 FR:SPC/Comune -> S:SPC/ ←CentroAnagrafico_SPC/RichiestaStatoFamiglia_Acquisisci Generato messaggio SPCoop con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000093_2009-11-18_15:29] inviato alla parte ←destinataria [SPC/Comune] ComuneSPCoopIT.InoltroBusteEGov <2009-11-18T15:29:26.616> (infoSpcoop) IDeGov: ←Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 PD:SPCComune/SPCCentroAnagrafico/ ←SPCRichiestaStatoFamiglia SA:Comune_SA FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ ←RichiestaStatoFamiglia_Acquisisci Tutorial di configurazione e programmazione OpenSPCoop 26 / 74 Messaggio SPCoop con identificativo [Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29] ←inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( ←location: http://localhost:8080/openspcoop/PA) con codiceConsegna: 200 ComuneSPCoopIT.InoltroBusteEGov <2009-11-18T15:29:26.713> (infoSpcoop) IDeGov: ←Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 PD:SPCComune/SPCCentroAnagrafico/ ←SPCRichiestaStatoFamiglia SA:Comune_SA FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ ←RichiestaStatoFamiglia_Acquisisci Ricevuto messaggio SPCoop con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000093_2009-11-18_15:29] inviata dalla parte mittente [SPC/CentroAnagrafico] ←- ComuneSPCoopIT.SbustamentoRisposte <2009-11-18T15:29:26.735> (infoOpenspcoop) IDeGov: ←Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 PD:SPCComune/SPCCentroAnagrafico/ ←SPCRichiestaStatoFamiglia SA:Comune_SA FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ ←RichiestaStatoFamiglia_Acquisisci Ricevuta Busta EGov [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000093_2009-11-18_15:29] ←con l’attributo ALPIUUNAVOLTA nel profilo di trasmissione: busta salvata nell’History ←delle buste ricevute ComuneSPCoopIT.RicezioneContenutiApplicativiWS <2009-11-18T15:29:26.738> (infoOpenspcoop) ←IDeGov:Comune_ComuneSPCoopIT_0000092_2009-11-18_15:29 PD:SPCComune/SPCCentroAnagrafico/ ←SPCRichiestaStatoFamiglia SA:Comune_SA FR:SPC/Comune -> S:SPC/CentroAnagrafico_SPC/ ←RichiestaStatoFamiglia_Acquisisci Consegna contenuto applicativo, della risposta applicativa sincrona, effettuata 3.3 Stampa Documento (AsincronoAsimmetrico) 3.3.1 Descrizione formale dell’Accordo di Servizio: WSDL 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 (/protocolli/spcoop/example/tutorial/asincronoAsimmetrico/configurazionePdD/wsdl/definitorio.xsd) Contiene le definizioni dei tipi di dato utilizzati per la codifica dei messaggi. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://openspcoop2.org/example/pdd/server/StampaDocumento" xmlns:so="http://openspcoop2.org/example/pdd/server/StampaDocumento"> <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> </xs:complexType> <xs:element name="stampaDocumento"> <xs:complexType> <xs:complexContent> <xs:extension base="so:richiestaDocumento"> Tutorial di configurazione e programmazione OpenSPCoop 27 / 74 <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 (/protocolli/spcoop/example/tutorial/asincronoAsimmetrico/configurazionePdD/wsdl/concettuale.wsdl) Specifica l’interfaccia completa dell’accordo di servizio indipendentemente da chi espone i servizi. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/ ←soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/StampaDocumento" targetNamespace="http://openspcoop2.org/example/pdd/server/StampaDocumento"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/StampaDocumento" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="stampaDocumentoResponse"> <wsdl:part name="stampaDocumentoResponsePart" element="spc:presaConsegnaStampa"> </wsdl:part> </wsdl:message> <wsdl:message name="statoDocumentoRequest"> <wsdl:part name="statoDocumentoRequestPart" element="spc:statoDocumento"> </wsdl:part> </wsdl:message> <wsdl:message name="stampaDocumentoRequest"> <wsdl:part name="stampaDocumentoRequestPart" element="spc:stampaDocumento"> </wsdl:part> </wsdl:message> <wsdl:message name="statoDocumentoResponse"> <wsdl:part name="statoDocumentoResponsePart" element="spc:esito"> </wsdl:part> </wsdl:message> <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> ←- Tutorial di configurazione e programmazione OpenSPCoop 28 / 74 </wsdl:operation> </wsdl:portType> </wsdl:definitions> WSDL Logico Erogatore (/protocolli/spcoop/example/tutorial/asincronoAsimmetrico/configurazionePdD/wsdl/logicoErogatore.w Specifica l’interfaccia di servizi e operazioni esposte dal soggetto erogatore. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/ ←soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/StampaDocumento" targetNamespace="http://openspcoop2.org/example/pdd/server/StampaDocumento"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/StampaDocumento" location="definitorio.xsd"> </wsdl:import> <wsdl:message name="stampaDocumentoResponse"> <wsdl:part name="stampaDocumentoResponsePart" element="spc:presaConsegnaStampa"> </wsdl:part> </wsdl:message> <wsdl:message name="statoDocumentoRequest"> <wsdl:part name="statoDocumentoRequestPart" element="spc:statoDocumento"> </wsdl:part> </wsdl:message> <wsdl:message name="stampaDocumentoRequest"> <wsdl:part name="stampaDocumentoRequestPart" element="spc:stampaDocumento"> </wsdl:part> </wsdl:message> <wsdl:message name="statoDocumentoResponse"> <wsdl:part name="statoDocumentoResponsePart" element="spc:esito"> </wsdl:part> </wsdl:message> <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 (/protocolli/spcoop/example/tutorial/asincronoAsimmetrico/configurazionePdD/wsdl/impleme Specifica i dettagli di protocollo e porti di accesso per servizi e operazioni esposti dal soggetto erogatore. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/ ←soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/StampaDocumento" targetNamespace="http://openspcoop2.org/example/pdd/server/StampaDocumento"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/StampaDocumento" location="logicoErogatore.wsdl"> ←- Tutorial di configurazione e programmazione OpenSPCoop 29 / 74 </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"/> </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:8888/tutorial/asincronoAsimmetrico"/> </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. 3.3.2 Configurazione Porta di Dominio Una volta creati i descrittori del servizio, possiamo procedere con la creazione dell’accordo di servizio. 1. Creazione dell’Accordo di Servizio Parte Comune Nome Nome Referente WSDL Definitorio WSDL Concettuale WSDL Logico Erogatore Valore d’esempio AS_StampaDocumento SPC/CentroAnagrafico definitorio.xsd concettuale.wsdl logicoErogatore.wsdl Tabella 19: Dati Accordo di Servizio Parte Comune 2. Aggiungiamo il Servizio all’Accordo: il nome del servizio dovrà avere lo stesso nome del PortType indicato nel WSDL Concettuale. Nome Nome Profilo Valore d’esempio StampaDocumento asincronoAsimmetrico Tabella 20: Dati Servizio dell’Accordo Tutorial di configurazione e programmazione OpenSPCoop Nome Nome Nome 30 / 74 Valore d’esempio Stampa Stato Tabella 21: Dati delle azioni del servizio 3. Specifichiamo le azioni del Servizio: le azioni del Servizio corrispondono alle Operation specificate nel WSDL 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 Applicativo con i dati riportati in Tabella 22: Nome Nome Soggetto Credenziale d’accesso Modalità fault Valore d’esempio StampaDocumento_SA CentroAnagrafico nessuna soap Tabella 22: Dati Servizio Applicativo 5. Impostare i parametri di invocazione del Servizio Applicativo con i valori riportati in Tabella 23. Questi dati serviranno alla PdD per la consegna della richiesta al servizio applicativo erogatore. Nome Nome Sbustamento SOAP Sbustamento Informazioni di Protocollo Salvataggio in Message Box Connettore abilitato Url connettore Tipo credenziali d’accesso Valore d’esempio StampaDocumento_SA disabilitato abilitato disabilitato si http://localhost:8888/tutorial/asincronoAsimmetrico nessuna Tabella 23: Dati invocazione Servizio Applicativo 6. Impostare i parametri di invocazione per la Risposta Asincrona per la consegna della richiesta stato (correlata) con i valori riportati in Tabella 24. 7. Aggiungere l’Accordo di Servizio Parte Specifica: 8. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire del servizio: avendo attiva di default l’autenticazione basata sul Registro dobbiamo aggiungere il soggetto SPC/Comune ai fruitori del servizio StampaDocumento Tutorial di configurazione e programmazione OpenSPCoop Nome Nome Sbustamento SOAP Sbustamento Informazioni di Protocollo Salvataggio in Message Box Connettore abilitato Url connettore Tipo credenziali d’accesso 31 / 74 Valore d’esempio StampaDocumento_SA disabilitato abilitato disabilitato si http://localhost:8888/tutorial/asincronoAsimmetrico nessuna Tabella 24: Dati invocazione Risposta Asincrona Nome Soggetto Accordo Servizio Parte Comune Servizio Servizio Applicativo Erogatore WSDL Implementativo Erogatore Valore d’esempio SPC/CentroAnagrafico AS_StampaDocumento StampaDocumento StampaDocumento_SA implementazioneErogatore.wsdl Tabella 25: Dati Accordo di Servizio Parte Specifica 9. Inserire il servizio applicativo tra quelli autorizzati 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 SPC/Comune, nella colonna Servizi Applicativi Autorizzati 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 Nota L’operazione descritta in questo passaggio, creerà automaticamente un’associazione tra il servizio applicativo e la porta delegata creata automaticamente al passo precedente. 3.3.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 del messaggio ritornato dalla richiesta. In CXF un modo per reperire l’id del messaggio dall’header X-OpenSPCoop2-IdMessaggio 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)); Tutorial di configurazione e programmazione OpenSPCoop 32 / 74 riferimento = headers.get("X-OpenSPCoop2-IdMessaggio").get(0); } public void handleFault(Message messageParam) { } } a questo punto non resta che aggiungere questo parametro nella successiva risposta con nome X-OpenSPCoop2-RiferimentoMessaggio inserendolo ad esempio nella url di invocazione. 3.3.4 Esecuzione e Verifica La visione d’insieme dell’intero flusso di invocazione è mostrata nella figura seguente, tenendo presente però che, nel caso del tu- torial, la PdD è unica per entrambi i soggetti per semplificare le configurazioni. • Inizialmente il client invoca l’azione Stampa (Messaggio 1 in figura). • Dopo aver ricevuto la risposta (Messaggio 6 in figura), il servizio applicativo preleva il valore X-OpenSPCoop2-IdMessaggio, in questo caso con valore Comune_ComuneSPCoopIT_0000135_2009-11-18_18:16 per utilizzarlo come id di correlazione per le richieste successive. Quindi eseguirà un ciclo per verificare la disponibilità della risposta e quindi riceverla (Messaggio 7 in figura). • Se la risposta non è ancora disponibile, il servizio applicativo riceve in risposta un errore (Messaggio 12 in figura). • Quando la risposta sarà disponibile verrà restituita al fruitore (Messaggio 12 in figura): Per l’esecuzione delle applicazioni di esempio si può utilizzare l’ambiente presente nella distribuzione di openspcoop2 al percorso: protocolli/spcoop/example/tutorial/asincronoAsimmetrico eseguendo i seguenti passi: • Configurare l’applicazione client editando il file Client.properties. Ecco un esempio di possibili valori di configurazione: invocazioneTramitePdD=true # Invocazione diretta del servizio #endpoint=http://localhost:8888/tutorial/asincronoAsimmetrico # Invocazione tramite PdD portaDiDominio=http://localhost:8080/openspcoop2/spcoop/PD/ portaDelegata.stampa=SPCComune/SPCCentroAnagrafico/SPCStampaDocumento/Stampa portaDelegata.stato=SPCComune/SPCCentroAnagrafico/SPCStampaDocumento/Stato informazioniIntegrazione.identificativoEGov=X-OpenSPCoop2-IdMessaggio informazioniIntegrazione.riferimentoAsincrono=OpenSPCoop2RiferimentoMessaggio # Credenziali http basic username=Comune_SA password=123456 Tutorial di configurazione e programmazione OpenSPCoop 33 / 74 • Configurare l’applicazione server editando il file Server.properties. In questo caso si tratterà di impostare semplicemente l’endpoint del servizio esposto: endpoint=http://localhost:8888/tutorial/asincronoAsimmetrico • Avviare il Server tramite il comando ant run_server. L’output ottenuto sarà: [root@ws5 asincronoAsimmetrico]# ant run_server Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/spcoop/example/tutorial/ ←asincronoAsimmetrico/build.xml _run_server_spcoop_tutorial_asincronoAsimmetrico: [java] Starting Server [java] Jul 12, 2013 7:03:36 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←StampaDocumento}StampaDocumentoService from WSDL: file:configurazionePdD/wsdl/ ←implementazioneErogatore.wsdl [java] Jul 12, 2013 7:03:37 PM org.apache.cxf.endpoint.ServerImpl initDestination [java] INFO: Setting the server’s publish address to be http://localhost:8888/ ←tutorial/asincronoAsimmetrico [java] 2013-07-12 19:03:37.918:INFO:oejs.Server:jetty-8.1.7.v20120910 [java] Server ready... [java] 2013-07-12 19:03:38.117:INFO:oejs.AbstractConnector:Started ←SelectChannelConnector@localhost:8888 • Avviare il Client tramite il comando ant run_client. L’output ottenuto sarà: [root@ws5 asincronoAsimmetrico]# ant run_client Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/spcoop/example/tutorial/ ←asincronoAsimmetrico/build.xml _run_client_spcoop_tutorial_asincronoAsimmetrico: [java] Jul 12, 2013 7:04:07 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←StampaDocumento}StampaDocumentoService from WSDL: file:configurazionePdD/wsdl/ ←implementazioneErogatore.wsdl [java] Richiedo stampa della carta d’Identita per il cf : DDDFFF22G22G222G [java] Stampa in corso con id = -8993704765638447899 [java] Data stimata di completamento = 2013-07-12+02:00 Contestualmente l’output della console su cui è stato avviato il server mostra il seguente testo: [java] Richiesta stampa di CartaIdentita per cf = DDDFFF22G22G222G A questo punto il client effettua un loop fino a quando il server gli restituisce la risposta asincrona e quindi l’output mostrato è: [java] Richiedo stato di stampa per documento con id Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 [java] Stampa del documento Incompleto [java] Richiedo stato di stampa per documento con id Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 [java] Stampa del documento Incompleto [java] Richiedo stato di stampa per documento con id Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 [java] Stampa del documento Incompleto [java] Richiedo stato di stampa per documento con id Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 [java] Stampa del documento Completato Al quale corrisponde sul server il seguente output: = -8993704765638447899 ------- ←- = -8993704765638447899 ------- ←- = -8993704765638447899 ------- ←- = -8993704765638447899 ------- ←- Tutorial di configurazione e programmazione OpenSPCoop [java] [java] [java] [java] Richiesto Richiesto Richiesto Richiesto stato stato stato stato documento documento documento documento n n n n 34 / 74 -8993704765638447899 -8993704765638447899 -8993704765638447899 -8993704765638447899 Per verificare il corretto funzionamento si possono consultare i messaggi diagnostici presenti nella directory configurata in openspcoop2 ed in particolare il file openspcoop2.log: <spcoop> 001003 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:09.176> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [Comune_SA] ) ←Comune_SA verso la porta delegata SPCComune/SPCCentroAnagrafico/SPCStampaDocumento <spcoop> 003006 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:09.464> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000011_2013 ←-07-12_19:04] in corso (location: http://localhost:8080/openspcoop2/PA) ... <spcoop> 004001 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:09.506> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Ricevuto messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000011_2013 ←-07-12_19:04] inviata dalla parte mittente [SPC/Comune] <spcoop> 004003 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:09.521> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stampa] ... <spcoop> 004004 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:09.523> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stampa]: autorizzato (client-auth disabilitato nella porta di ←dominio PddOpenSPCoop) <spcoop> 005012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico Sbustamento <2013-07-12T19 ←:04:09.545> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Ricevuta Busta [Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04] con filtro duplicati attivo ←nel profilo di trasmissione associato: effettuato salvataggio nell’History delle buste ←ricevute <spcoop> 007011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:09.587> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stampa Tutorial di configurazione e programmazione OpenSPCoop 35 / 74 Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000011_2013 ←-07-12_19:04] in corso (location: http://localhost:8888/tutorial/asincronoAsimmetrico) ... ←- <spcoop> 007012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:10.112> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stampa Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04], generato dal ←mittente [SPC/Comune], consegnato al servizio applicativo [StampaDocumento_SA] mediante ←connettore [http] (location: http://localhost:8888/tutorial/asincronoAsimmetrico) con ←codice di trasporto: 200 <spcoop> 004006 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:10.134> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Generato messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000012_2013-07-12_19:04] in consegna verso la ←parte mittente [SPC/Comune] <spcoop> 004011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:10.197> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 <spcoop> 003007 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:10.202> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000011_2013-07-12_19 ←:04] inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( ←location: http://localhost:8080/openspcoop2/PA) con codice di trasporto: 200 <spcoop> 003009 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:10.215> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Ricevuto messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000012_2013-07-12_19:04] inviata dalla parte mittente [SPC/CentroAnagrafico] <spcoop> 006011 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:10.221> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Ricevuta Busta [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000012_2013-07-12_19:04] con ←filtro duplicati attivo nel profilo di trasmissione associato: effettuato salvataggio ←nell’History delle buste ricevute <spcoop> 006006 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:10.223> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Validazione ricevuta di una richiesta asincrona asimmetrica ←- Tutorial di configurazione e programmazione OpenSPCoop 36 / 74 <spcoop> 001004 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:10.253> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Contenuto applicativo di una ricevuta di una richiesta asincrona asimmetrica in consegna al ←servizio applicativo <spcoop> 001005 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:10.256> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Risposta applicativa consegnata al servizio applicativo con codice di trasporto: 200 <spcoop> 001003 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:10.375> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [Comune_SA] ) ←Comune_SA verso la porta delegata SPCComune/SPCCentroAnagrafico/SPCStampaDocumento <spcoop> 002016 ComuneSPCoopIT.SPC/Comune Imbustamento <2013-07-12T19:04:10.378> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Generazione richiesta stato asincrona asimmetrica correlata ad una richiesta con id [ ←Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04] <spcoop> 003006 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:10.413> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000013_2013 ←-07-12_19:04] in corso (location: http://localhost:8080/openspcoop2/PA) ... <spcoop> 004001 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:10.496> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuto messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000013_2013 ←-07-12_19:04] inviata dalla parte mittente [SPC/Comune] <spcoop> 004003 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:10.500> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stato] ... <spcoop> 004004 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:10.502> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stato]: autorizzato (client-auth disabilitato nella porta di ←dominio PddOpenSPCoop) Tutorial di configurazione e programmazione OpenSPCoop 37 / 74 <spcoop> 005012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico Sbustamento <2013-07-12T19 ←:04:10.505> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta Busta [Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04] con filtro duplicati attivo ←nel profilo di trasmissione associato: effettuato salvataggio nell’History delle buste ←ricevute <spcoop> 007011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:10.547> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stato Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000013_2013 ←-07-12_19:04] in corso (location: http://localhost:8888/tutorial/asincronoAsimmetrico) ←... <spcoop> 007012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:10.568> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stato Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04], generato dal ←mittente [SPC/Comune], consegnato al servizio applicativo [StampaDocumento_SA] mediante ←connettore [http] (location: http://localhost:8888/tutorial/asincronoAsimmetrico) con ←codice di trasporto: 200 <spcoop> 004006 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:10.576> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Generato messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000014_2013-07-12_19:04] in consegna verso la ←parte mittente [SPC/Comune] <spcoop> 004011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:10.596> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 <spcoop> 003007 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:10.602> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000013_2013-07-12_19 ←:04] inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( ←location: http://localhost:8080/openspcoop2/PA) con codice di trasporto: 200 <spcoop> 003009 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:10.614> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuto messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000014_2013-07-12_19:04] inviata dalla parte mittente [SPC/CentroAnagrafico] ←- Tutorial di configurazione e programmazione OpenSPCoop 38 / 74 <spcoop> 006011 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:10.620> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta Busta [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000014_2013-07-12_19:04] con ←filtro duplicati attivo nel profilo di trasmissione associato: effettuato salvataggio ←nell’History delle buste ricevute <spcoop> 006006 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:10.622> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Validazione ricevuta di una risposta asincrona asimmetrica contenente l’esito della ←richiesta stato <spcoop> 001004 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:10.628> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Contenuto applicativo di una ricevuta di una risposta asincrona asimmetrica in consegna al ←servizio applicativo <spcoop> 001005 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:10.631> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000013_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Risposta applicativa consegnata al servizio applicativo con codice di trasporto: 200 <spcoop> 001003 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:11.646> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [Comune_SA] ) ←Comune_SA verso la porta delegata SPCComune/SPCCentroAnagrafico/SPCStampaDocumento <spcoop> 002016 ComuneSPCoopIT.SPC/Comune Imbustamento <2013-07-12T19:04:11.648> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Generazione richiesta stato asincrona asimmetrica correlata ad una richiesta con id [ ←Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04] <spcoop> 003006 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:11.689> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000015_2013 ←-07-12_19:04] in corso (location: http://localhost:8080/openspcoop2/PA) ... <spcoop> 004001 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:11.728> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuto messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000015_2013 ←-07-12_19:04] inviata dalla parte mittente [SPC/Comune] Tutorial di configurazione e programmazione OpenSPCoop 39 / 74 <spcoop> 004003 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:11.732> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stato] ... <spcoop> 004004 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:11.744> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stato]: autorizzato (client-auth disabilitato nella porta di ←dominio PddOpenSPCoop) <spcoop> 005012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico Sbustamento <2013-07-12T19 ←:04:11.748> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta Busta [Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04] con filtro duplicati attivo ←nel profilo di trasmissione associato: effettuato salvataggio nell’History delle buste ←ricevute <spcoop> 007011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:11.769> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stato Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000015_2013 ←-07-12_19:04] in corso (location: http://localhost:8888/tutorial/asincronoAsimmetrico) ←... <spcoop> 007012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:11.783> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stato Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04], generato dal ←mittente [SPC/Comune], consegnato al servizio applicativo [StampaDocumento_SA] mediante ←connettore [http] (location: http://localhost:8888/tutorial/asincronoAsimmetrico) con ←codice di trasporto: 200 <spcoop> 004006 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:11.921> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Generato messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000016_2013-07-12_19:04] in consegna verso la ←parte mittente [SPC/Comune] <spcoop> 004011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:11.937> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 <spcoop> 003007 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:11.941> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←- Tutorial di configurazione e programmazione OpenSPCoop 40 / 74 CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000015_2013-07-12_19 ←:04] inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( ←location: http://localhost:8080/openspcoop2/PA) con codice di trasporto: 200 <spcoop> 003009 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:11.954> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuto messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000016_2013-07-12_19:04] inviata dalla parte mittente [SPC/CentroAnagrafico] ←- <spcoop> 006011 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:11.959> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta Busta [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000016_2013-07-12_19:04] con ←filtro duplicati attivo nel profilo di trasmissione associato: effettuato salvataggio ←nell’History delle buste ricevute <spcoop> 006006 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:11.961> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Validazione ricevuta di una risposta asincrona asimmetrica contenente l’esito della ←richiesta stato <spcoop> 001004 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:11.977> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Contenuto applicativo di una ricevuta di una risposta asincrona asimmetrica in consegna al ←servizio applicativo <spcoop> 001005 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:11.980> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000015_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Risposta applicativa consegnata al servizio applicativo con codice di trasporto: 200 <spcoop> 001003 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:12.998> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [Comune_SA] ) ←Comune_SA verso la porta delegata SPCComune/SPCCentroAnagrafico/SPCStampaDocumento <spcoop> 002016 ComuneSPCoopIT.SPC/Comune Imbustamento <2013-07-12T19:04:13.001> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Generazione richiesta stato asincrona asimmetrica correlata ad una richiesta con id [ ←Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04] Tutorial di configurazione e programmazione OpenSPCoop 41 / 74 <spcoop> 003006 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:13.046> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000017_2013 ←-07-12_19:04] in corso (location: http://localhost:8080/openspcoop2/PA) ... <spcoop> 004001 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:13.070> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuto messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000017_2013 ←-07-12_19:04] inviata dalla parte mittente [SPC/Comune] <spcoop> 004003 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:13.074> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stato] ... <spcoop> 004004 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:13.076> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stato]: autorizzato (client-auth disabilitato nella porta di ←dominio PddOpenSPCoop) <spcoop> 005012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico Sbustamento <2013-07-12T19 ←:04:13.079> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta Busta [Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04] con filtro duplicati attivo ←nel profilo di trasmissione associato: effettuato salvataggio nell’History delle buste ←ricevute <spcoop> 007011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:13.094> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stato Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000017_2013 ←-07-12_19:04] in corso (location: http://localhost:8888/tutorial/asincronoAsimmetrico) ←... <spcoop> 007012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:13.107> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stato Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04], generato dal ←mittente [SPC/Comune], consegnato al servizio applicativo [StampaDocumento_SA] mediante ←connettore [http] (location: http://localhost:8888/tutorial/asincronoAsimmetrico) con ←codice di trasporto: 200 <spcoop> 004006 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:13.116> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 FR:SPC/ ←- Tutorial di configurazione e programmazione OpenSPCoop 42 / 74 Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Generato messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000018_2013-07-12_19:04] in consegna verso la ←parte mittente [SPC/Comune] <spcoop> 003007 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:13.133> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000017_2013-07-12_19 ←:04] inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( ←location: http://localhost:8080/openspcoop2/PA) con codice di trasporto: 200 <spcoop> 004011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:13.128> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 <spcoop> 003009 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:13.145> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuto messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000018_2013-07-12_19:04] inviata dalla parte mittente [SPC/CentroAnagrafico] ←- <spcoop> 006011 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:13.172> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta Busta [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000018_2013-07-12_19:04] con ←filtro duplicati attivo nel profilo di trasmissione associato: effettuato salvataggio ←nell’History delle buste ricevute <spcoop> 006006 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:13.174> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Validazione ricevuta di una risposta asincrona asimmetrica contenente l’esito della ←richiesta stato <spcoop> 001004 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:13.193> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Contenuto applicativo di una ricevuta di una risposta asincrona asimmetrica in consegna al ←servizio applicativo <spcoop> 001005 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:13.196> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000017_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Risposta applicativa consegnata al servizio applicativo con codice di trasporto: 200 Tutorial di configurazione e programmazione OpenSPCoop 43 / 74 <spcoop> 001003 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:14.210> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [Comune_SA] ) ←Comune_SA verso la porta delegata SPCComune/SPCCentroAnagrafico/SPCStampaDocumento <spcoop> 002016 ComuneSPCoopIT.SPC/Comune Imbustamento <2013-07-12T19:04:14.212> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Generazione richiesta stato asincrona asimmetrica correlata ad una richiesta con id [ ←Comune_ComuneSPCoopIT_0000011_2013-07-12_19:04] <spcoop> 003006 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:14.294> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000019_2013 ←-07-12_19:04] in corso (location: http://localhost:8080/openspcoop2/PA) ... <spcoop> 004001 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:14.349> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuto messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000019_2013 ←-07-12_19:04] inviata dalla parte mittente [SPC/Comune] <spcoop> 004003 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:14.352> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stato] ... <spcoop> 004004 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:14.353> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/StampaDocumento:1--Stato]: autorizzato (client-auth disabilitato nella porta di ←dominio PddOpenSPCoop) <spcoop> 005012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico Sbustamento <2013-07-12T19 ←:04:14.423> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta Busta [Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04] con filtro duplicati attivo ←nel profilo di trasmissione associato: effettuato salvataggio nell’History delle buste ←ricevute <spcoop> 007011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:14.444> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stato Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000019_2013 ←-07-12_19:04] in corso (location: http://localhost:8888/tutorial/asincronoAsimmetrico) ←- Tutorial di configurazione e programmazione OpenSPCoop 44 / 74 ... <spcoop> 007012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-12T19:04:14.457> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19 ←:04 SA:StampaDocumento_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←StampaDocumento A:Stato Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04], generato dal ←mittente [SPC/Comune], consegnato al servizio applicativo [StampaDocumento_SA] mediante ←connettore [http] (location: http://localhost:8888/tutorial/asincronoAsimmetrico) con ←codice di trasporto: 200 <spcoop> 004006 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:14.465> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Generato messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000020_2013-07-12_19:04] in consegna verso la ←parte mittente [SPC/Comune] <spcoop> 004011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-12 ←T19:04:14.478> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/StampaDocumento A:Stampa Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 <spcoop> 003007 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:14.483> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000019_2013-07-12_19 ←:04] inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( ←location: http://localhost:8080/openspcoop2/PA) con codice di trasporto: 200 <spcoop> 003009 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-12T19:04:14.494> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuto messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000020_2013-07-12_19:04] inviata dalla parte mittente [SPC/CentroAnagrafico] <spcoop> 006011 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:14.509> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Ricevuta Busta [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000020_2013-07-12_19:04] con ←filtro duplicati attivo nel profilo di trasmissione associato: effettuato salvataggio ←nell’History delle buste ricevute <spcoop> 006006 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-12T19:04:14.511> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD:SPCComune/ ←SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Validazione ricevuta di una risposta asincrona asimmetrica contenente l’esito della ←richiesta stato ←- Tutorial di configurazione e programmazione OpenSPCoop 45 / 74 <spcoop> 001004 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:14.518> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Contenuto applicativo di una ricevuta di una risposta asincrona asimmetrica in consegna al ←servizio applicativo <spcoop> 001005 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-12T19 ←:04:14.520> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000019_2013-07-12_19:04 PD: ←SPCComune/SPCCentroAnagrafico/SPCStampaDocumento SA:Comune_SA FR:SPC/Comune -> ER:SPC/ ←CentroAnagrafico S(v1):SPC/StampaDocumento A:Stato Risposta applicativa consegnata al servizio applicativo con codice di trasporto: 200 3.4 3.4.1 Identifica Soggetto (AsincronoSimmetrico) Descrizione formale dell’Accordo di Servizio: WSDL 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 (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsdl/definitorio.xsd) Contiene le definizioni dei tipi di dato utilizzati per la codifica dei messaggi. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://openspcoop2.org/example/pdd/server/ ←IdentificaSoggetto" xmlns:so="http://openspcoop2.org/example/pdd/server/ ←IdentificaSoggetto"> <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"/> Tutorial di configurazione e programmazione OpenSPCoop 46 / 74 <xs:element name="risultatoResponse" type="xs:string"/> </xs:schema> WSDL Concettuale (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsdl/concettuale.wsdl) Specifica l’interfaccia completa dell’accordo di servizio indipendentemente da chi espone i servizi. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org ←/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" targetNamespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" location="definitorio.xsd"> </wsdl:import> ←- <wsdl:message name="identificaResponse"> <wsdl:part name="identificaResponsePart" element="spc:presaConsegnaIdentifica"> </wsdl:part> </wsdl:message> <wsdl:message name="identificaRequest"> <wsdl:part name="identificaRequestPart" element="spc:identifica"> </wsdl:part> </wsdl:message> <wsdl:message name="risultatoIdentificaRequest"> <wsdl:part name="identificaRequestPart" element="spc:risultato"> </wsdl:part> </wsdl:message> <wsdl:message name="risultatoIdentificaResponse"> <wsdl:part name="risultatoIdentificaResponse" element="spc:risultatoResponse"> </wsdl:part> </wsdl:message> <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: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 Logico Erogatore (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsdl/logicoErogatore.ws Specifica l’interfaccia di servizi e operazioni esposte dal soggetto erogatore. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org ←/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" Tutorial di configurazione e programmazione OpenSPCoop 47 / 74 targetNamespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" location="definitorio.xsd"> </wsdl:import> ←- <wsdl:message name="identificaResponse"> <wsdl:part name="identificaResponsePart" element="spc:presaConsegnaIdentifica"> </wsdl:part> </wsdl:message> <wsdl:message name="identificaRequest"> <wsdl:part name="identificaRequestPart" element="spc:identifica"> </wsdl:part> </wsdl:message> <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 Fruitore (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsdl/logicoFruitore.wsdl) Specifica l’interfaccia di servizi e operazioni esposte dal soggetto fruitore. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org ←/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" targetNamespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" location="definitorio.xsd"> </wsdl:import> ←- <wsdl:message name="risultatoIdentificaRequest"> <wsdl:part name="identificaRequestPart" element="spc:risultato"> </wsdl:part> </wsdl:message> <wsdl:message name="risultatoIdentificaResponse"> <wsdl:part name="risultatoIdentificaResponse" element="spc:risultatoResponse"> </wsdl:part> </wsdl:message> <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 (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsdl/implemen Specifica i dettagli di protocollo e porti di accesso per servizi e operazioni esposti dal soggetto erogatore. Tutorial di configurazione e programmazione OpenSPCoop 48 / 74 <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org ←/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" targetNamespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" 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:8888/tutorial/asincronoSimmetricoRichiesta ←"/> </wsdl:port> </wsdl:service> </wsdl:definitions> WSDL Implementativo Fruitore (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsdl/implementa Specifica i dettagli di protocollo e porti di accesso per servizi e operazioni esposti dal soggetto fruitore. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org ←/wsdl/soap/" xmlns:spc="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" targetNamespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/IdentificaSoggetto" location="logicoFruitore.wsdl"> </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:8889/tutorial/asincronoSimmetricoRisposta"/> Tutorial di configurazione e programmazione OpenSPCoop 49 / 74 </wsdl:port> </wsdl:service> </wsdl:definitions> WSBL Concettuale (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsbl/ConversazioneConcettu Specifica il flusso di invocazione delle operazioni asincrone indipendentemente dal ruolo dei soggetti. <wsbl:ConceptualBehavior xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsbl=" ←http://spcoop.gov.it/sica/wsbl" xsi:schemaLocation="http://spcoop.gov.it/sica/wsbl wsbl. ←xsd"> <name>Esempio di profilo asincrono simmetrico</name> <states> <state-initial name="TransazioneRichiestaAsincronaSimmetrica"/> <state-final name="TransazioneAsincronaSimmetricaTerminata"/> <state name="TransazioneRispostaAsincronaSimmetrica"/> </states> <transitions> <transition name="T1" source="TransazioneRichiestaAsincronaSimmetrica" target=" ←TransazioneRispostaAsincronaSimmetrica"> <activationMode>EXPLICIT</activationMode> <completionMode> <mode>DEFINITIVE</mode> </completionMode> <events> <event name="IdentificaSoggetto_Cerca"/> </events> </transition> <transition name="T2" source="TransazioneRispostaAsincronaSimmetrica" target=" ←TransazioneAsincronaSimmetricaTerminata"> <activationMode>IMPLICIT</activationMode> <completionMode> <mode>EFFECTLESS</mode> </completionMode> <events> <event name="EsitoIdentificazione_Risultato"/> </events> <temporalCondition> <predicate>M-INVOKE</predicate> <boolop>GEQ</boolop> <data>end(T1)+10</data> <description></description> </temporalCondition> </transition> </transitions> </wsbl:ConceptualBehavior> WSBL Logico Erogatore (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsbl/ConversazioneLog Specifica il flusso di invocazione delle operazioni asincrone dal punto di vista del soggetto erogatore. <wsbl:MessageBehavior xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsbl=" ←http://spcoop.gov.it/sica/wsbl" xmlns:spc="http://openspcoop2.org/example/pdd/server/ ←IdentificaSoggetto" xsi:schemaLocation="http://spcoop.gov.it/sica/wsbl wsbl.xsd"> <name>ServizioAsincronoSimmetricoErogatore</name> <states> <state-initial name="TransazioneRichiestaAsincronaSimmetrica"/> <state-final name="TransazioneAsincronaSimmetricaTerminata"/> <state name="invioRicevutaRichiestaAsincrona"/> <state name="TransazioneRispostaAsincronaSimmetrica"/> <state name="ricezioneRicevutaRispostaAsincrona"/> </states> <messages> Tutorial di configurazione e programmazione OpenSPCoop 50 / 74 <message name="spc:identificaRequest" source="TransazioneRichiestaAsincronaSimmetrica" ←target="invioRicevutaRichiestaAsincrona" type="RECEIVE"/> <message name="spc:identificaResponse" source="invioRicevutaRichiestaAsincrona" target ←="TransazioneRispostaAsincronaSimmetrica" type="SEND"/> <message name="spc:risultatoIdentificaRequest" source=" ←TransazioneRispostaAsincronaSimmetrica" target="ricezioneRicevutaRispostaAsincrona" ←type="SEND"/> <message name="spc:risultatoIdentificaResponse" source=" ←ricezioneRicevutaRispostaAsincrona" target="TransazioneAsincronaSimmetricaTerminata" ←type="RECEIVE"/> </messages> </wsbl:MessageBehavior> WSBL Logico Fruitore (/protocolli/spcoop/example/tutorial/asincronoSimmetrico/configurazionePdD/wsbl/ConversazioneLogic Specifica il flusso di invocazione delle operazioni asincrone dal punto di vista del soggetto fruitore. <wsbl:MessageBehavior xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsbl=" ←http://spcoop.gov.it/sica/wsbl" xmlns:spc="http://openspcoop2.org/example/pdd/server/ ←IdentificaSoggetto" xsi:schemaLocation="http://spcoop.gov.it/sica/wsbl wsbl.xsd"> <name>ServizioAsincronoSimmetricoFruitore</name> <states> <state-initial name="TransazioneRichiestaAsincronaSimmetrica"/> <state-final name="TransazioneAsincronaSimmetricaTerminata"/> <state name="ricezioneRicevutaRichiestaAsincrona"/> <state name="TransazioneRispostaAsincronaSimmetrica"/> <state name="invioRicevutaRispostaAsincrona"/> </states> <messages> <message name="spc:identificaRequest" source="TransazioneRichiestaAsincronaSimmetrica" ←target="ricezioneRicevutaRichiestaAsincrona" type="SEND"/> <message name="spc:identificaResponse" source="ricezioneRicevutaRichiestaAsincrona" ←target="TransazioneRispostaAsincronaSimmetrica" type="RECEIVE"/> <message name="spc:risultatoIdentificaRequest" source=" ←TransazioneRispostaAsincronaSimmetrica" target="invioRicevutaRispostaAsincrona" type ←="RECEIVE"/> <message name="spc:risultatoIdentificaResponse" source="invioRicevutaRispostaAsincrona" ←target="TransazioneAsincronaSimmetricaTerminata" type="SEND"/> </messages> </wsbl:MessageBehavior> 3.4.2 Configurazione Porta di Dominio Una volta in possesso dei descrittori del servizio e delle conversazioni, possiamo procedere con la configurazione della porta di dominio. 1. Creiamo i Servizi Applicativi erogatore e fruitore con i valori riportati in Tabella 26 e Tabella 27. Nome Nome Soggetto Credenziale d’accesso Utente Password Modalità fault Valore d’esempio IdentificaSoggetto_SA CentroAnagrafico basic IdentificaSoggetto_SA 123456 soap Tabella 26: Dati Servizio Applicativo Erogatore Tutorial di configurazione e programmazione OpenSPCoop Nome Nome Soggetto Credenziale d’accesso Utente Password Modalità fault 51 / 74 Valore d’esempio IdentificaSoggettoComune_SA Comune basic IdentificaSoggettoComune_SA 123456 soap Tabella 27: Dati Servizio Applicativo Fruitore Nome Nome Sbustamento SOAP Sbustamento Informazioni di Protocollo Salva in Message Box Connettore abilitato Url connettore Tipo credenziali d’accesso Valore d’esempio IdentificaSoggetto_SA disabilitato abilitato disabilitato si http://localhost:8888/tutorial/asincronoSimmetricoRichiesta nessuna Tabella 28: Dati invocazione Servizio Applicativo erogatore 2. Impostare i parametri di invocazione del Servizio Applicativo con i valori riportati in Tabella 28. Impostare la Risposta Asincrona per il Servizio Applicativo fruitore con i valori riportati in Tabella 29. Nome Nome Sbustamento SOAP Sbustamento Informazioni di Protocollo Salva in Message Box Connettore abilitato Url connettore Tipo credenziali d’accesso Valore d’esempio IdentificaSoggettoComune_SA disabilitato abilitato disabilitato si http://localhost:8889/tutorial/asincronoSimmetricoRisposta nessuna Tabella 29: Dati risposta asincrona Servizio Applicativo fruitore 3. Creazione dell’Accordo di Servizio Parte Comune Tutorial di configurazione e programmazione OpenSPCoop Nome Nome Referente WSDL Definitorio WSDL Concettuale WSDL Logico Fruitore WSDL Logico Erogatore WSBL Concettuale WSBL Logico Erogatore WSBL Logico Fruitore 52 / 74 Valore d’esempio AS_IdentificaSoggetto SPC/CentroAnagrafico definitorio.xsd concettuale.wsdl logicoFruitore.wsdl logicoErogatore.wsdl ConversazioneConcettuale.wsbl ConversazioneLogicaLatoErogatore.wsbl ConversazioneLogicaLatoFruitore.wsbl Tabella 30: Dati Accordo di Servizio Parte Comune 4. Aggiungiamo i due servizi all’accordo di Servizio Parte Comune: 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 31 e Tabella 32 Nome Nome Azione Profilo Valore d’esempio IdentificaSoggetto Cerca asincronoSimmetrico Tabella 31: Dati Servizio Asincrono Simmetrico nell’accordo di servizio Dopo aver inserito i due servizi e le relative azioni, l’interfaccia mostra la seguente schermata Tutorial di configurazione e programmazione OpenSPCoop Nome Nome Azione Profilo Correlata al servizio Correlata all’azione 53 / 74 Valore d’esempio EsitoIdentificazione Risultato asincronoSimmetrico IdentificaSoggetto Cerca Tabella 32: Dati Servizio Asincrono Simmetrico Correlato nell’accordo di servizio L’azione Risultato deve essere creata specificando il servizio IdentificaSoggetto e l’azione Cerca come informazioni di cor- relazione 5. Aggiungere l’Accordo di Servizio Parte Specifica e il suo correlato erogato dal soggetto fruitore con i dati riportati in Tabella 33 e in Tabella 34: Nome Soggetto Accordo Servizio Servizio Servizio Applicativo Erogatore WSDL Implementativo Erogatore Valore d’esempio SPC/CentroAnagrafico AS_IdentificaSoggetto IdentificaSoggetto IdentificaSoggetto_SA implementazioneErogatore.wsdl Tabella 33: Dati Accordo di Servizio Parte Specifica Nome Soggetto Accordo Servizio Servizio Servizio Applicativo Erogatore WSDL Implementativo Fruitore Valore d’esempio SPC/Comune AS_IdentificaSoggetto EsitoIdentificazione IdentificaSoggettoComune_SA implementazioneFruitore.wsdl Tabella 34: Dati Accordo di Servizio Parte Specifica correlato 6. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire del servizio: avendo attiva di default l’autorizzazione basata sul Registro dobbiamo aggiungere il soggetto SPC/Comune ai fruitori del servizio IdentificaSoggetto e il soggetto CentroAnagrafico ai fruitori del servizio EsitoIdentificazione. 7. Inserire tra gli autorizzati i servizi applicativi creati ai primi due passi. Questo passaggio è essenziale ai fini dell’autorizzazione da parte del servizio applicativo in fase di invocazione della porta delegata. (a) Dall’elenco dei fruitori del servizio IdentificaSoggetto, in corrispondenza del soggetto SPC/Comune, nella colonna Servizi Applicativi Autorizzati selezionare visualizza, quindi il pulsante Aggiungi. (b) Compilare il form selezionando il servizio applicativo IdentificaSoggettoComune_SA dalla lista a discesa e confermando con il pulsante Invia Tutorial di configurazione e programmazione OpenSPCoop 54 / 74 (c) Dall’elenco dei fruitori del servizio EsitoIdentificazione, in corrispondenza del soggetto CentroAnagrafico, nella colonna Servizi Applicativi Autorizzati selezionare visualizza, quindi il pulsante Aggiungi (d) Compilare il form selezionando il servizio applicativo IdentificaSoggetto_SA dalla lista a discesa e confermando con il pulsante Invia. Nota L’operazione descritta in questo passaggio, creerà automaticamente un’associazione tra i servizi applicativi e le porte delegate create automaticamente al passo precedente. 3.4.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’id del messaggio della richiesta. 3.4.4 Esecuzione e Verifica Seguendo le istruzioni fornite con i sorgenti per la configurazione, compilazione ed esecuzione degli esempi, avviamo il test per il servizio IdentificaSoggetto. In questo esempio ciascuna delle due parti ha una componente client e una server. Si vedrà quindi il client del fruitore inviare la richiesta, ricevendo conferma e successivamente il client dell’erogatore inviare la risposta asincrona. La visione d’insieme dell’intero flusso di invocazione è mostrata nella figura seguente, tenendo presente però che, nel caso del tu- torial, la PdD è unica per entrambi i soggetti per semplificare le configurazioni. • Inizialmente il client del fruitore invoca l’azione Cerca (Messaggio 1 in figura) • La Porta di Dominio consegna la richiesta al servizio applicativo erogatore (Messaggio 3 in figura) • Il servizio applicativo erogatore invoca il servizio correlato per l’invio della risposta (Messaggio 7 in figura) • La Porta di Dominio consegna la risposta asincrona al servizio applicativo fruitore (Messaggio 9 in figura). Per l’esecuzione delle applicazioni di esempio si può utilizzare l’ambiente presente nella distribuzione di openspcoop2 al percorso: protocolli/spcoop/example/tutorial/asincronoSimmetrico eseguendo i seguenti passi: • Configurare l’applicazione client editando il file Client.properties. Ecco un esempio di possibili valori di configurazione: invocazioneTramitePdD=true # Invocazione diretta del servizio endpoint.cerca=http://localhost:8888/tutorial/asincronoSimmetricoRichiesta endpoint.risultato=http://localhost:8889/tutorial/asincronoSimmetricoRisposta # Invocazione tramite PdD portaDiDominio=http://localhost:8080/openspcoop2/spcoop/PD/ portaDelegata.cerca=SPCComune/SPCCentroAnagrafico/SPCIdentificaSoggetto/Cerca Tutorial di configurazione e programmazione OpenSPCoop 55 / 74 portaDelegata.risultato=SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione/Risultato informazioniIntegrazione.riferimentoAsincrono=OpenSPCoop2RiferimentoMessaggio # Credenziali http basic per operazione ’cerca’ username.cerca=IdentificaSoggettoComune_SA password.cerca=123456 # Credenziali http basic per operazione ’risultato’ username.risultato=IdentificaSoggetto_SA password.risultato=123456 Come si può notare vi sono 2 porte delegate. Una per il soggetto Comune con la quale viene inviata la richiesta, e l’altra per il soggetto CentroAnagrafico per l’invio della risposta asincrona. Le credenziali fanno quindi riferimento ai servizi applicativi fruitori dei due soggetti. • Configurare l’applicazione server editando il file Server.properties: # Servizio IdentificaSoggetto endpoint.richiesta=http://localhost:8888/tutorial/asincronoSimmetricoRichiesta # Servizio Risposta endpoint.risposta=http://localhost:8889/tutorial/asincronoSimmetricoRisposta # Informazioni di integrazione informazioniIntegrazione.identificativoEGov=X-OpenSPCoop2-IdMessaggio Le proprietà da configurare per i server riguardano gli enpoint dei servizi esposti per la richiesta e la risposta asincrona. Vi è inoltre la proprietà per indicare la modalità di recupero dell’id di correlazione asincrona. • Avviare il Server tramite il comando ant run_server. L’output ottenuto sarà: [root@ws5 asincronoSimmetrico]# ant run_server Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/spcoop/example/tutorial/ ←asincronoSimmetrico/build.xml _run_server_spcoop_tutorial_asincronoSimmetrico: [java] Starting Server [java] Jul 17, 2013 12:18:45 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←IdentificaSoggetto}IdentificaSoggettoService from WSDL: file:configurazionePdD/ ←wsdl/implementazioneErogatore.wsdl [java] Jul 17, 2013 12:18:46 PM org.apache.cxf.endpoint.ServerImpl initDestination [java] INFO: Setting the server’s publish address to be http://localhost:8888/ ←tutorial/asincronoSimmetricoRichiesta [java] 2013-07-17 12:18:46.953:INFO:oejs.Server:jetty-8.1.7.v20120910 [java] Server ready... [java] 2013-07-17 12:18:47.495:INFO:oejs.AbstractConnector:Started ←SelectChannelConnector@localhost:8888 • Avviare il Client tramite il comando ant run_client. L’output ottenuto sarà: [root@ws5 asincronoSimmetrico]# ant run_client Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/spcoop/example/tutorial/ ←asincronoSimmetrico/build.xml _run_client_spcoop_tutorial_asincronoSimmetrico: [java] Jul 17, 2013 12:31:36 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←IdentificaSoggetto}IdentificaSoggettoService from WSDL: file:configurazionePdD/ ←wsdl/implementazioneErogatore.wsdl Tutorial di configurazione e programmazione OpenSPCoop 56 / 74 [java] Starting Server [java] Jul 17, 2013 12:31:36 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←IdentificaSoggetto}EsitoIdentificazioneService from WSDL: file:configurazionePdD/ ←wsdl/implementazioneFruitore.wsdl [java] Jul 17, 2013 12:31:36 PM org.apache.cxf.endpoint.ServerImpl initDestination [java] INFO: Setting the server’s publish address to be http://localhost:8889/ ←tutorial/asincronoSimmetricoRisposta [java] 2013-07-17 12:31:36.964:INFO:oejs.Server:jetty-8.1.7.v20120910 [java] Server ready... [java] 2013-07-17 12:31:37.142:INFO:oejs.AbstractConnector:Started ←SelectChannelConnector@localhost:8889 [java] Invoking cerca... Come si può notare in questo caso l’esecuzione del client comporta anche l’avvio del server per la ricezione della risposta asincrona da parte del Comune. L’invio della richiesta comporta sulla console del server il seguente output: [java] Ricercato soggetto con documento CartaIdentita n AABBCCDDEE Il server a questo punto invia al client la ricevuta della presa in carico. Quindi appare sull’output del client: [java] Codice ricerca =-4157445105885379246 • Al passo successivo il server invoca il servizio correlato per inviare la risposta asincrona. Si nota il seguente output sulla console del server: [java] Invoking risultato... [java] Jul 17, 2013 12:31:48 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←IdentificaSoggetto}EsitoIdentificazioneService from WSDL: file:configurazionePdD/ ←wsdl/implementazioneFruitore.wsdl Questa operazione corrisponde sul client alla ricezione della risposta e quindi al seguente output: [java] [java] [java] [java] [java] [java] ========== Ricevuti dati del Soggetto ============== == Nuovo nome: Mario == Nuovo cognome: Rossi == Nuovo codice fiscale: DDDFFF22G22G222G == Nuova data di nascita: 1980-01-01Z == Nuovo stato civile: Celibe Il client invia la ricevuta al server, che chiude la connessione, e si vede il seguente output: [java] risultato.result=ok Controllando il file openspcoop2.log possiamo verificare il corretto funzionamento della PdD: <spcoop> 001003 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-17T12 ←:31:40.728> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 PD: ←SPCComune/SPCCentroAnagrafico/SPCIdentificaSoggetto SA:IdentificaSoggettoComune_SA FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [ ←IdentificaSoggettoComune_SA] ) IdentificaSoggettoComune_SA verso la porta delegata ←SPCComune/SPCCentroAnagrafico/SPCIdentificaSoggetto <spcoop> 003006 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-17T12:31:41.235> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 PD:SPCComune/ ←SPCCentroAnagrafico/SPCIdentificaSoggetto SA:IdentificaSoggettoComune_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca ←- Tutorial di configurazione e programmazione OpenSPCoop 57 / 74 Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000009_2013 ←-07-17_12:31] in corso (location: http://localhost:8080/openspcoop2/spcoop/PA) ... <spcoop> 004001 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-17 ←T12:31:41.957> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Ricevuto messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000009_2013 ←-07-17_12:31] inviata dalla parte mittente [SPC/Comune] <spcoop> 004003 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-17 ←T12:31:42.305> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/IdentificaSoggetto:1--Cerca] ... <spcoop> 004004 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-17 ←T12:31:42.337> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Controllo Autorizzazione[registro] messaggio con identificativo [ ←Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31] FR[SPC/Comune]->ER[SPC/CentroAnagrafico ←--SPC/IdentificaSoggetto:1--Cerca]: autorizzato (client-auth disabilitato nella porta di ←dominio PddOpenSPCoop) <spcoop> 005012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico Sbustamento <2013-07-17T12 ←:31:42.420> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Ricevuta Busta [Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31] con filtro duplicati attivo ←nel profilo di trasmissione associato: effettuato salvataggio nell’History delle buste ←ricevute <spcoop> 007011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-17T12:31:42.612> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12 ←:31 SA:IdentificaSoggetto_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←IdentificaSoggetto A:Cerca Invio Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000009_2013 ←-07-17_12:31] in corso (location: http://localhost:8888/tutorial/ ←asincronoSimmetricoRichiesta) ... <spcoop> 007012 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ConsegnaContenutiApplicativi ←<2013-07-17T12:31:43.635> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12 ←:31 SA:IdentificaSoggetto_SA FR:SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/ ←IdentificaSoggetto A:Cerca Messaggio applicativo con ID [Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31], generato dal ←mittente [SPC/Comune], consegnato al servizio applicativo [IdentificaSoggetto_SA] ←mediante connettore [http] (location: http://localhost:8888/tutorial/ ←asincronoSimmetricoRichiesta) con codice di trasporto: 200 <spcoop> 004006 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-17 ←T12:31:43.735> (infoProtocol) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 FR:SPC/ ←Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Generato messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000010_2013-07-17_12:31] in consegna verso la ←parte mittente [SPC/Comune] Tutorial di configurazione e programmazione OpenSPCoop 58 / 74 <spcoop> 004011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico RicezioneBuste_PA <2013-07-17 ←T12:31:43.770> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 <spcoop> 003007 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-17T12:31:44.006> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 PD:SPCComune/ ←SPCCentroAnagrafico/SPCIdentificaSoggetto SA:IdentificaSoggettoComune_SA FR:SPC/Comune ←-> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000009_2013-07-17_12 ←:31] inviato alla parte destinataria [SPC/CentroAnagrafico] mediante connettore [http] ( ←location: http://localhost:8080/openspcoop2/spcoop/PA) con codice di trasporto: 200 <spcoop> 003009 ComuneSPCoopIT.SPC/Comune InoltroBuste <2013-07-17T12:31:44.413> ( ←infoProtocol) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 PD:SPCComune/ ←SPCCentroAnagrafico/SPCIdentificaSoggetto SA:IdentificaSoggettoComune_SA FR:SPC/Comune ←-> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Ricevuto messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000010_2013-07-17_12:31] inviata dalla parte ←mittente [SPC/CentroAnagrafico] <spcoop> 006011 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-17T12:31:44.585> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 PD:SPCComune/ ←SPCCentroAnagrafico/SPCIdentificaSoggetto SA:IdentificaSoggettoComune_SA FR:SPC/Comune ←-> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Ricevuta Busta [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000010_2013-07-17_12:31] con ←filtro duplicati attivo nel profilo di trasmissione associato: effettuato salvataggio ←nell’History delle buste ricevute <spcoop> 006006 ComuneSPCoopIT.SPC/Comune SbustamentoRisposte <2013-07-17T12:31:44.588> ( ←infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 PD:SPCComune/ ←SPCCentroAnagrafico/SPCIdentificaSoggetto SA:IdentificaSoggettoComune_SA FR:SPC/Comune ←-> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Validazione ricevuta di una richiesta asincrona simmetrica <spcoop> 001004 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-17T12 ←:31:44.809> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 PD: ←SPCComune/SPCCentroAnagrafico/SPCIdentificaSoggetto SA:IdentificaSoggettoComune_SA FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Contenuto applicativo di una ricevuta di una richiesta asincrona simmetrica in consegna al ←servizio applicativo <spcoop> 001005 ComuneSPCoopIT.SPC/Comune RicezioneContenutiApplicativi_PD <2013-07-17T12 ←:31:44.812> (infoIntegration) ID:Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31 PD: ←SPCComune/SPCCentroAnagrafico/SPCIdentificaSoggetto SA:IdentificaSoggettoComune_SA FR: ←SPC/Comune -> ER:SPC/CentroAnagrafico S(v1):SPC/IdentificaSoggetto A:Cerca Risposta applicativa consegnata al servizio applicativo con codice di trasporto: 200 <spcoop> 001003 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ←RicezioneContenutiApplicativi_PD <2013-07-17T12:31:49.036> (infoIntegration) ID: ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 PD: ←SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA:IdentificaSoggetto_SA FR:SPC/ ←CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Ricevuta richiesta di servizio dal Servizio Applicativo ( Basic Username: [ ←- Tutorial di configurazione e programmazione OpenSPCoop IdentificaSoggetto_SA] ) IdentificaSoggetto_SA verso la porta delegata SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione 59 / 74 ←- <spcoop> 002015 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico Imbustamento <2013-07-17T12 ←:31:49.200> (infoIntegration) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013 ←-07-17_12:31 PD:SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA: ←IdentificaSoggetto_SA FR:SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/ ←EsitoIdentificazione A:Risultato Generazione risposta asincrona simmetrica correlata ad una richiesta con id [ ←Comune_ComuneSPCoopIT_0000009_2013-07-17_12:31] <spcoop> 003006 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico InoltroBuste <2013-07-17T12 ←:31:49.385> (infoProtocol) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013 ←-07-17_12:31 PD:SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA: ←IdentificaSoggetto_SA FR:SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/ ←EsitoIdentificazione A:Risultato Invio Messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31] in corso (location: ←http://localhost:8080/openspcoop2/spcoop/PA) ... <spcoop> 004001 ComuneSPCoopIT.SPC/Comune RicezioneBuste_PA <2013-07-17T12:31:50.174> ( ←infoProtocol) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 FR: ←SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Ricevuto messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31] inviata dalla parte ←mittente [SPC/CentroAnagrafico] <spcoop> 004003 ComuneSPCoopIT.SPC/Comune RicezioneBuste_PA <2013-07-17T12:31:50.625> ( ←infoIntegration) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 FR:SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Controllo Autorizzazione[registro] messaggio con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31] FR[SPC/ ←CentroAnagrafico]->ER[SPC/Comune--SPC/EsitoIdentificazione:1--Risultato] ... ←- <spcoop> 004004 ComuneSPCoopIT.SPC/Comune RicezioneBuste_PA <2013-07-17T12:31:50.668> ( ←infoIntegration) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 ←FR:SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Controllo Autorizzazione[registro] messaggio con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31] FR[SPC/ ←CentroAnagrafico]->ER[SPC/Comune--SPC/EsitoIdentificazione:1--Risultato]: autorizzato ( ←client-auth disabilitato nella porta di dominio PddOpenSPCoop) <spcoop> 005012 ComuneSPCoopIT.SPC/Comune Sbustamento <2013-07-17T12:31:50.706> ( ←infoIntegration) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 ←FR:SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Ricevuta Busta [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31] con ←filtro duplicati attivo nel profilo di trasmissione associato: effettuato salvataggio ←nell’History delle buste ricevute <spcoop> 007011 ComuneSPCoopIT.SPC/Comune ConsegnaContenutiApplicativi <2013-07-17T12 ←:31:50.855> (infoProtocol) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013 ←-07-17_12:31 SA:IdentificaSoggettoComune_SA FR:SPC/CentroAnagrafico -> ER:SPC/Comune S( ←v1):SPC/EsitoIdentificazione A:Risultato Invio Messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31] in corso (location: ←- Tutorial di configurazione e programmazione OpenSPCoop 60 / 74 http://localhost:8889/tutorial/asincronoSimmetricoRisposta) ... <spcoop> 007012 ComuneSPCoopIT.SPC/Comune ConsegnaContenutiApplicativi <2013-07-17T12 ←:31:51.023> (infoProtocol) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013 ←-07-17_12:31 SA:IdentificaSoggettoComune_SA FR:SPC/CentroAnagrafico -> ER:SPC/Comune S( ←v1):SPC/EsitoIdentificazione A:Risultato Messaggio applicativo con ID [CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17 ←_12:31], generato dal mittente [SPC/CentroAnagrafico], consegnato al servizio ←applicativo [IdentificaSoggettoComune_SA] mediante connettore [http] (location: http:// ←localhost:8889/tutorial/asincronoSimmetricoRisposta) con codice di trasporto: 200 <spcoop> 004006 ComuneSPCoopIT.SPC/Comune RicezioneBuste_PA <2013-07-17T12:31:51.102> ( ←infoProtocol) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 FR: ←SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Generato messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000012_2013 ←-07-17_12:31] in consegna verso la parte mittente [SPC/CentroAnagrafico] <spcoop> 003007 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico InoltroBuste <2013-07-17T12 ←:31:51.193> (infoProtocol) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013 ←-07-17_12:31 PD:SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA: ←IdentificaSoggetto_SA FR:SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/ ←EsitoIdentificazione A:Risultato Messaggio di cooperazione con identificativo [ ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31] inviato alla parte ←destinataria [SPC/Comune] mediante connettore [http] (location: http://localhost:8080/ ←openspcoop2/spcoop/PA) con codice di trasporto: 200 <spcoop> 004011 ComuneSPCoopIT.SPC/Comune RicezioneBuste_PA <2013-07-17T12:31:51.176> ( ←infoIntegration) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 FR:SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 ←- <spcoop> 003009 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico InoltroBuste <2013-07-17T12 ←:31:51.619> (infoProtocol) ID:CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013 ←-07-17_12:31 PD:SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA: ←IdentificaSoggetto_SA FR:SPC/CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/ ←EsitoIdentificazione A:Risultato Ricevuto messaggio di cooperazione con identificativo [Comune_ComuneSPCoopIT_0000012_2013 ←-07-17_12:31] inviata dalla parte mittente [SPC/Comune] <spcoop> 006011 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico SbustamentoRisposte ←<2013-07-17T12:31:51.703> (infoIntegration) ID: ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 PD: ←SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA:IdentificaSoggetto_SA FR:SPC/ ←CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Ricevuta Busta [Comune_ComuneSPCoopIT_0000012_2013-07-17_12:31] con filtro duplicati attivo ←nel profilo di trasmissione associato: effettuato salvataggio nell’History delle buste ←ricevute <spcoop> 006006 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico SbustamentoRisposte ←<2013-07-17T12:31:51.724> (infoIntegration) ID: ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 PD: ←SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA:IdentificaSoggetto_SA FR:SPC/ ←CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Validazione ricevuta di una risposta asincrona simmetrica Tutorial di configurazione e programmazione OpenSPCoop 61 / 74 <spcoop> 001004 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ←RicezioneContenutiApplicativi_PD <2013-07-17T12:31:51.855> (infoIntegration) ID: ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 PD: ←SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA:IdentificaSoggetto_SA FR:SPC/ ←CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Contenuto applicativo di una ricevuta di una risposta asincrona simmetrica in consegna al ←servizio applicativo <spcoop> 001005 CentroAnagraficoSPCoopIT.SPC/CentroAnagrafico ←RicezioneContenutiApplicativi_PD <2013-07-17T12:31:51.871> (infoIntegration) ID: ←CentroAnagrafico_CentroAnagraficoSPCoopIT_0000011_2013-07-17_12:31 PD: ←SPCCentroAnagrafico/SPCComune/SPCEsitoIdentificazione SA:IdentificaSoggetto_SA FR:SPC/ ←CentroAnagrafico -> ER:SPC/Comune S(v1):SPC/EsitoIdentificazione A:Risultato Risposta applicativa consegnata al servizio applicativo con codice di trasporto: 200 4 Tutorial per il protocollo trasparente Gli esempi che andiamo a mostrare in questa sezione riguardano l’utilizzo della PdD in modalità Proxy, cioè come elemento trasparente rispetto alle applicazioni, in grado di offrire funzionalità quali: • Tracciabilità, validazione dei messaggi, ecc. • Gestione della sicurezza a livello dei messaggi tramite WS-Security. La PdD in modalità Proxy adotta il protocollo di cooperazione trasparente, nel senso che non vengono applicate trasformazioni ai messaggi in transito né sono necessarie particolari convenzioni sul formato degli stessi. Come casi d’uso da utilizzare per gli esempi andiamo a riprendere quelli già visti nel caso SPCoop per i profili oneway e sincrono e quindi ComunicazioneVariazione e RichiestaStatoFamiglia. A livello architetturale immaginiamo due principali scenari nei quali la Porta di Dominio è impiegata come Proxy alternativamente dall’erogatore (CentroAnagrafico), nel primo caso, e dal fruitore (Comune), nel secondo caso. In entrambi i casi prevediamo tipologie di comunicazioni con le seguenti combinazioni: • SOAP 1.1 - I servizi dialogano utilizzando la versione 1.1 di SOAP (la stessa adottata per SPCoop). • SOAP 1.1 + WS-Security - I servizi dialogano utilizzando la versione 1.1 di SOAP e uno dei due produce o consuma messaggi contenenti cifratura e firma del body tramite WS-Security. • SOAP 1.2 -I servizi dialogano utilizzando la versione 1.2 di SOAP. • SOAP 1.2 + WS-Security - I servizi dialogano utilizzando la versione 1.2 di SOAP e uno dei due produce o consuma messaggi contenenti cifratura e firma del body tramite WS-Security. Tutorial di configurazione e programmazione OpenSPCoop 62 / 74 Gli scenari nei quali la PdD è adottata come Proxy dall’erogatore sono sintetizzati dalla figura seguente. Gli scenari nei quali la PdD è adottata come Proxy dal fruitore sono sintetizzati dalla figura seguente. I sorgenti e l’ambiente di compilazione/esecuzione delle sample application adottate per questo tutorial, insieme ai wsdl per la configurazione, sono contenuti nella distribuzione di OpenSPCoop2 al percorso: /protocolli/trasparente/example/tutorial. Nelle sezioni seguenti illustriamo in dettaglio il caso RichiestaStatoFamiglia Proxy Erogazione SOAP1.1, gli altri casi possono essere desunti tramite piccole variazioni. Negli scenari in cui la Porta di Dominio è adottata dall’erogatore, il client invoca la porta applicativa. La Porta di Dominio ha la necessità di identificare il Soggetto mittente. Il processo di autenticazione, sia che avvenga in SSL o HTTP Basic, esula dai temi trattati dal presente tutorial e pertanto tralasciamo questo aspetto. Assumiamo convenzionalmente che un frontend abbia preventivamente autenticato la richiesta del client. La Porta di Dominio riceve l’identificatore del soggetto mittente tramite lo username indicato nella richiesta. Tutorial di configurazione e programmazione OpenSPCoop 4.1 63 / 74 RichiestaStatoFamiglia Proxy Erogazione SOAP1.1 (sincrono trasparente) Analizziamo in questa sezione il caso in cui il CentroAnagrafico espone il servizio di Richiesta Stato Famiglia tramite un proxy. Il servizio esposto prevede la versione 1.1 di SOAP. Lo scenario è sintetizzato nella figura seguente: Il client del Comune invia messaggi di richiesta, secondo lo standard SOAP1.1 in accordo al formato previsto dai WSDL del servizio. 4.1.1 Descrizione formale dell’Accordo di Servizio: WSDL Il primo passo sarà, per l’erogatore del servizio, quello di fornire il WSDL che descrive il servizio che si intende erogare. Per la creazione dell’accordo di servizio il WSDL deve essere partizionato secondo la seguente logica: • WSDL definitorio: racchiude tutti gli XSD necessari a definire il formato dei messaggi scambiati tra i servizi applicativi. • WSDL logico erogatore: contiene una direttiva include del definitorio e la definizione astratta del servizio, vale a dire le sezioni: messages, operation e port-type. • WSDL implementativo: contiene una direttiva include del concettuale e la definzione concreta del servizio, vale a dire le sezioni: binding e service. WSDL Definitorio (/protocolli/trasparente/example/tutorial/sincrono/configurazionePdD/wsdl/definitorio.xsd) Contiene le definizioni dei tipi di dato utilizzati per la codifica dei messaggi. <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia" xmlns:so="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia"> <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" /> Tutorial di configurazione e programmazione OpenSPCoop 64 / 74 <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 Logico Erogatore (/protocolli/trasparente/example/tutorial/sincrono/configurazionePdD/wsdl/logicoErogatore.wsdl) Specifica l’interfaccia astratta dell’accordo di servizio. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:tras="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia" targetNamespace="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia" ←location="definitorio.xsd"> </wsdl:import> <!-- Definizione dei Messaggi --> <wsdl:message name="statoFamigliaRequest"> <wsdl:part name="statoFamigliaRequestPart" element="tras:richiestaStatoFamiglia" /> </wsdl:message> <wsdl:message name="statoFamigliaResponse"> <wsdl:part name="statoFamigliaResponsePart" element="tras:statoFamiglia" /> </wsdl:message> <!-- Passa un CodiceFiscale e ritorna i dati di un soggetto --> <wsdl:portType name="RichiestaStatoFamiglia"> <wsdl:operation name="Acquisisci"> <wsdl:input message="tras:statoFamigliaRequest" /> <wsdl:output message="tras:statoFamigliaResponse" /> </wsdl:operation> </wsdl:portType> </wsdl:definitions> WSDL Implementativo Erogatore (/protocolli/trasparente/example/tutorial/sincrono/configurazionePdD/wsdl/implementazioneE Specifica i dettagli di protocollo e porti di accesso per servizi e operazioni esposti dal soggetto erogatore tramite il binding soap1.1. <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tras="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia" targetNamespace="http://openspcoop2.org/example/pdd/server/RichiestaStatoFamiglia"> <wsdl:import namespace="http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia" Tutorial di configurazione e programmazione OpenSPCoop 65 / 74 location="logicoErogatore.wsdl"> </wsdl:import> <wsdl:binding name="RichiestaStatoFamigliaSOAP11Binding" type="tras: ←RichiestaStatoFamiglia"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="Acquisisci"> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="RichiestaStatoFamigliaSOAP11Service"> <wsdl:port name="RichiestaStatoFamigliaSOAP11InterfaceEndpoint" binding="tras:RichiestaStatoFamigliaSOAP11Binding"> <soap:address location="http://localhost:8888/tutorial/sincrono11" /> </wsdl:port> </wsdl:service> </wsdl:definitions> 4.1.2 Configurazione Porta di Dominio Vediamo adesso la sequenza di passi per configurare questo caso d’uso tramite l’applicazione PddConsole. 1. Creazione del Soggetto (se non presente) PROXY/CentroAnagrafico avente il ruolo di erogatore. Nome Nome Tipo Valore d’esempio CentroAnagrafico PROXY Tabella 35: Dati del Soggetto erogatore (a) Selezionare aggiungi nel menù Soggetti (b) Utilizzare il form per inserire i parametri del soggetto erogatore del servizio (c) Premere il pulsante Invia Tutorial di configurazione e programmazione OpenSPCoop 66 / 74 2. Creazione del Soggetto esterno (se non presente) PROXY/Comune avente il ruolo di fruitore: Aggiungiamo il soggetto che fruirà del servizio ComunicazioneVariazione. Nome Nome Tipo Porta di Dominio Valore d’esempio Comune PROXY Tabella 36: Dati Soggetto Fruitore (a) Selezionare aggiungi nel menù Soggetti (b) Utilizzare il form presentato per inserire i parametri del soggetto fruitore del servizio (c) Premere il pulsante Invia 3. Creazione del Servizio Applicativo ProxyRichiestaStatoFamiglia_SA utilizzato per l’integrazione del client erogatore: Nome Nome Soggetto Invocazione porta / Credenziale di accesso Modalità di fault Valore d’esempio ProxyRichiestaStatoFamiglia11_SA PROXY/CentroAnagrafico nessuna soap Tabella 37: Dati Servizio Applicativo Fruitore (a) Selezionare aggiungi nel menù Servizi Applicativi (b) Utilizzare il form presentato per inserire i parametri del servizio applicativo fruitore (c) Premere il pulsante Invia Tutorial di configurazione e programmazione OpenSPCoop Nome Nome Sbustamento SOAP Sbustamento Informazioni di Protocollo Salva in Message Box Connettore abilitato Url connettore Tipo credenziali d’accesso 67 / 74 Valore d’esempio ProxyRichiestaStatoFamiglia11_SA disabilitato abilitato disabilitato si http://localhost:8888/tutorial/sincrono11 nessuna Tabella 38: Dati invocazione Servizio Applicativo erogatore 4. Impostare i parametri di invocazione del Servizio Applicativo 5. Creazione dell’Accordo di Servizio Parte Comune Nome Nome Soggetto Referente Versione WSDL Definitorio WSDL Logico Erogatore Valore d’esempio AS_ProxyRichiestaStatoFamiglia PROXY/CentroAnagrafico 1 definitorio.xsd logicoErogatore.wsdl Tabella 39: Dati Accordo di Servizio Parte Comune (a) Selezionare aggiungi nel menù Accordi Servizio Parte Comune (b) Utilizzare il form presentato per inserire i vari parametri dell’Accordo Tutorial di configurazione e programmazione OpenSPCoop 68 / 74 6. Aggiungiamo il Servizio generico all’Accordo: il nome del servizio dovrà avere lo stesso nome del PortType indicato nel WSDL Logico Erogatore. Nome Nome Profilo Valore d’esempio RichiestaStatoFamiglia sincrono Tabella 40: Dati Servizio dell’Accordo (a) Dalla lista degli Accordi di Servizio Parte Comune, selezionare visualizza nella colonna Servizi in corrispondenza dell’Accordo creato al punto precedente. (b) Premere il pulsante Aggiungi e completare il form per l’aggiunta di un nuovo servizio. 7. Specifichiamo le azioni del Servizio: le azioni del Servizio corrispondono alle Operation specificate nel WSDL Nome Nome Valore d’esempio Acquisisci Tabella 41: Dati delle azioni del servizio (a) Selezionare visualizza nella colonna Azioni in corrispondenza del servizio RichiestaStatoFamiglia appena creato. (b) Premere il pulsante Aggiungi e completare il form per l’aggiunta di una nuova azione. 8. Aggiungere l’Accordo di Servizio Parte Specifica. L’inserimento della parte specifica definisce l’implementazione del servizio da parte del soggetto erogatore. Nel contesto di questo tutorial utilizziamo per questa operazione l’interfaccia PddConsole in modalità avanzata poiché, a causa delle molteplici implementazioni del medesimo port-type per il medesimo soggetto erogatore, si rende necessario differenziare i nomi di questi servizi. Per configurare una sola implementazione di servizio per un soggetto erogatore non è necessario questo accorgimento. (a) Nella sezione Accordi Servizio Parte Specifica selezionare Aggiungi. (b) Utilizzare il form presentato per inserire i parametri della parte specifica dell’accordo di servizio Tutorial di configurazione e programmazione OpenSPCoop Nome Soggetto Erogatore Accordo di Servizio Parte Comune Servizio Nome Porta Applicativa / Nome Porta Applicativa / ServizioApplicativo WSDL Implementativo Erogatore 69 / 74 Valore d’esempio PROXY/CentroAnagrafico AS_ProxyRichiestaStatoFamiglia RichiestaStatoFamiglia RichiestaStatoFamigliaSOAP11Service RichiestaStatoFamigliaSOAP11Service ProxyRichiestaStatoFamiglia11_SA implementazioneErogatoreSoap11.wsdl Tabella 42: Dati dell’Accordo di Servizio Parte Specifica (c) Premere il pulsante Invia 9. Aggiungere il soggetto fruitore alla lista dei soggetti che possono fruire del servizio: dobbiamo quindi aggiungere il soggetto PROXY/Comune ai fruitori del servizio RichiestaStatoFamigliaSOAP11Service. (a) Nell’elenco degli Accordi Servizio Parte Specifica individuare RichiestaStatoFamigliaSOAP11Service e selezionare visualizza nella colonna Fruitori: (b) Selezionare Aggiungi ed utilizzare il form per inserire i parametri del soggetto fruitore PROXY/Comune. (c) Premere il pulsante Invia 4.1.3 Esecuzione e Verifica Per l’esecuzione delle applicazioni di esempio si può utilizzare l’ambiente presente nella distribuzione di openspcoop2 al percorso: protocolli/trasparente/example/tutorial/sincrono eseguendo i seguenti passi: Tutorial di configurazione e programmazione OpenSPCoop 70 / 74 • Configurare l’applicazione client editando il file Client.properties: invocazioneTramitePdD=true # Invocazione tramite PdD (Caso Porta Applicativa) portaDiDominio=http://localhost:8080/openspcoop2/PA/ Contesto.soap11=RichiestaStatoFamigliaSOAP11Service/Acquisisci # Credenziali http basic username=Comune Come si può notare la property portaDiDominio fa riferimento alla url da invocare per la chiamata alla porta applicativa invocata dal client. A questa property viene concatenato il valore della property Contesto.soap11 che fa riferimento al nome della porta applicativa creata in configurazione con l’aggiunta dell’operation in fondo. La property username fa riferimento all’identificativo del Soggetto che consente alla Porta di Dominio di risalire al soggetto mittente. Come già detto in precedenza, ciò non significa che l’autenticazione non venga effettuata. L’autenticazione dei soggetti esterni avviene tramite gli usuali metodi che non sono argomento di questo tutorial. • Avviare il Server tramite il comando ant run_server. L’output ottenuto sarà: [root@ws5 sincrono]# ant run_server Buildfile: /home/papandrea/Work/openspcoop2/0.2.dev/protocolli/trasparente/example/ ←tutorial/sincrono/build.xml _run_server_trasparente_tutorial_sincrono: [java] Starting Server [java] Aug 9, 2013 5:05:19 PM org.springframework.context.support. ←AbstractApplicationContext prepareRefresh [java] INFO: Refreshing org.springframework.context.support. ←ClassPathXmlApplicationContext@3f7fa65e: startup date [Fri Aug 09 17:05:19 CEST ←2013]; root of context hierarchy [java] Aug 9, 2013 5:05:19 PM org.springframework.beans.factory.xml. ←XmlBeanDefinitionReader loadBeanDefinitions [java] INFO: Loading XML bean definitions from class path resource [configurazionePdD ←/server/cxf.xml] [java] Aug 9, 2013 5:05:20 PM org.springframework.beans.factory.support. ←DefaultListableBeanFactory preInstantiateSingletons [java] INFO: Pre-instantiating singletons in org.springframework.beans.factory. ←support.DefaultListableBeanFactory@112c3327: defining beans [ ←RichiestaStatoFamigliaSOAP11,RichiestaStatoFamigliaSOAP12, ←RichiestaStatoFamigliaSOAP11Sec,RichiestaStatoFamigliaSOAP12Sec]; root of factory ←hierarchy [java] Aug 9, 2013 5:05:20 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia}RichiestaStatoFamigliaSOAP11Service from WSDL: file: ←configurazionePdD/wsdl/implementazioneErogatoreSoap11.wsdl [java] Aug 9, 2013 5:05:21 PM org.apache.cxf.endpoint.ServerImpl initDestination [java] INFO: Setting the server’s publish address to be http://localhost:8888/ ←tutorial/sincrono11 [java] 2013-08-09 17:05:21.281:INFO:oejs.Server:jetty-8.1.7.v20120910 [java] 2013-08-09 17:05:21.324:INFO:oejs.AbstractConnector:Started ←SelectChannelConnector@localhost:8888 [java] Aug 9, 2013 5:05:21 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia}RichiestaStatoFamigliaSOAP12Service from WSDL: file: ←configurazionePdD/wsdl/implementazioneErogatoreSoap12.wsdl [java] Aug 9, 2013 5:05:21 PM org.apache.cxf.endpoint.ServerImpl initDestination [java] INFO: Setting the server’s publish address to be http://localhost:8888/ ←tutorial/sincrono12 Tutorial di configurazione e programmazione OpenSPCoop 71 / 74 [java] Aug 9, 2013 5:05:21 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia}RichiestaStatoFamigliaSOAP11SecService from WSDL: file: ←configurazionePdD/wsdl/implementazioneErogatoreSoap11Security.wsdl [java] Server ready... [java] Aug 9, 2013 5:05:21 PM org.apache.cxf.ws.security.policy.model.AlgorithmSuite ←setAlgorithmSuite [java] WARNING: An Rsa15 AlgorithmSuite - TripleDesRsa15 - has been configured, which ←is not recommended. Please consider using TripleDes instead. [java] Aug 9, 2013 5:05:21 PM org.apache.cxf.endpoint.ServerImpl initDestination [java] INFO: Setting the server’s publish address to be http://localhost:8888/ ←tutorial/sincronoSec11 [java] Aug 9, 2013 5:05:21 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia}RichiestaStatoFamigliaSOAP12SecService from WSDL: file: ←configurazionePdD/wsdl/implementazioneErogatoreSoap12Security.wsdl • Avviare il Client tramite il comando ant run_client_soap11. L’output ottenuto sarà: [giuseppe@turbo-laptop sincrono]$ ant run_client_soap11 Buildfile: /home/giuseppe/Work/openspcoop2/0.2.dev/protocolli/trasparente/example/tutorial ←/sincrono/build.xml _run_client_trasparente_tutorial_sincrono_soap11: [java] Aug 09, 2013 5:05:39 PM org.apache.cxf.service.factory. ←ReflectionServiceFactoryBean buildServiceFromWSDL [java] INFO: Creating Service {http://openspcoop2.org/example/pdd/server/ ←RichiestaStatoFamiglia}RichiestaStatoFamigliaSOAP11Service from WSDL: file:/home/ ←giuseppe/Work/openspcoop2/0.2.dev/protocolli/trasparente/example/tutorial/ ←sincrono/configurazionePdD/wsdl/implementazioneErogatoreSoap11.wsdl [java] Invoking acquisisci... [java] Aug 09, 2013 5:05:40 PM org.apache.cxf.services. ←RichiestaStatoFamigliaSOAP11Service.RichiestaStatoFamigliaSOAP11InterfaceEndpoint ←.RichiestaStatoFamiglia [java] INFO: Outbound Message [java] --------------------------[java] ID: 1 [java] Address: http://papandrea-ws:8080/openspcoop2/PA/ ←RichiestaStatoFamigliaSOAP11Service/Acquisisci [java] Encoding: UTF-8 [java] Http-Method: POST [java] Content-Type: text/xml [java] Headers: {Accept=[*/*], Authorization=[Basic Q29tdW5lOjEyMzQ1Ng==], SOAPAction ←=[""]} [java] Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope ←/"><soap:Body><ns2:richiestaStatoFamiglia xmlns:ns2="http://openspcoop2.org/ ←example/pdd/server/RichiestaStatoFamiglia">DDDFFF22G22G222G</ns2: ←richiestaStatoFamiglia></soap:Body></soap:Envelope> [java] -------------------------------------[java] Aug 09, 2013 5:05:40 PM org.apache.cxf.services. ←RichiestaStatoFamigliaSOAP11Service.RichiestaStatoFamigliaSOAP11InterfaceEndpoint ←.RichiestaStatoFamiglia [java] INFO: Inbound Message [java] ---------------------------[java] ID: 1 [java] Response-Code: 200 [java] Encoding: UTF-8 [java] Content-Type: text/xml;charset=UTF-8 Tutorial di configurazione e programmazione OpenSPCoop 72 / 74 [java] Headers: {content-type=[text/xml;charset=UTF-8], Date=[Fri, 09 Aug 2013 ←15:05:40 GMT], Server=[Apache-Coyote/1.1], transfer-encoding=[chunked], X- ←OpenSPCoop2-Pdd=[OpenSPCoop2/branches_0.2_0.2.dev], X-OpenSPCoop2-PddDetails=[ ←OpenSPCoop Revision N.9453, LastChangedRevision N.9453, 08/09/2013 11:08 AM]} [java] Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope ←/"><soap:Body><ns2:statoFamiglia xmlns:ns2="http://openspcoop2.org/example/pdd/ ←server/RichiestaStatoFamiglia"><nome>Mario</nome><cognome>Rossi</cognome>< ←codiceFiscale>DDDFFF22G22G222G</codiceFiscale><nascita>1980-01-01Z</nascita>< ←statoCivile>Celibe</statoCivile></ns2:statoFamiglia></soap:Body></soap:Envelope> [java] -------------------------------------[java] ========== Ricevuti dati del Soggetto ============== [java] == Nuovo nome: Mario [java] == Nuovo cognome: Rossi [java] == Nuovo codice fiscale: DDDFFF22G22G222G [java] == Nuova data di nascita: 1980-01-01Z [java] == Nuovo stato civile: Celibe run_client_soap11: BUILD SUCCESSFUL Controllando il file openspcoop2.log possiamo verificare il corretto funzionamento della PdD: <trasparente> 004001 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T12:56:17.133> (infoProtocol) ID:46d89625-9560-47b9-99ee-a4f5655b3950-request ←FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Ricevuto messaggio di cooperazione con identificativo [46d89625-9560-47b9-99ee-a4f5655b3950 ←-request] inviata dalla parte mittente [PROXY/Comune] ( Basic Username: Comune ) <trasparente> 004003 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T12:56:17.133> (infoIntegration) ID:46d89625-9560-47b9-99ee-a4f5655b3950- ←request FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Controllo Autorizzazione[registro] messaggio con identificativo [46d89625-9560-47b9-99ee- ←a4f5655b3950-request] FR[PROXY/Comune]->ER[PROXY/CentroAnagrafico--PROXY/ ←RichiestaStatoFamigliaSOAP11Service:1--Acquisisci] ... <trasparente> 004004 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T12:56:17.134> (infoIntegration) ID:46d89625-9560-47b9-99ee-a4f5655b3950- ←request FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Controllo Autorizzazione[registro] messaggio con identificativo [46d89625-9560-47b9-99ee- ←a4f5655b3950-request] FR[PROXY/Comune]->ER[PROXY/CentroAnagrafico--PROXY/ ←RichiestaStatoFamigliaSOAP11Service:1--Acquisisci]: autorizzato (client-auth ←disabilitato nella porta di dominio PddOpenSPCoop) <trasparente> 007011 CentroAnagraficoPdD.PROXY/CentroAnagrafico ←ConsegnaContenutiApplicativi <2013-08-09T12:56:17.136> (infoProtocol) ID:46d89625 ←-9560-47b9-99ee-a4f5655b3950-request SA:ProxyRichiestaStatoFamiglia11_SA FR:PROXY/Comune ←-> ER:PROXY/CentroAnagrafico S(v1):PROXY/RichiestaStatoFamigliaSOAP11Service A: ←Acquisisci Invio Messaggio di cooperazione con identificativo [46d89625-9560-47b9-99ee-a4f5655b3950- ←request] in corso (location: http://localhost:8888/tutorial/sincrono11) ... <trasparente> 007012 CentroAnagraficoPdD.PROXY/CentroAnagrafico ←ConsegnaContenutiApplicativi <2013-08-09T12:56:17.411> (infoProtocol) ID:46d89625 ←- Tutorial di configurazione e programmazione OpenSPCoop 73 / 74 -9560-47b9-99ee-a4f5655b3950-request SA:ProxyRichiestaStatoFamiglia11_SA FR:PROXY/Comune ←-> ER:PROXY/CentroAnagrafico S(v1):PROXY/RichiestaStatoFamigliaSOAP11Service A: ←Acquisisci Messaggio applicativo con ID [46d89625-9560-47b9-99ee-a4f5655b3950-request], generato dal ←mittente [PROXY/Comune], consegnato al servizio applicativo [ ←ProxyRichiestaStatoFamiglia11_SA] mediante connettore [http] (location: http://localhost ←:8888/tutorial/sincrono11) con codice di trasporto: 200 <trasparente> 004006 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T12:56:17.418> (infoProtocol) ID:46d89625-9560-47b9-99ee-a4f5655b3950-request ←FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Generato messaggio di cooperazione con identificativo [46d89625-9560-47b9-99ee-a4f5655b3950 ←-response] in consegna verso la parte mittente [PROXY/Comune] <trasparente> 004011 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T12:56:17.423> (infoIntegration) ID:46d89625-9560-47b9-99ee-a4f5655b3950- ←request FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 <trasparente> 004001 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T17:05:40.363> (infoProtocol) ID:72daf12b-1aab-460e-905e-d50bb933be57-request ←FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Ricevuto messaggio di cooperazione con identificativo [72daf12b-1aab-460e-905e-d50bb933be57 ←-request] inviata dalla parte mittente [PROXY/Comune] ( Basic Username: Comune ) <trasparente> 004003 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T17:05:40.364> (infoIntegration) ID:72daf12b-1aab-460e-905e-d50bb933be57- ←request FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Controllo Autorizzazione[registro] messaggio con identificativo [72daf12b-1aab-460e-905e- ←d50bb933be57-request] FR[PROXY/Comune]->ER[PROXY/CentroAnagrafico--PROXY/ ←RichiestaStatoFamigliaSOAP11Service:1--Acquisisci] ... <trasparente> 004004 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T17:05:40.365> (infoIntegration) ID:72daf12b-1aab-460e-905e-d50bb933be57- ←request FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Controllo Autorizzazione[registro] messaggio con identificativo [72daf12b-1aab-460e-905e- ←d50bb933be57-request] FR[PROXY/Comune]->ER[PROXY/CentroAnagrafico--PROXY/ ←RichiestaStatoFamigliaSOAP11Service:1--Acquisisci]: autorizzato (client-auth ←disabilitato) <trasparente> 007011 CentroAnagraficoPdD.PROXY/CentroAnagrafico ←ConsegnaContenutiApplicativi <2013-08-09T17:05:40.371> (infoProtocol) ID:72daf12b-1aab ←-460e-905e-d50bb933be57-request SA:ProxyRichiestaStatoFamiglia11_SA FR:PROXY/Comune -> ←ER:PROXY/CentroAnagrafico S(v1):PROXY/RichiestaStatoFamigliaSOAP11Service A:Acquisisci Invio Messaggio di cooperazione con identificativo [72daf12b-1aab-460e-905e-d50bb933be57- ←request] in corso (location: http://localhost:8888/tutorial/sincrono11) ... <trasparente> 007012 CentroAnagraficoPdD.PROXY/CentroAnagrafico ←ConsegnaContenutiApplicativi <2013-08-09T17:05:40.642> (infoProtocol) ID:72daf12b-1aab ←-460e-905e-d50bb933be57-request SA:ProxyRichiestaStatoFamiglia11_SA FR:PROXY/Comune -> ←- Tutorial di configurazione e programmazione OpenSPCoop 74 / 74 ER:PROXY/CentroAnagrafico S(v1):PROXY/RichiestaStatoFamigliaSOAP11Service A:Acquisisci Messaggio applicativo con ID [72daf12b-1aab-460e-905e-d50bb933be57-request], generato dal ←mittente [PROXY/Comune], consegnato al servizio applicativo [ ←ProxyRichiestaStatoFamiglia11_SA] mediante connettore [http] (location: http://localhost ←:8888/tutorial/sincrono11) con codice di trasporto: 200 <trasparente> 004006 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T17:05:40.644> (infoProtocol) ID:72daf12b-1aab-460e-905e-d50bb933be57-request ←FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Generato messaggio di cooperazione con identificativo [72daf12b-1aab-460e-905e-d50bb933be57 ←-response] in consegna verso la parte mittente [PROXY/Comune] <trasparente> 004011 CentroAnagraficoPdD.PROXY/CentroAnagrafico RicezioneBuste_PA ←<2013-08-09T17:05:40.646> (infoIntegration) ID:72daf12b-1aab-460e-905e-d50bb933be57- ←request FR:PROXY/Comune -> ER:PROXY/CentroAnagrafico S(v1):PROXY/ ←RichiestaStatoFamigliaSOAP11Service A:Acquisisci Risposta consegnata alla porta di dominio mittente con codice di trasporto: 200 4.2 I rimanenti scenari del protocollo trasparente Per l’utilizzo dei rimanenti scenari contenuti nel tutorial si potrà procedere in maniera del tutto analoga a quanto finora illustrato nel precedente caso, per il protocollo trasparente, e nei casi relativi al protocollo SPCoop. In fase di svolgimento di questi ulteriori scenari si tenga presente: • Non è necessario creare ulteriori portType alla parte comune dell’accordo di servizio. Le variazioni sulla versione di SOAP e sull’adozione o meno di WS-Security sono state realizzate come specifici binding del medesimo servizio concettuale. Si tratta quindi di creare nuove parti specifiche dell’accordo di servizio che fanno riferimento a diversi wsdl implementativi. • I casi in cui la Porta di Dominio è adottata dal fruitore presentano minime differenze rispetto a quanto già illustrato per SPCoop. L’unico accorgimento è quello di impostare il connettore del servizio, che normalmente fa riferimento alla porta applicativa della Porta di Dominio erogatrice, con quello relativo al servizio applicativo erogatore. • Nei casi che prevedono l’uso di WS-Security si dovrà provvedere alla configurazione dei parametri necessari sulla porta delegata o applicativa, a seconda che si tratti di una Porta di Dominio del fruitore o dell’erogatore. Per impostare i parametri di WS-Security procedere nel seguente modo: – Selezionare nella colonna WS-Security, in corrispondenza della porta applicativa, il collegamento disabilitato. – Modificare l’impostazione dello stato su abilitato e premere Invia. – I parametri di configurazione di WS-Security, relativi al messaggio di richiesta e alla risposta, potranno essere impostati seguendo i collegamenti Request-Flow e Response-Flow.