Tutorial di configurazione e programmazione OpenSPCoop

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.