Appendice A
Transcript
Appendice A
Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ Appendice A: Schema XML della descrizione della Busta e-Gov build.xml <project name="BustaeGov" default="build.xml" basedir="."> <target name="build.xml"> <!-Set up the classpath for the generation task. Include all the standard jaxme jars. --> <path id="generate.class.path"> <pathelement location="C:/javaDevelop/lib/jaxme/jaxme20.5.1.jar"/> <pathelement location="C:/javaDevelop/lib/jaxme/jaxmejs0.5.1.jar"/> <pathelement location="C:/javaDevelop/lib/jaxme/jaxmexs0.5.1.jar"/> <pathelement location="C:/javaDevelop/lib/jaxme/jaxmeapi0.5.1.jar"/> </path> <!-Defines the generation task using that classpath. --> <taskdef name="xjc" classname="org.apache.ws.jaxme.generator.XJCTask" classpathref="generate.class.path"/> <!-Generate source code. The 'schema' attribute gives the path to the schema the sources will be generated from. The 'target' attribute specifies the base directory that the source will be generated into. Sources will be created in subdirectories corresponding to the package structure. --> <xjc schema="bustaEGov.xsd" target="DefinizioneBusta" extension="true"> <!-The source files being created. The xjc task uses these for a check, whether they are uptodate. If so, the generation is skipped, for improved speed. Specifying the package isn't necessary, unless you have other files in the target directory as well, for example manually written files or files created by another generator or xjc call. Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ If so, these need to be excluded from the uptodate check. --> <produces includes="*.java"/> </xjc> </target> </project> bustaEGov.xsd <?xml version="1.0"?> <xsd:schema targetNamespace="http://www.cnipa.it/schemas/2003/eGovIT/Busta1_0/" xmlns:eGov_IT="http://www.cnipa.it/schemas/2003/eGovIT/Busta1_0/" xmlns="http://www.cnipa.it/schemas/2003/eGovIT/Busta1_0/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:SOAP_ENV="http://schemas.xmlsoap.org/soap/envelope/" elementFormDefault="qualified" attributeFormDefault="unqualified"> <xsd:import namespace="http://schemas.xmlsoap.org/soap/envelope/" schemaLocation="./envelopeMustUnderstandActorDef-.xsd"/> <xsd:element name="Azione" type="xsd:string"/> <xsd:element name="Collaborazione" type="IdentificatoreType"/> <xsd:element name="ConfermaRicezione"> <xsd:complexType> <xsd:sequence> <xsd:element ref="OraRegistrazione"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Descrizione"> <xsd:complexType> <xsd:sequence> <xsd:element ref="DescrizioneMessaggio" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ </xsd:element> <xsd:element name="DescrizioneMessaggio"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Riferimento"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Destinatario"> <xsd:complexType> <xsd:sequence> <xsd:element ref="IdentificativoParte"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Destinazione"> <xsd:complexType> <xsd:sequence> <xsd:element ref="IdentificativoParte"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:simpleType name="codiceEccezioneType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="EGOV_IT_001"> <xsd:annotation> <xsd:appinfo> Formato Busta non corretto </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_002"> <xsd:annotation> <xsd:appinfo> Formato Intestazione non corretto </xsd:appinfo> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_003"> <xsd:annotation> <xsd:appinfo> Formato Corpo non corretto </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_100"> <xsd:annotation> <xsd:appinfo> Errore nel contenuto dell’Intestazione della busta </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_101"> <xsd:annotation> <xsd:appinfo> Identificativo della parte Mittente sconosciuto </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_102"> <xsd:annotation> <xsd:appinfo> Identificativo della parte Destinatario sconosciuto </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_103"> <xsd:annotation> <xsd:appinfo> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ Profilo di Collaborazione non valido </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_104"> <xsd:annotation> <xsd:appinfo> Identificativo di Collaborazione non valido </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_105"> <xsd:annotation> <xsd:appinfo> Servizio sconosciuto </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_106"> <xsd:annotation> <xsd:appinfo> Azione sconosciuta </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_107"> <xsd:annotation> <xsd:appinfo> Identificatore messaggio non definito </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_108"> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:annotation> <xsd:appinfo> OraRegistrazione messaggio non valida </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_109"> <xsd:annotation> <xsd:appinfo> Riferimento messaggio non definito </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_110"> <xsd:annotation> <xsd:appinfo> Identificatore messaggio non valido </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_111"> <xsd:annotation> <xsd:appinfo> RiferimentoMessaggio non valido </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_112"> <xsd:annotation> <xsd:appinfo> Scadenza messaggio non valida </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_113"> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:annotation> <xsd:appinfo> Profilo di Trasmissione non valido </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_114"> <xsd:annotation> <xsd:appinfo> Sequenza non valida </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_115"> <xsd:annotation> <xsd:appinfo> ListaRiscontri non valida </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_116"> <xsd:annotation> <xsd:appinfo> ListaTrasmissioni non valida </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_117"> <xsd:annotation> <xsd:appinfo> Firma non valida </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_118"> <xsd:annotation> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:appinfo> Riferimento all'allegato non valido </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_119"> <xsd:annotation> <xsd:appinfo> Allegato non presente </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_120"> <xsd:annotation> <xsd:appinfo> Allegato non definito </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_200"> <xsd:annotation> <xsd:appinfo> Errore nelle politiche di sicurezza del Servizio </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_201"> <xsd:annotation> <xsd:appinfo> Mittente non Autorizzato </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_202"> <xsd:annotation> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:appinfo> Firma XML non valida </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_203"> <xsd:annotation> <xsd:appinfo> Firma PKCS#7 non valida </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_300"> <xsd:annotation> <xsd:appinfo> Errore nel processamento del messaggio </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_301"> <xsd:annotation> <xsd:appinfo> Messaggio scaduto </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_400"> <xsd:annotation> <xsd:appinfo> Errore nella gestione della trasparenza temporale </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_401"> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:annotation> <xsd:appinfo> Trasparenza temporale non supportata </xsd:appinfo> </xsd:annotation> </xsd:enumeration> <xsd:enumeration value="EGOV_IT_402"> <xsd:annotation> <xsd:appinfo> Trasparenza temporale non gestibile: attributi del Profilo di trasmissione non validi </xsd:appinfo> </xsd:annotation> </xsd:enumeration> </xsd:restriction> </xsd:simpleType> <xsd:element name="Eccezione"> <xsd:complexType> <xsd:attribute name="contestoCodifica" type="xsd:string" use="required"/> <xsd:attribute name="codiceEccezione" type="codiceEccezioneType" use="required"/> <xsd:attribute name="rilevanza" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="INFO"/> <xsd:enumeration value="LIEVE"/> <xsd:enumeration value="GRAVE"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> <xsd:attribute name="posizione" type="xsd:string" se="required"/> </xsd:complexType> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ </xsd:element> <xsd:element name="IdentificativoParte"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="tipo" type="xsd:string" use="required"/> <xsd:attribute name="indirizzoTelematico" type="xsd:string"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="Identificatore" type="IdentificatoreType"/> <xsd:simpleType name="IdentificatoreType"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[\w]+_[\w]+_\d{7}_\d{4}\-\d{2}\\d{2}_\d{2}:\d{2}"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="Intestazione"> <xsd:complexType> <xsd:sequence> <xsd:element ref="IntestazioneMessaggio"/> <xsd:element ref="ListaRiscontri" minOccurs="0"/> <xsd:element ref="ListaTrasmissioni" minOccurs="0"/> <xsd:element ref="ListaEccezioni" minOccurs="0"/> </xsd:sequence> <xsd:attribute ref="SOAP_ENV:actor" use="required" fixed="http://www.cnipa.it/eGov_it/portadominio"/> <xsd:attribute ref="SOAP_ENV:mustUnderstand" use="required" fixed="1"/> </xsd:complexType> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ </xsd:element> <xsd:element name="IntestazioneMessaggio"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Mittente"/> <xsd:element ref="Destinatario"/> <xsd:element ref="ProfiloCollaborazione" minOccurs="0"/> <xsd:element ref="Collaborazione" minOccurs="0"/> <xsd:element ref="Servizio" minOccurs="0"/> <xsd:element ref="Azione" minOccurs="0"/> <xsd:element ref="Messaggio"/> <xsd:element ref="ProfiloTrasmissione" minOccurs="0"/> <xsd:element ref="Sequenza" minOccurs="0"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ListaEccezioni"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Eccezione" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ListaRiscontri"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Riscontro" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="ListaTrasmissioni"> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:complexType> <xsd:sequence> <xsd:element ref="Trasmissione" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Messaggio"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Identificatore"/> <xsd:element ref="OraRegistrazione"/> <xsd:element ref="RiferimentoMessaggio" minOccurs="0"/> <xsd:element ref="Scadenza" minOccurs="0"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Mittente"> <xsd:complexType> <xsd:sequence> <xsd:element ref="IdentificativoParte" maxOccurs="unbounded"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="OraRegistrazione"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:dateTime"> <xsd:attribute name="tempo" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:string"> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:enumeration value="EGOV_IT_Locale"/> <xsd:enumeration value="EGOV_IT_SPC"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="Origine"> <xsd:complexType> <xsd:sequence> <xsd:element ref="IdentificativoParte"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:simpleType name="ProfiloCollaborazioneBaseType"> <xsd:restriction base="xsd:string"> <xsd:enumeration value="EGOV_IT_MessaggioSingoloOneWay"/> <xsd:enumeration value="EGOV_IT_ServizioSincrono"/> <xsd:enumeration value="EGOV_IT_ServizioAsincronoSimmetrico"/> <xsd:enumeration value="EGOV_IT_ServizioAsincronoAsimmetrico"/> </xsd:restriction> </xsd:simpleType> <xsd:element name="ProfiloCollaborazione"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="ProfiloCollaborazioneBaseType"> <xsd:attribute name="servizioCorrelato" type="xsd:string" use="optional"/> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:attribute name="tipo" use="optional"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="URL"/> <xsd:enumeration value="WSDL"/> <xsd:enumeration value="LDAP"/> <xsd:enumeration value="UDDI"/> <xsd:enumeration value="ebXMLRegistry"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="ProfiloTrasmissione"> <xsd:complexType> <xsd:attribute name="inoltro" default="EGOV_IT_PIUDIUNAVOLTA"> <xsd:simpleType> <xsd:restriction base="xsd:string"> <xsd:enumeration value="EGOV_IT_ALPIUUNAVOLTA"/> <xsd:enumeration value="EGOV_IT_PIUDIUNAVOLTA"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:attribute name="confermaRicezione" type="xsd:boolean" default="false"/> </xsd:complexType> </xsd:element> <xsd:element name="Riferimento"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Schema"/> <xsd:element ref="Titolo"/> </xsd:sequence> <xsd:attribute name="href" type="xsd:anyURI" use="required"/> <xsd:attribute name="role" type="xsd:string" use="required"/> <xsd:attribute ref="id" use="required"/> </xsd:complexType> </xsd:element> <xsd:element name="RiferimentoMessaggio" type="IdentificatoreType"/> <xsd:element name="Riscontro"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Identificatore"/> <xsd:element ref="OraRegistrazione"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="Scadenza" type="xsd:dateTime"/> <xsd:element name="Schema"> <xsd:complexType> <xsd:attribute name="posizione" type="xsd:anyURI" use="required"/> </xsd:complexType> </xsd:element> <xsd:element name="Sequenza"> <xsd:complexType> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:attribute name="numeroProgressivo" use="required"> <xsd:simpleType> <xsd:restriction base="xsd:positiveInteger"> <xsd:pattern value="\d{7}"/> </xsd:restriction> </xsd:simpleType> </xsd:attribute> </xsd:complexType> </xsd:element> <xsd:element name="Servizio"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="tipo" type="xsd:string" use="required"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="Titolo"> <xsd:complexType> <xsd:simpleContent> <xsd:extension base="xsd:string"> <xsd:attribute name="Lingua" type="xsd:language" use="optional" default="it"/> </xsd:extension> </xsd:simpleContent> </xsd:complexType> </xsd:element> <xsd:element name="Trasmissione"> <xsd:complexType> <xsd:sequence> <xsd:element ref="Origine"/> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice A: Schema XML della descrizione della Busta e-Gov Lucio Lecce ______________________________________________________________________ <xsd:element ref="Destinazione"/> <xsd:element ref="OraRegistrazione"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:attribute name="id" type="xsd:ID"/> </xsd:schema> envelopeMustUnderstandActorDef-.xsd <?xml version='1.0' encoding='UTF-8' ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://schemas.xmlsoap.org/soap/envelope/" targetNamespace="http://schemas.xmlsoap.org/soap/envelope/" > <xs:attribute name="mustUnderstand" type="xs:string" default="0" /> <xs:attribute name="actor" type="xs:anyURI" /> </xs:schema> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ Appendice B: Schema XML della descrizione della PDD sviluppata DefinizionePorta.wsdl <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="DefinizionePorta" xmlns:typens="DefinizionePorta" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" name="DefinizionePorta" targetNamespace="DefinizionePorta"> <wsdl:import namespace="DefinizionePorta" location="InterfacciaDefinitoria.xsd"> </wsdl:import> <wsdl:types> </wsdl:types> <wsdl:message name="richiestaOneWay_Operation_Msg"> <wsdl:part type="typens:richiesta_oneWay_operation_type" name="richiestaOneWay_Operation_Msg"/> </wsdl:message> <wsdl:message name="richiestaSincrona_Operation_Msg"> <wsdl:part type="typens:richiesta_sincrona_operation_type" name="richiestaSincrona_Operation_Msg"/> </wsdl:message> <wsdl:message name="rispostaSincrona_Operation_Msg"> <wsdl:part type="typens:risposta_sincrona_operation_type" name="rispostaSincrona_Operation_Msg"/> </wsdl:message> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ <wsdl:message name="richiestaAsincronaSimmetrica_Operation_Msg"> <wsdl:part type="typens:richiesta_asincronaSimmetrica_operation_type" name="richiestaAsincronaSimmetrica_Operation_Msg"/> </wsdl:message> <wsdl:message name="rispostaAsincronaSimmetrica_Operation_Msg"> <wsdl:part type="typens:risposta_asincronaSimmetrica_operation_type" name="rispostaAsincronaSimmetrica_Operation_Msg"/> </wsdl:message> <wsdl:message name="ricevutaAsincronaSimmetrica_Operation_Msg"> <wsdl:part name="ricevutaAsincronaSimmetrica_Operation_Msg" type="typens:ricevuta_asincronaSimmetrica_operation_type"/> </wsdl:message> <wsdl:message name="richiestaAsincronaAsimmetrica_Operation_Msg"> <wsdl:part type="typens:richiesta_asincronaAsimmetrica_operation_type" name="richiestaAsincronaAsimmetrica_Operation_Msg"/> </wsdl:message> <wsdl:message name="richiestaStatoAsincronaAsimmetrica_Operation_Msg"> <wsdl:part type="typens:richiestaStato_asincronaAsimmetrica_operation_ type" name="richiestaStatoAsincronaAsimmetrica_Operation_Msg"/> </wsdl:message> <wsdl:message name="ricevutaAsincronaAsimmetrica_Operation_Msg"> <wsdl:part type="typens:ricevuta_asincronaAsimmetrica_operation_type" name="ricevutaAsincronaAsimmetrica_Operation_Msg"/> </wsdl:message> <wsdl:message name="rispostaIndicazioneStatoAsincronaAsimmetrica_Operation_Msg "> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ <wsdl:part type="typens:risposta_asincronaAsimmetrica_operation_type" name="rispostaAsincronaAsimmetrica_Operation_Msg"/> </wsdl:message> <wsdl:portType name="ServizioOneWay"> <wsdl:operation name="operazioneOneWay"> <wsdl:input message="tns:richiestaOneWay_Operation_Msg"/> </wsdl:operation> </wsdl:portType> <wsdl:portType name="ServizioSincrono"> <wsdl:operation name="add"> <wsdl:input message="tns:richiestaSincrona_Operation_Msg" /> <wsdl:output message="tns:rispostaSincrona_Operation_Msg"/> </wsdl:operation> </wsdl:portType> <wsdl:portType name="ServizioAsincronoSimmetricoRichiesta"> <wsdl:operation name="subtract"> <wsdl:input message="tns:richiestaAsincronaSimmetrica_Operation_M sg" /> <wsdl:output message="tns:ricevutaAsincronaSimmetrica_Operation_Ms g"/> </wsdl:operation> </wsdl:portType> <wsdl:portType name="ServizioAsincronoSimmetricoNotifica"> <wsdl:operation name="servizioNotifica"> <wsdl:input message="tns:rispostaAsincronaSimmetrica_Operation_Ms g"> </wsdl:input> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ <wsdl:output message="tns:ricevutaAsincronaSimmetrica_Operation_Ms g"> </wsdl:output> </wsdl:operation> </wsdl:portType> <wsdl:portType name="ServizioAsincronoAsimmetricoRichiesta"> <wsdl:operation name="subtract"> <wsdl:input message="tns:richiestaAsincronaAsimmetrica_Operation_ Msg" /> <wsdl:output message="tns:ricevutaAsincronaAsimmetrica_Operation_M sg"/> </wsdl:operation> </wsdl:portType> <wsdl:portType name="ServizioAsincronoAsimmetricoPolling"> <wsdl:operation name="servizioPolling"> <wsdl:input message="tns:richiestaStatoAsincronaAsimmetrica_Opera tion_Msg" /> <wsdl:output message="tns:rispostaIndicazioneStatoAsincronaAsimmet rica_Operation_Msg"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="ServizioOneWay" type="tns:ServizioOneWay"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="operazioneOneWay"> <soap:operation soapAction="http://www.pdd.cnipa.it/OneWayInterfaccia/operazione OneWay"/> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ <wsdl:input> <soap:body use="literal" parts="tns:richiestaOneWay_Operation_Msg"/> </wsdl:input> </wsdl:operation> </wsdl:binding> <wsdl:binding name="ServizioSincrono" type="tns:ServizioSincrono"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="add"> <soap:operation soapAction="http://www.pdd.cnipa.it/SincronaInterfaccia/add"/> <wsdl:input> <soap:body use="literal" parts="tns:richiestaSincrona_Operation_Msg"/> </wsdl:input> <wsdl:output> <soap:body use="literal" parts="tns:rispostaSincrona_Operation_Msg"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="ServizioAsincronoSimmetricoRichiesta" type="tns:ServizioAsincronoSimmetricoRichiesta"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="subtract"> <soap:operation soapAction="http://www.pdd.cnipa.it/AsincronaSimmetricaInterfacc ia/subtract"/> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ <wsdl:input> <soap:body use="literal" parts="tns:richiestaAsincronaSimmetrica_Operation_Msg"/> </wsdl:input> <wsdl:output> <soap:body use="literal" parts="tns:ricevutaAsincronaSimmetrica_Operation_Msg"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="ServizioAsincronoSimmetricoNotifica" type="tns:ServizioAsincronoSimmetricoNotifica"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="servizioNotifica"> <soap:operation soapAction="http://www.pdd.cnipa.it/AsincronaSimmetricaInterfacc ia/servizioNotifica"/> <wsdl:input> <soap:body use="literal" parts="tns:rispostaAsincronaSimmetrica_Operation_Msg"/> </wsdl:input> <wsdl:output> <soap:body use="literal" parts="tns:ricevutaAsincronaSimmetrica_Operation_Msg"/> </wsdl:output> </wsdl:operation> </wsdl:binding> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ <wsdl:binding name="ServizioAsincronoAsimmetricoRichiesta" type="tns:ServizioAsincronoAsimmetricoRichiesta"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="subtract"> <soap:operation soapAction="http://www.pdd.cnipa.it/AsincronaAsimmetricaInterfac cia/subtract"/> <wsdl:input> <soap:body use="literal" parts="tns:richiestaAsincronaAsimmetrica_Operation_Msg"/> </wsdl:input> <wsdl:output> <soap:body use="literal" parts="tns:ricevutaAsincronaAsimmetrica_Operation_Msg"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:binding name="ServizioAsincronoAsimmetricoPolling" type="tns:ServizioAsincronoAsimmetricoPolling"> <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/> <wsdl:operation name="servizioPolling"> <soap:operation soapAction="http://www.pdd.cnipa.it/AsincronaAsimmetricaInterfac cia/servizioPolling"/> <wsdl:input> <soap:body use="literal" parts="tns:richiestaStatoAsincronaAsimmetrica_Operation_Msg"/> </wsdl:input> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ <wsdl:output> <soap:body use="literal" parts="tns:rispostaIndicazioneStatoAsincronaAsimmetrica_Operatio n_Msg"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="ServizioOneWay"> <wsdl:port name="ServizioOneWayPort" binding="tns:ServizioOneWay"> <soap:address location="http://192.168.58.1:8080/axis/services/ServizioOneWayP ort"/> </wsdl:port> </wsdl:service> <wsdl:service name="ServizioSincrono"> <wsdl:port name="ServizioSincronoPort" binding="tns:ServizioSincrono"> <soap:address location="http://192.168.58.1:8080/axis/services/ServizioSincron oPort"/> </wsdl:port> </wsdl:service> <wsdl:service name="ServizioAsincronoSimmetricoRichiesta"> <wsdl:port name="ServizioAsincronoSimmetricoRichiestaPort" binding="tns:ServizioAsincronoSimmetricoRichiesta"> <soap:address location="http://192.168.58.1:8080/axis/services/ServizioAsincro noSimmetricoRichiestaPort"/> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ </wsdl:port> </wsdl:service> <wsdl:service name="ServizioAsincronoSimmetricoNotifica"> <wsdl:port name="ServizioAsincronoSimmetricoNotificaPort" binding="tns:ServizioAsincronoSimmetricoNotifica"> <soap:address location="http://192.168.58.1:8080/axis/services/ServizioAsincro noSimmetricoNotificaPort"/> </wsdl:port> </wsdl:service> <wsdl:service name="ServizioAsincronoAsimmetricoRichiesta"> <wsdl:port name="ServizioAsincronoAsimmetricoRichiestaPort" binding="tns:ServizioAsincronoAsimmetricoRichiesta"> <soap:address location="http://192.168.58.1:8080/axis/services/ServizioAsincro noAsimmetricoRichiestaPort"/> </wsdl:port> </wsdl:service> <wsdl:service name="ServizioAsincronoAsimmetricoPolling"> <wsdl:port name="ServizioAsincronoAsimmetricoPollingPort" binding="tns:ServizioAsincronoAsimmetricoPolling"> <soap:address location="http://192.168.58.1:8080/axis/services/ServizioAsincro noAsimmetricoPollingPort"/> </wsdl:port> </wsdl:service> </wsdl:definitions> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ InterfacciaDefinitoria.xsd <?xml version="1.0" encoding="UTF-8"?> <xs:schema targetNamespace="DefinizionePorta" attributeFormDefault="unqualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="richiesta_oneWay_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> <xs:complexType name="richiesta_sincrona_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> <xs:complexType name="risposta_sincrona_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> <xs:complexType name="richiesta_asincronaSimmetrica_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> <xs:complexType name="ricevuta_asincronaSimmetrica_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ <xs:complexType name="risposta_asincronaSimmetrica_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> <xs:complexType name="richiesta_asincronaAsimmetrica_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> <xs:complexType name="ricevuta_asincronaAsimmetrica_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> <xs:complexType name="risposta_asincronaAsimmetrica_operation_type"> <xs:simpleContent> <xs:extension base="xs:string"/> </xs:simpleContent> </xs:complexType> <xs:complexType name="richiestaStato_asincronaAsimmetrica_operation_type"> <xs:simpleContent> <xs:extension base="xs:string" /> </xs:simpleContent> </xs:complexType> </xs:schema> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice B: Schema XML della descrizione della PDD sviluppata Lucio Lecce ______________________________________________________________________ Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ Appendice C: Codice della PDD sviluppata richiesta-default.xml <?xml version="1.0" encoding="UTF-8"?> <SOAP_ENV:Envelope xmlns:SOAP_ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP_ENV:Header xmlns:SOAP_ENV="http://schemas.xmlsoap.org/soap/envelope/"> <eGov_IT:Intestazione xmlns:eGov_IT="http://www.cnipa.it/schemas/2003/eGovIT/Busta1_0/ " SOAP_ENV:actor="http://www.cnipa.it/eGov_it/portadominio" SOAP_ENV:mustUnderstand="1"> <eGov_IT:IntestazioneMessaggio> <eGov_IT:Mittente> <eGov_IT:IdentificativoParte tipo="CodicePA">ParteA</eGov_IT:IdentificativoP arte> </eGov_IT:Mittente> <eGov_IT:Destinatario> <eGov_IT:IdentificativoParte tipo="CodicePA">ParteB</eGov_IT:IdentificativoP arte> </eGov_IT:Destinatario> <eGov_IT:ProfiloCollaborazione></eGov_IT:ProfiloCollaborazione> <eGov_IT:Servizio tipo="TEST"></eGov_IT:Servizio> <eGov_IT:Azione></eGov_IT:Azione> <eGov_IT:Messaggio> <eGov_IT:Identificatore> </eGov_IT:Identificatore> <eGov_IT:OraRegistrazione tempo="EGOV_IT_SPC">2003-06-05T17:58:10 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ </eGov_IT:OraRegistrazione> <eGov_IT:Scadenza>2007-06-10T17:58:20 </eGov_IT:Scadenza> </eGov_IT:Messaggio> <eGov_IT:ProfiloTrasmissione inoltro="EGOV_IT_PIUDIUNAVOLTA"/> </eGov_IT:IntestazioneMessaggio> <eGov_IT:ListaTrasmissioni> <eGov_IT:Trasmissione> <eGov_IT:Origine> <eGov_IT:IdentificativoParte tipo="CodicePA" indirizzoTelematico=""> ParteA</eGov_IT:IdentificativoParte> </eGov_IT:Origine> <eGov_IT:Destinazione> <eGov_IT:IdentificativoParte tipo="CodicePA" indirizzoTelematico=""> ParteB</eGov_IT:IdentificativoParte> </eGov_IT:Destinazione> <eGov_IT:OraRegistrazione tempo="EGOV_IT_SPC">2003-06-05T17:58:10 </eGov_IT:OraRegistrazione> </eGov_IT:Trasmissione> </eGov_IT:ListaTrasmissioni> </eGov_IT:Intestazione> </SOAP_ENV:Header> </SOAP_ENV:Envelope> risposta-default.xml <?xml version="1.0" encoding="UTF-8"?> <SOAP_ENV:Envelope xmlns:SOAP_ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP_ENV:Header xmlns:SOAP_ENV="http://schemas.xmlsoap.org/soap/envelope/"> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ <eGov_IT:Intestazione xmlns:eGov_IT="http://www.cnipa.it/schemas/2003/eGovIT/Busta1_0/ " SOAP_ENV:actor="http://www.cnipa.it/eGov_it/portadominio" SOAP_ENV:mustUnderstand="1"> <eGov_IT:IntestazioneMessaggio> <eGov_IT:Mittente> <eGov_IT:IdentificativoParte tipo="CodicePA"></eGov_IT:IdentificativoParte> </eGov_IT:Mittente> <eGov_IT:Destinatario> <eGov_IT:IdentificativoParte tipo="CodicePA"></eGov_IT:IdentificativoParte> </eGov_IT:Destinatario> <eGov_IT:ProfiloCollaborazione></eGov_IT:ProfiloCollaborazione> <eGov_IT:Servizio tipo="TEST"></eGov_IT:Servizio> <eGov_IT:Azione></eGov_IT:Azione> <eGov_IT:Messaggio> <eGov_IT:Identificatore> </eGov_IT:Identificatore> <eGov_IT:OraRegistrazione tempo="EGOV_IT_SPC">2003-06-05T17:58:10 </eGov_IT:OraRegistrazione> <eGov_IT:Scadenza>2007-06-10T17:58:20 </eGov_IT:Scadenza> </eGov_IT:Messaggio> <eGov_IT:ProfiloTrasmissione inoltro="EGOV_IT_PIUDIUNAVOLTA"/> </eGov_IT:IntestazioneMessaggio> <eGov_IT:ListaTrasmissioni> <eGov_IT:Trasmissione> <eGov_IT:Origine> <eGov_IT:IdentificativoParte tipo="CodicePA" indirizzoTelematico=""> </eGov_IT:IdentificativoParte> </eGov_IT:Origine> Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ <eGov_IT:Destinazione> <eGov_IT:IdentificativoParte tipo="CodicePA" indirizzoTelematico=""> </eGov_IT:IdentificativoParte> </eGov_IT:Destinazione> <eGov_IT:OraRegistrazione tempo="EGOV_IT_SPC">2003-06-05T17:58:10 </eGov_IT:OraRegistrazione> </eGov_IT:Trasmissione> </eGov_IT:ListaTrasmissioni> </eGov_IT:Intestazione> </SOAP_ENV:Header> </SOAP_ENV:Envelope> log4j.properties #### Use two appenders, one to log to console,another to log to a file log4j.rootCategory=info, stdout, R #### First appender writes to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=[%5p] (%F) - %m%n%n #### Second appender writes to a file log4j.appender.R=org.apache.log4j.RollingFileAppender log4j.appender.R.File=C:\\Programmi\\Apache Group\\apache-tomcat5.5.12\\webapps\\axis\\WEB-INF\\classes\\logs\\PortaDiDominio.log # Control the maximum log file size log4j.appender.R.MaxFileSize=6MB # Archive log files (backup files) log4j.appender.R.MaxBackupIndex=0 log4j.appender.R.layout=org.apache.log4j.PatternLayout log4j.appender.R.layout.ConversionPattern=%d [%-5p] (%F) - %m%n%n Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ FormClient.java package testClasses; import java.awt.*; import java.awt.event.*; public class FormClient extends Frame implements WindowListener,ActionListener { private Label frase, frase2, frase3, frase4, indirizzoclient,indirizzoserver, servizio, metodo, firstpar, secondpar; private TextField indirizzoclient2, indirizzoserver2, servizio2, metodo2, firstpar2, secondpar2; private Button pulsanteOK, pulsanteKO; private Menu menu; private MenuItem profili[]; private MenuBar bar; private String profiloscelto = ""; // Costruttore della classe nel quale vengono instanziate tutte le variabili usate e viene invocato il metodo 'mostraFormInserimentoDati' public FormClient() { frase = new Label("Attenzione ai campi contrassegnati con"); frase2 = new Label("il simbolo (*) che sono obbligatori per"); frase3 = new Label("poter effettuare la corretta invocazione"); frase4 = new Label("di un servizio!!!"); indirizzoclient = new Label("Indirizzo telematico mittente (*): "); indirizzoserver = new Label("Indirizzo telematico destinatario (*): "); servizio = new Label("Nome del servizio (*): "); metodo = new Label("Nome del metodo (*): "); firstpar = new Label("Primo parametro metodo: "); secondpar = new Label("Secondo parametro metodo: "); indirizzoclient.setBackground(new Color(135,206,250)); indirizzoserver.setBackground(new Color(135,206,250)); servizio.setBackground(new Color(135,206,250)); metodo.setBackground(new Color(135,206,250)); firstpar.setBackground(new Color(135,206,250)); secondpar.setBackground(new Color(135,206,250)); frase.setBackground(Color.PINK); frase2.setBackground(Color.PINK); frase3.setBackground(Color.PINK); frase4.setBackground(Color.PINK); indirizzoclient2 = new TextField(); indirizzoserver2 = new TextField(); servizio2 = new TextField(); metodo2 = new TextField(); firstpar2 = new TextField(); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ secondpar2 = new TextField(); pulsanteOK = new Button("Conferma"); pulsanteKO = new Button("Pulisci"); menu = new Menu("Scegliere dal menu il Profilo Di Collaborazione desiderato (*)"); bar = new MenuBar(); profili = new MenuItem[4]; profili[0] = new MenuItem("Servizio profili[1] = new MenuItem("Servizio profili[2] = new MenuItem("Servizio profili[3] = new MenuItem("Servizio OneWay"); Sincrono"); Asincrono Simmetrico"); Asincrono Asimmetrico"); mostraFormInserimentoDati(); } // Metodo che si occupa dell'effettiva creazione della form private void mostraFormInserimentoDati() { int index = 0; setLayout(new GridLayout(9, 2, 10, 10)); add(indirizzoclient); add(indirizzoclient2); add(indirizzoserver); add(indirizzoserver2); add(servizio); add(servizio2); add(metodo); add(metodo2); add(firstpar); add(firstpar2); add(secondpar); add(secondpar2); add(frase); add(frase2); add(frase3); add(frase4); add(pulsanteOK); add(pulsanteKO); while(index < 4) { profili[index].addActionListener(this); menu.add(profili[index]); index++; } bar.add(menu); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ setMenuBar(bar); setTitle("Invocazione Di Un Servizio - Form Inserimento Dati"); setSize(450, 450); setVisible(true); addWindowListener(this); pulsanteOK.addActionListener(this); pulsanteKO.addActionListener(this); } // Metodo che gestisce gli eventi di tipo Button e MenuItem public void actionPerformed(ActionEvent e) { // Eventi di tipo Button if (e.getSource() instanceof Button) { // Pulsante 'Conferma' if ((e.getSource() == pulsanteOK) && (indirizzoclient2.getText().length() != 0) && (indirizzoserver2.getText().length() != 0) && (servizio2.getText().length() != 0) && (metodo2.getText().length() != 0) && (profiloscelto.length() != 0)) { // Impostazione delle variabili relative all'indirizzo telematico del mittente e destinatario TestClient.clientaddress = "http://" + indirizzoclient2.getText() + ":8080/axis/services/"; TestClient.serveraddress = "http://" + indirizzoserver2.getText() + ":8080/axis/services/"; // Impostazione della variabile relativa al servizio if((servizio2.getText()).equals("ServizioOneWay")) { TestClient.servizio = "ServizioOneWayPort"; } else if((servizio2.getText()).equals("ServizioSincrono")) { TestClient.servizio = "ServizioSincronoPort"; } else if((servizio2.getText()).equals("ServizioAsincronoSimmetrico")) { TestClient.servizio = "ServizioAsincronoSimmetricoRichiestaPort"; } else if((servizio2.getText()).equals("ServizioAsincronoAsimmetrico")) { TestClient.servizio = "ServizioAsincronoAsimmetricoRichiestaPort"; } else Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ { TestClient.servizio = servizio2.getText(); } // Impostazioni delle variabili relative al metodo, ai parametri e al profilo di collaborazione TestClient.metodo = metodo2.getText(); TestClient.parametro1 = firstpar2.getText(); TestClient.parametro2 = secondpar2.getText(); TestClient.profilo = profiloscelto; hide(); } // Pulsante 'Pulisci' if (e.getSource() == pulsanteKO) { indirizzoclient2.setText(""); indirizzoserver2.setText(""); servizio2.setText(""); metodo2.setText(""); firstpar2.setText(""); secondpar2.setText(""); profiloscelto = ""; } } // Eventi di tipo MenuItem if (e.getSource() instanceof MenuItem) { String item = ((MenuItem) e.getSource()).getLabel(); // Individuazione del profilo di collaborazione che è stato scelto if(item.equals(profili[0].getLabel())) { profiloscelto = "EGOV_IT_MessaggioSingoloOneWay"; } if(item.equals(profili[1].getLabel())) { profiloscelto = "EGOV_IT_ServizioSincrono"; } if(item.equals(profili[2].getLabel())) { profiloscelto = "EGOV_IT_ServizioAsincronoSimmetrico"; } if(item.equals(profili[3].getLabel())) { profiloscelto = "EGOV_IT_ServizioAsincronoAsimmetrico"; } } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ } // Metodi che gestiscono gli eventi di tipo Window delle finestre create public void windowClosing(WindowEvent e) { System.exit(0); } public void windowOpened(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } } ResponseGUI.java package testClasses; import java.awt.*; import java.awt.event.*; import javax.swing.JOptionPane; public class ResponseGUI extends Frame implements WindowListener,ActionListener { // Costruttore della classe public ResponseGUI(String risposta, String tiporisp) { // Se la stringa da visualizzare è di tipo 'normale' if(tiporisp.equals("normale")) { JOptionPane.showMessageDialog(this, risposta, "Messaggio di risposta", JOptionPane.INFORMATION_MESSAGE); System.exit(0); } // Se la stringa da visualizzare è di tipo 'normaleasincrono' else if(tiporisp.equals("normaleasincrono")) { JOptionPane.showMessageDialog(this, risposta, "Messaggio di risposta", JOptionPane.INFORMATION_MESSAGE); } // Se la stringa da visualizzare è di tipo 'da inviare' else if(tiporisp.equals("dainviare")) { // Gruppo di operazioni necessarie a formattare correttamente l'output della Busta-eGov String[] parti = risposta.split("<SOAP_ENV"); parti[1] = "\n<SOAP_ENV" + parti[1]; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ parti[2] = "\n<SOAP_ENV" + parti[2]; risposta = parti[0] + parti[1] + parti[2]; parti = risposta.split("<eGov_IT"); parti[1] = "\n <eGov_IT" + parti[1]; parti[2] = "\n <eGov_IT" + parti[2]; parti[3] = "\n <eGov_IT" + parti[3]; parti[4] = "\n <eGov_IT" + parti[4]; parti[5] = "\n <eGov_IT" + parti[5]; parti[6] = "\n <eGov_IT" + parti[6]; parti[7] = "\n <eGov_IT" + parti[7]; parti[8] = "\n <eGov_IT" + parti[8]; parti[9] = "\n <eGov_IT" + parti[9]; parti[10] = "\n <eGov_IT" + parti[10]; parti[11] = "\n <eGov_IT" + parti[11]; parti[12] = "\n <eGov_IT" + parti[12]; parti[13] = "\n <eGov_IT" + parti[13]; parti[14] = "\n <eGov_IT" + parti[14]; parti[15] = "\n <eGov_IT" + parti[15]; parti[16] = "\n <eGov_IT" + parti[16]; parti[17] = "\n <eGov_IT" + parti[17]; parti[18] = "\n <eGov_IT" + parti[18]; parti[19] = "\n <eGov_IT" + parti[19]; parti[20] = "\n <eGov_IT" + parti[20]; parti[21] = "\n <eGov_IT" + parti[21]; risposta = parti[0]; for(int i = 1; i < 22; i++) { risposta = risposta + parti[i]; } parti = risposta.split("</SOAP_ENV"); parti[1] = "\n</SOAP_ENV" + parti[1]; parti[2] = "\n</SOAP_ENV" + parti[2]; risposta = parti[0] + parti[1] + parti[2]; parti = risposta.split("</eGov_IT"); parti[1] = "</eGov_IT" + parti[1]; parti[2] = "\n </eGov_IT" + parti[2]; parti[3] = "</eGov_IT" + parti[3]; parti[4] = "\n </eGov_IT" + parti[4]; parti[5] = "</eGov_IT" + parti[5]; parti[6] = "</eGov_IT" + parti[6]; parti[7] = "</eGov_IT" + parti[7]; parti[8] = "</eGov_IT" + parti[8]; parti[9] = "</eGov_IT" + parti[9]; parti[10] = "</eGov_IT" + parti[10]; parti[11] = "\n </eGov_IT" + parti[11]; parti[12] = "\n </eGov_IT" + parti[12]; parti[13] = "</eGov_IT" + parti[13]; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ parti[14] = "\n </eGov_IT" + parti[14]; parti[15] = "</eGov_IT" + parti[15]; parti[16] = "\n </eGov_IT" + parti[16]; parti[17] = "</eGov_IT" + parti[17]; parti[18] = "\n </eGov_IT" + parti[18]; parti[19] = "\n </eGov_IT" + parti[19]; parti[20] = "\n </eGov_IT" + parti[20]; risposta = parti[0]; for(int i = 1; i < 21; i++) { risposta = risposta + parti[i]; } JOptionPane.showMessageDialog(this, risposta, "BustaeGov che sta per essere inviata...", JOptionPane.INFORMATION_MESSAGE); } // Se la stringa da visualizzare è di tipo 'da inviareasincrono' else if(tiporisp.equals("dainviareasincrono")) { // Gruppo di operazioni necessarie a formattare correttamente l'output della Busta-eGov String[] parti = risposta.split("<SOAP_ENV"); parti[1] = "\n<SOAP_ENV" + parti[1]; parti[2] = "\n<SOAP_ENV" + parti[2]; risposta = parti[0] + parti[1] + parti[2]; parti = risposta.split("<eGov_IT"); parti[1] = "\n <eGov_IT" + parti[1]; parti[2] = "\n <eGov_IT" + parti[2]; parti[3] = "\n <eGov_IT" + parti[3]; parti[4] = "\n <eGov_IT" + parti[4]; parti[5] = "\n <eGov_IT" + parti[5]; parti[6] = "\n <eGov_IT" + parti[6]; parti[7] = "\n <eGov_IT" + parti[7]; parti[8] = "\n <eGov_IT" + parti[8]; parti[9] = "\n <eGov_IT" + parti[9]; parti[10] = "\n <eGov_IT" + parti[10]; parti[11] = "\n <eGov_IT" + parti[11]; parti[12] = "\n <eGov_IT" + parti[12]; parti[13] = "\n <eGov_IT" + parti[13]; parti[14] = "\n <eGov_IT" + parti[14]; parti[15] = "\n <eGov_IT" + parti[15]; parti[16] = "\n <eGov_IT" + parti[16]; parti[17] = "\n <eGov_IT" + parti[17]; parti[18] = "\n <eGov_IT" + parti[18]; parti[19] = "\n <eGov_IT" + parti[19]; parti[20] = "\n <eGov_IT" + parti[20]; parti[21] = "\n <eGov_IT" + parti[21]; parti[22] = "\n <eGov_IT" + parti[22]; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ risposta = parti[0]; for(int i = 1; i < 23; i++) { risposta = risposta + parti[i]; } parti = risposta.split("</SOAP_ENV"); parti[1] = "\n</SOAP_ENV" + parti[1]; parti[2] = "\n</SOAP_ENV" + parti[2]; risposta = parti[0] + parti[1] + parti[2]; parti = risposta.split("</eGov_IT"); parti[1] = "</eGov_IT" + parti[1]; parti[2] = "\n </eGov_IT" + parti[2]; parti[3] = "</eGov_IT" + parti[3]; parti[4] = "\n </eGov_IT" + parti[4]; parti[5] = "</eGov_IT" + parti[5]; parti[6] = "</eGov_IT" + parti[6]; parti[7] = "</eGov_IT" + parti[7]; parti[8] = "</eGov_IT" + parti[8]; parti[9] = "</eGov_IT" + parti[9]; parti[10] = "</eGov_IT" + parti[10]; parti[11] = "</eGov_IT" + parti[11]; parti[12] = "\n </eGov_IT" + parti[12]; parti[13] = "\n </eGov_IT" + parti[13]; parti[14] = "</eGov_IT" + parti[14]; parti[15] = "\n </eGov_IT" + parti[15]; parti[16] = "</eGov_IT" + parti[16]; parti[17] = "\n </eGov_IT" + parti[17]; parti[18] = "</eGov_IT" + parti[18]; parti[19] = "\n </eGov_IT" + parti[19]; parti[20] = "\n </eGov_IT" + parti[20]; parti[21] = "\n </eGov_IT" + parti[21]; risposta = parti[0]; for(int i = 1; i < 22; i++) { risposta = risposta + parti[i]; } JOptionPane.showMessageDialog(this, risposta, "BustaeGov che sta per essere inviata...", JOptionPane.INFORMATION_MESSAGE); } // Se la stringa da visualizzare è di tipo 'inricezione' else if(tiporisp.equals("inricezione")) { // Gruppo di operazioni necessarie a formattare correttamente l'output della Busta-eGov String[] parti = risposta.split("<SOAP_ENV"); parti[1] = "\n<SOAP_ENV" + parti[1]; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ parti[2] = "\n<SOAP_ENV" + parti[2]; parti[3] = "\n<SOAP_ENV" + parti[3]; risposta = parti[0] + parti[1] + parti[2] + parti[3]; parti = risposta.split("<eGov_IT"); parti[1] = "\n <eGov_IT" + parti[1]; parti[2] = "\n <eGov_IT" + parti[2]; parti[3] = "\n <eGov_IT" + parti[3]; parti[4] = "\n <eGov_IT" + parti[4]; parti[5] = "\n <eGov_IT" + parti[5]; parti[6] = "\n <eGov_IT" + parti[6]; parti[7] = "\n <eGov_IT" + parti[7]; parti[8] = "\n <eGov_IT" + parti[8]; parti[9] = "\n <eGov_IT" + parti[9]; parti[10] = "\n <eGov_IT" + parti[10]; parti[11] = "\n <eGov_IT" + parti[11]; parti[12] = "\n <eGov_IT" + parti[12]; parti[13] = "\n <eGov_IT" + parti[13]; parti[14] = "\n <eGov_IT" + parti[14]; parti[15] = "\n <eGov_IT" + parti[15]; parti[16] = "\n <eGov_IT" + parti[16]; parti[17] = "\n <eGov_IT" + parti[17]; parti[18] = "\n <eGov_IT" + parti[18]; parti[19] = "\n <eGov_IT" + parti[19]; parti[20] = "\n <eGov_IT" + parti[20]; parti[21] = "\n <eGov_IT" + parti[21]; parti[22] = "\n <eGov_IT" + parti[22]; risposta = parti[0]; for(int i = 1; i < 23; i++) { risposta = risposta + parti[i]; } parti = risposta.split("</SOAP_ENV"); parti[1] = "\n</SOAP_ENV" + parti[1]; parti[2] = "</SOAP_ENV" + parti[2]; parti[3] = "\n</SOAP_ENV" + parti[3]; risposta = parti[0] + parti[1] + parti[2] + parti[3]; parti = risposta.split("</eGov_IT"); parti[1] = "</eGov_IT" + parti[1]; parti[2] = "\n </eGov_IT" + parti[2]; parti[3] = "</eGov_IT" + parti[3]; parti[4] = "\n </eGov_IT" + parti[4]; parti[5] = "</eGov_IT" + parti[5]; parti[6] = "</eGov_IT" + parti[6]; parti[7] = "</eGov_IT" + parti[7]; parti[8] = "</eGov_IT" + parti[8]; parti[9] = "</eGov_IT" + parti[9]; parti[10] = "</eGov_IT" + parti[10]; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ parti[11] = "</eGov_IT" + parti[11]; parti[12] = "\n </eGov_IT" + parti[12]; parti[13] = "\n </eGov_IT" + parti[13]; parti[14] = "</eGov_IT" + parti[14]; parti[15] = "\n </eGov_IT" + parti[15]; parti[16] = "</eGov_IT" + parti[16]; parti[17] = "\n </eGov_IT" + parti[17]; parti[18] = "</eGov_IT" + parti[18]; parti[19] = "\n </eGov_IT" + parti[19]; parti[20] = "\n </eGov_IT" + parti[20]; parti[21] = "\n </eGov_IT" + parti[21]; risposta = parti[0]; for(int i = 1; i < 22; i++) { risposta = risposta + parti[i]; } JOptionPane.showMessageDialog(this, risposta, "BustaeGov che e' stata appena ricevuta...", JOptionPane.INFORMATION_MESSAGE); } // Se la stringa da visualizzare è di tipo 'inricezioneasincrono' else if(tiporisp.equals("inricezioneasincrono")) { // Gruppo di operazioni necessarie a formattare correttamente l'output della Busta-eGov String[] parti = risposta.split("<SOAP_ENV"); parti[1] = "\n<SOAP_ENV" + parti[1]; parti[2] = "\n<SOAP_ENV" + parti[2]; parti[3] = "\n<SOAP_ENV" + parti[3]; risposta = parti[0] + parti[1] + parti[2] + parti[3]; parti = risposta.split("<eGov_IT"); parti[1] = "\n <eGov_IT" + parti[1]; parti[2] = "\n <eGov_IT" + parti[2]; parti[3] = "\n <eGov_IT" + parti[3]; parti[4] = "\n <eGov_IT" + parti[4]; parti[5] = "\n <eGov_IT" + parti[5]; parti[6] = "\n <eGov_IT" + parti[6]; parti[7] = "\n <eGov_IT" + parti[7]; parti[8] = "\n <eGov_IT" + parti[8]; parti[9] = "\n <eGov_IT" + parti[9]; parti[10] = "\n <eGov_IT" + parti[10]; parti[11] = "\n <eGov_IT" + parti[11]; parti[12] = "\n <eGov_IT" + parti[12]; parti[13] = "\n <eGov_IT" + parti[13]; parti[14] = "\n <eGov_IT" + parti[14]; parti[15] = "\n <eGov_IT" + parti[15]; parti[16] = "\n <eGov_IT" + parti[16]; parti[17] = "\n <eGov_IT" + parti[17]; parti[18] = "\n <eGov_IT" + parti[18]; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ parti[19] = "\n <eGov_IT" + parti[19]; parti[20] = "\n <eGov_IT" + parti[20]; parti[21] = "\n <eGov_IT" + parti[21]; parti[22] = "\n <eGov_IT" + parti[22]; parti[23] = "\n <eGov_IT" + parti[23]; risposta = parti[0]; for(int i = 1; i < 24; i++) { risposta = risposta + parti[i]; } parti = risposta.split("</SOAP_ENV"); parti[1] = "\n</SOAP_ENV" + parti[1]; parti[2] = "</SOAP_ENV" + parti[2]; parti[3] = "\n</SOAP_ENV" + parti[3]; risposta = parti[0] + parti[1] + parti[2] + parti[3]; parti = risposta.split("</eGov_IT"); parti[1] = "</eGov_IT" + parti[1]; parti[2] = "\n </eGov_IT" + parti[2]; parti[3] = "</eGov_IT" + parti[3]; parti[4] = "\n </eGov_IT" + parti[4]; parti[5] = "</eGov_IT" + parti[5]; parti[6] = "</eGov_IT" + parti[6]; parti[7] = "</eGov_IT" + parti[7]; parti[8] = "</eGov_IT" + parti[8]; parti[9] = "</eGov_IT" + parti[9]; parti[10] = "</eGov_IT" + parti[10]; parti[11] = "</eGov_IT" + parti[11]; parti[12] = "</eGov_IT" + parti[12]; parti[13] = "\n </eGov_IT" + parti[13]; parti[14] = "\n </eGov_IT" + parti[14]; parti[15] = "</eGov_IT" + parti[15]; parti[16] = "\n </eGov_IT" + parti[16]; parti[17] = "</eGov_IT" + parti[17]; parti[18] = "\n </eGov_IT" + parti[18]; parti[19] = "</eGov_IT" + parti[19]; parti[20] = "\n </eGov_IT" + parti[20]; parti[21] = "\n </eGov_IT" + parti[21]; parti[22] = "\n </eGov_IT" + parti[22]; risposta = parti[0]; for(int i = 1; i < 23; i++) { risposta = risposta + parti[i]; } JOptionPane.showMessageDialog(this, risposta, "BustaeGov che e' stata appena ricevuta...", JOptionPane.INFORMATION_MESSAGE); } // Se la stringa da visualizzare è di tipo 'erroreasincrono' Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ else if(tiporisp.equals("erroreasincrono")) { JOptionPane.showMessageDialog(this, risposta, "Messaggio di errore", JOptionPane.ERROR_MESSAGE); } // Se la stringa da visualizzare è di tipo 'errore' else { JOptionPane.showMessageDialog(this, risposta, "Messaggio di errore", JOptionPane.ERROR_MESSAGE); System.exit(0); } } // Metodo che gestisce gli eventi di tipo Button public void actionPerformed(ActionEvent e) { } // Metodi che gestiscono gli eventi di tipo Window delle finestre create public void windowClosing(WindowEvent e) { System.exit(0); } public void windowOpened(WindowEvent e) { } public void windowClosed(WindowEvent e) { } public void windowIconified(WindowEvent e) { } public void windowDeiconified(WindowEvent e) { } public void windowActivated(WindowEvent e) { } public void windowDeactivated(WindowEvent e) { } } TestClient.java package testClasses; import it.cnipa.www.schemas._003.egovit.busta1_0.*; import it.cnipa.www.schemas._003.egovit.busta1_0.impl.*; import DefinizionePorta.*; import import import import import java.io.*; java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; javax.xml.bind.JAXBException; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ public class TestClient { public static String clientaddress, serveraddress, servizio, metodo, parametro1, parametro2, profilo; private static String ammCode = "ParteA"; private static String portaCode = "ANGPD"; private static int numProg = (int)(Math.random() * 100); { public static void main(String [] args) throws Exception, JAXBException profilo = new String(); // servizio Creazione dell'interfaccia grafica della form per l'invocazione di un FormClient form = new FormClient(); // Attende finchè non sono stati confermati i dati inseriti nella form while(profilo.length() == 0) { } try { BustaeGovHandler messaggio = new BustaeGovHandler(); // Impostazione dell'endpoint della Porta Di Dominio da contattare String endpointURL = serveraddress + servizio; // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' String filename = "richiesta-default.xml"; FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } Intestazione intes = messaggio.sbustamentoHandler(sXML); // Se il caricamento del prototipo di Busta-eGov è fallito if(intes == null){ ResponseGUI risp = new ResponseGUI("Errore nello sbustamento dell'Intestazione del messaggio di default!! La BustaeGov risulta vuota!!", "errore"); } buon fine // Se il caricamento del prototipo di Busta-eGov è andato a if(intes != null) Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ { // Impostazione dell'identificatore del messaggio Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MM- dd_HH:mm"); String now = dateTime.format(data.getTime()); intes.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+"_"+ portaCode+"_"+numProg+"_"+now); // Per testare il controllo dell'autenticita' dell'identificatore del messaggio //intes.getIntestazioneMessaggio().getMessaggio().setIdentificatore("ParteA_ANGP D_1_2007-01-29_02:31"); // Impostazione dell'ora di registrazione del messaggio OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intes.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TrasmissioneType TTI = (TrasmissioneType)intes.getListaTrasmissioni().getTrasmissione().get(0); TTI.setOraRegistrazione(ora); // Impostazione degli indirizzi telematici del messaggio IdentificativoParteType IPT = TTI.getOrigine().getIdentificativoParte(); IPT.setIndirizzoTelematico(clientaddress); TTI.getOrigine().setIdentificativoParte(IPT); IPT = TTI.getDestinazione().getIdentificativoParte(); IPT.setIndirizzoTelematico(serveraddress); TTI.getDestinazione().setIdentificativoParte(IPT); // Impostazione del profilo di collaborazione e del servizio del messaggio intes.getIntestazioneMessaggio().getProfiloCollaborazione().setValue(profilo); intes.getIntestazioneMessaggio().getServizio().setValue(servizio); // Se il servizio invocato è 'ServizioOneWay' if(servizio.equals("ServizioOneWayPort")) { // Impostazione dell'azione del messaggio intes.getIntestazioneMessaggio().setAzione(metodo); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) sXML = messaggio.imbustamentoHandler(intes, false, null, false); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Se l'imbustamento è fallito vedi caso 'if', se l'imbustamento è andato a buon fine vedi caso 'else' if(sXML.length() == 0) { ResponseGUI risp = new ResponseGUI("Errore nell'imbustamento dell'Intestazione nel messaggio da inviare!! L'Intestazione risulta vuota!!", "errore"); } else { // Creazione dell'interfaccia grafica che mostra la Busta-eGov da inviare ResponseGUI risp = new ResponseGUI(sXML, "dainviare"); // Creazione del servizio ServizioOneWay_Service service = new ServizioOneWay_ServiceLocator(); dell'endpoint // Creazione della chiamata e impostazione ServizioOneWay_PortType call = service.getServizioOneWayPort(new java.net.URL(endpointURL)); // Realizzazione della chiamata Richiesta_oneWay_operation_type richiestaOneWay = new Richiesta_oneWay_operation_type(); richiestaOneWay.set_value(sXML); call.operazioneOneWay(richiestaOneWay); // Attende 5 sec poi termina l'applicazione Thread.currentThread().sleep(5000); System.exit(0); } } // Se il servizio invocato è 'ServizioSincrono' else if(servizio.equals("ServizioSincronoPort")) { // Impostazione dell'azione del messaggio intes.getIntestazioneMessaggio().setAzione(metodo + ":" + parametro1 + ":" + parametro2); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) sXML = messaggio.imbustamentoHandler(intes, false, null, false); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Se l'imbustamento è fallito vedi caso 'if', se l'imbustamento è andato a buon fine vedi caso 'else' if(sXML.length() == 0) { ResponseGUI risp = new ResponseGUI("Errore nell'imbustamento dell'Intestazione nel messaggio da inviare!! L'Intestazione risulta vuota!!", "errore"); } else { // Creazione dell'interfaccia grafica che mostra la Busta-eGov da inviare ResponseGUI risp = new ResponseGUI(sXML, "dainviare"); // Creazione del servizio ServizioSincrono_Service service = new ServizioSincrono_ServiceLocator(); // Creazione della chiamata e impostazione dell'endpoint ServizioSincrono_PortType call = service.getServizioSincronoPort(new java.net.URL(endpointURL)); // Realizzazione della chiamata Richiesta_sincrona_operation_type richiestaSincrona = new Richiesta_sincrona_operation_type(); richiestaSincrona.set_value(sXML); Risposta_sincrona_operation_type rispostaSincrona = call.add(richiestaSincrona); // Attende finchè non riceve la risposta while(rispostaSincrona.get_value().length() == 0) { } // Se la risposta contiene errori vedi caso 'if', se la risposta è corretta vedi caso 'else' if(rispostaSincrona.get_value().contains("Errore")) { // Creazione dell'interfaccia grafica che mostra la Busta-eGov ricevuta String XMLrisp = rispostaSincrona.get_value(); risp = new ResponseGUI(XMLrisp, "inricezione"); // il messaggio di risposta } else Creazione dell'interfaccia grafica che mostra String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "errore"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ { la Busta-eGov ricevuta // Creazione dell'interfaccia grafica che mostra String XMLrisp = rispostaSincrona.get_value(); risp = new ResponseGUI(XMLrisp, "inricezione"); // il messaggio di risposta Creazione dell'interfaccia grafica che mostra String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "normale"); } } } // Se il servizio invocato è 'ServizioAsincronoSimmetrico' else if(servizio.equals("ServizioAsincronoSimmetricoRichiestaPort")) { // Impostazione dell'azione del messaggio intes.getIntestazioneMessaggio().setAzione(metodo + ":" + parametro1 + ":" + parametro2); // Impostazione del servizio correlato e della collaborazione del messaggio intes.getIntestazioneMessaggio().getProfiloCollaborazione().setServizioCorrelato("S ervizioAsincronoSimmetricoNotificaPort"); intes.getIntestazioneMessaggio().setCollaborazione(intes.getIntestazioneMessaggio ().getMessaggio().getIdentificatore()); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) sXML = messaggio.imbustamentoHandler(intes, false, null, false); // Se l'imbustamento è fallito vedi caso 'if', se l'imbustamento è andato a buon fine vedi caso 'else' if(sXML.length() == 0) { ResponseGUI risp = new ResponseGUI("Errore nell'imbustamento dell'Intestazione nel messaggio da inviare!! L'Intestazione risulta vuota!!", "errore"); } else { // Creazione dell'interfaccia grafica che mostra la Busta-eGov da inviare Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ "dainviareasincrono"); ResponseGUI risp = new ResponseGUI(sXML, // Creazione del servizio ServizioAsincronoSimmetricoRichiesta_Service service = new ServizioAsincronoSimmetricoRichiesta_ServiceLocator(); // Creazione della chiamata e impostazione dell'endpoint ServizioAsincronoSimmetricoRichiesta_PortType call = service.getServizioAsincronoSimmetricoRichiestaPort(new java.net.URL(endpointURL)); // Realizzazione della chiamata Richiesta_asincronaSimmetrica_operation_type richiestaAsincronaSim = new Richiesta_asincronaSimmetrica_operation_type(); richiestaAsincronaSim.set_value(sXML); Ricevuta_asincronaSimmetrica_operation_type rispostaAsincronaSim = call.subtract(richiestaAsincronaSim); // Attende finchè non riceve la risposta while(rispostaAsincronaSim.get_value().length() == 0) {} // Se la risposta contiene errori vedi caso 'if', se la risposta è corretta vedi caso 'else' if(rispostaAsincronaSim.get_value().contains("Errore")) { // Creazione dell'interfaccia grafica che mostra la Busta-eGov ricevuta String XMLrisp = rispostaAsincronaSim.get_value(); risp = new ResponseGUI(XMLrisp, "inricezioneasincrono"); // il messaggio di risposta Creazione dell'interfaccia grafica che mostra String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "errore"); } else { la Busta-eGov ricevuta // Creazione dell'interfaccia grafica che mostra String XMLrisp = rispostaAsincronaSim.get_value(); risp = new ResponseGUI(XMLrisp, "inricezioneasincrono"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // il messaggio di risposta } Creazione dell'interfaccia grafica che mostra String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "normale"); } } // Se il servizio invocato è 'ServizioAsincronoAsimmetrico' else if(servizio.equals("ServizioAsincronoAsimmetricoRichiestaPort")) { // Impostazione dell'azione del messaggio intes.getIntestazioneMessaggio().setAzione(metodo + ":" + parametro1 + ":" + parametro2); // Impostazione della collaborazione del messaggio intes.getIntestazioneMessaggio().setCollaborazione(intes.getIntestazioneMessaggio ().getMessaggio().getIdentificatore()); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) sXML = messaggio.imbustamentoHandler(intes, false, null, false); // Se l'imbustamento è fallito vedi caso 'if', se l'imbustamento è andato a buon fine vedi caso 'else' if(sXML.length() == 0) { ResponseGUI risp = new ResponseGUI("Errore nell'imbustamento dell'Intestazione nel messaggio da inviare!! L'Intestazione risulta vuota!!", "erroreasincrono"); } else { // Creazione dell'interfaccia grafica che mostra la Busta-eGov da inviare ResponseGUI risp = new ResponseGUI(sXML, "dainviareasincrono"); // Creazione del servizio ServizioAsincronoAsimmetricoRichiesta_Service service = new ServizioAsincronoAsimmetricoRichiesta_ServiceLocator(); dell'endpoint // Creazione della chiamata e impostazione Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ ServizioAsincronoAsimmetricoRichiesta_PortType call = service.getServizioAsincronoAsimmetricoRichiestaPort(new java.net.URL(endpointURL)); // Realizzazione della chiamata Richiesta_asincronaAsimmetrica_operation_type richiestaAsincronaAsim = new Richiesta_asincronaAsimmetrica_operation_type(); richiestaAsincronaAsim.set_value(sXML); Ricevuta_asincronaAsimmetrica_operation_type ricevutaAsincronaAsim = call.subtract(richiestaAsincronaAsim); // Attende finchè non riceve la ricevuta while(ricevutaAsincronaAsim.get_value().length() == 0) {} // Se la ricevuta contiene errori vedi caso 'if', se la risposta è corretta vedi caso 'else' if(ricevutaAsincronaAsim.get_value().contains("Errore")) { // Creazione dell'interfaccia grafica che mostra la Busta-eGov ricevuta String XMLrisp = ricevutaAsincronaAsim.get_value(); risp = new ResponseGUI(XMLrisp, "inricezioneasincrono"); // il messaggio di ricevuta Creazione dell'interfaccia grafica che mostra String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "erroreasincrono"); la Busta-eGov ricevuta } else { // Creazione dell'interfaccia grafica che mostra String XMLrisp = ricevutaAsincronaAsim.get_value(); risp = new ResponseGUI(XMLrisp, "inricezioneasincrono"); il messaggio di ricevuta // Creazione dell'interfaccia grafica che mostra String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "normaleasincrono"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Sbustamento della Busta-eGov del messaggio di ricevuta in un oggetto di tipo 'Intestazione' Intestazione intesrisp = messaggio.sbustamentoHandler(XMLrisp); // Impostazione dell'azione del messaggio di richiesta Stato intes.getIntestazioneMessaggio().setAzione("servizioPolling"); // Impostazione del servizio del messaggio di richiesta Stato intes.getIntestazioneMessaggio().getServizio().setValue(intesrisp.getIntestazioneM essaggio().getProfiloCollaborazione().getServizioCorrelato()); // Impostazione dell'endpoint della Porta Di Dominio da contattare endpointURL = TTI.getDestinazione().getIdentificativoParte().getIndirizzoTelematico() + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getServizioCorrelato (); // Variabile che determina se bisogna richiedere di nuovo lo stato boolean flag = true; // Ciclo 'while' che viene ripetuto finchè non si ottiene un messaggio di risposta corretto while(flag) { numProg = (int)(Math.random() * 100); // del messaggio di richiesta Stato Impostazione dell'identificatore data = Calendar.getInstance().getTime(); dateTime = new SimpleDateFormat("yyyyMM-dd_HH:mm"); now = dateTime.format(data.getTime()); intes.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+"_"+ portaCode+"_"+numProg+"_"+now); // del messaggio di richiesta Stato Impostazione dell'ora di registrazione ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intes.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ TTI = (TrasmissioneType)intes.getListaTrasmissioni().getTrasmissione().get(0); TTI.setOraRegistrazione(ora); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) sXML = messaggio.imbustamentoHandler(intes, false, null, false); // Se l'imbustamento è fallito vedi caso 'if', se l'imbustamento è andato a buon fine vedi caso 'else' if(sXML.length() == 0) { risp = new ResponseGUI("Errore nell'imbustamento dell'Intestazione nel messaggio da inviare!! L'Intestazione risulta vuota!!", "erroreasincrono"); } else { // Creazione dell'interfaccia grafica che mostra la Busta-eGov da inviare risp = new ResponseGUI(sXML, "dainviareasincrono"); // Creazione del servizio ServizioAsincronoAsimmetricoPolling_Service service2 = new ServizioAsincronoAsimmetricoPolling_ServiceLocator(); impostazione dell'endpoint // Creazione della chiamata e ServizioAsincronoAsimmetricoPolling_PortType call2 = service2.getServizioAsincronoAsimmetricoPollingPort(new java.net.URL(endpointURL)); // Realizzazione della chiamata RichiestaStato_asincronaAsimmetrica_operation_type richiestaStatoAsincronaAsim = new RichiestaStato_asincronaAsimmetrica_operation_type(); richiestaStatoAsincronaAsim.set_value(sXML); Risposta_asincronaAsimmetrica_operation_type rispostaAsincronaAsim = call2.servizioPolling(richiestaStatoAsincronaAsim); // Attende finchè non riceve la risposta while(rispostaAsincronaAsim.get_value().length() == 0) { } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Se la risposta contiene errori vedi caso 'if', se la risposta è corretta vedi caso 'else' if(rispostaAsincronaAsim.get_value().contains("Errore")) { // Creazione dell'interfaccia grafica che mostra la Busta-eGov ricevuta XMLrisp = rispostaAsincronaAsim.get_value(); risp = new ResponseGUI(XMLrisp, "inricezioneasincrono"); // grafica che mostra il messaggio di risposta Creazione dell'interfaccia parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "erroreasincrono"); } else { // grafica che mostra la Busta-eGov ricevuta Creazione dell'interfaccia XMLrisp = rispostaAsincronaAsim.get_value(); risp = new ResponseGUI(XMLrisp, "inricezioneasincrono"); // grafica che mostra il messaggio di risposta Creazione dell'interfaccia parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "normaleasincrono"); // Imposta la variabile al valore 'false' per uscire dal ciclo 'while' } } } } } System.exit(0); flag = false; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ } // else { Se il servizio invocato non è disponibile ResponseGUI risp = new ResponseGUI("Errore!! Invocazione di un servizio non disponibile!!", "errore"); } } } catch (Exception e) { ResponseGUI risp = new ResponseGUI(e.toString(), "errore"); } } } BustaeGovHandler.java package DefinizionePorta; import it.cnipa.www.schemas._003.egovit.busta1_0.*; import it.cnipa.www.schemas._003.egovit.busta1_0.impl.*; import java.io.*; import java.util.*; import import import import import import javax.xml.bind.JAXBContext; javax.xml.bind.JAXBException; javax.xml.bind.Unmarshaller; javax.xml.bind.Marshaller; javax.xml.parsers.*; javax.xml.soap.*; import import import import org.w3c.dom.Node; org.w3c.dom.Document; org.xml.sax.InputSource; org.apache.axis.utils.*; public class BustaeGovHandler { // Costruttore della classe public BustaeGovHandler(){ } // Metodo che gestisce la deserializzazione di una stringa XML(rappresentante l'oggetto 'Intestazione') in un oggetto di tipo 'Intestazione' Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ private static Intestazione unmarshallIntestazione(InputSource pSource) throws JAXBException { Intestazione retVal = new IntestazioneImpl(); JAXBContext context = JAXBContext.newInstance("it.cnipa.www.schemas._003.egovit.busta1_0"); Unmarshaller unmarshaller = context.createUnmarshaller(); retVal =(Intestazione) unmarshaller.unmarshal(pSource); return retVal; } // Metodo che gestisce la serializzazione di un oggetto di tipo 'Intestazione' in un oggetto 'Node' private static Node marshallIntestazione(Intestazione intestazione) throws JAXBException { try { DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = domFactory.newDocumentBuilder(); Document res = builder.newDocument(); JAXBContext context = JAXBContext.newInstance("it.cnipa.www.schemas._003.egovit.busta1_0"); Marshaller marshaller = context.createMarshaller(); marshaller.marshal(intestazione, res); return res.getFirstChild(); } catch(Exception e) { e.printStackTrace(); return null; } } // Metodo che applica la formattazione XML su una stringa private StringBuffer encode(String string) { int len = string.length(); StringBuffer buffer = new StringBuffer(len); char c; for (int i = 0 ; i < len ; i++) { switch (c = string.charAt(i)) { case '&': i++; c = string.charAt(i); if(c == 'l') { i++; c = string.charAt(i); if(c == 't') Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ { i++; c = string.charAt(i); if(c == ';') { buffer.append("<"); break; } } } if(c == 'g') { i++; c = string.charAt(i); if(c == 't') { i++; c = string.charAt(i); if(c == ';') { buffer.append(">"); break; } } } if(c == 'q') { i++; c = string.charAt(i); if(c == 'u') { i++; c = string.charAt(i); if(c == 'o') { i++; c = string.charAt(i); if(c == 't') { i++; c = string.charAt(i); if(c == ';') { buffer.append("\""); break; } } } } } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ default: buffer.append(c); } } return buffer; } // Metodo che gestisce l'imbustamento di un oggetto di tipo 'Intestazione' in stringa XML(Busta-eGov) public String imbustamentoHandler(Intestazione intest, boolean tipo, String risposta, boolean demone) throws Exception, JAXBException { if((intest.toString()).equals("")) { return ""; } // Serializzazione dell'oggetto 'Intestazione' in un oggetto 'Node' Node busta = marshallIntestazione(intest); MessageFactory mf = MessageFactory.newInstance(); SOAPMessage smsg = mf.createMessage(); SOAPPart sp = smsg.getSOAPPart(); SOAPEnvelope se = (SOAPEnvelope)sp.getEnvelope(); se.setPrefix("SOAP_ENV"); se.getBody().detachNode(); SOAPHeader sh = se.getHeader(); if(sh == null) { se.addHeader(); } sh.setPrefix("SOAP_ENV"); // Se il metodo viene invocato da uno dei demoni (caso 'if'), se il metodo viene invocato da // uno dei servizi messo a disposizione da Tomcat (caso 'else') if(demone) { // L'Intestazione viene aggiunta all'header della Busta-eGov sh.addTextNode(DOM2Writer.nodeToString(busta, true)); } else { // L'Intestazione viene aggiunta all'header della Busta-eGov sh.appendChild(busta); } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Se la variabile 'tipo' ha il valore 'true' un body viene aggiunto alla Busta-eGov if(tipo) { SOAPBody body = se.addBody(); body.setPrefix("SOAP_ENV"); body.addTextNode(risposta); } // Conversione della Busta-eGov in formato stringa String res = DOM2Writer.nodeToString(sp, true); String[] part = res.split("Z"); res = part[0] + part[1]; part = res.split("\\+01:00"); res = part[0] + part[1] + part[2]; // Se il metodo viene invocato da uno dei demoni if(demone) { // Applicazione della formattazione XML alla Busta-eGov in formato stringa StringBuffer buf = encode(res); res = buf.toString(); part = res.split(" xmlns:SOAPENV=\"http://schemas.xmlsoap.org/soap/envelope/\""); res = part[0] + part[1]; part = res.split(" xmlns:SOAP_ENV=\"http://schemas.xmlsoap.org/soap/envelope/\""); res = part[0] + " xmlns:SOAP_ENV=\"http://schemas.xmlsoap.org/soap/envelope/\"" + part[1] + part[2] + part[3]; } return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + res; } // Metodo che gestisce lo sbustamento di una stringa XML(Busta-eGov) in un oggetto di tipo 'Intestazione' public Intestazione sbustamentoHandler(String str) throws Exception, JAXBException { if (str.equals("")) { return null; } MessageFactory mf = MessageFactory.newInstance(); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ SOAPMessage smsg = mf.createMessage(new MimeHeaders(), new ByteArrayInputStream(str.getBytes())); SOAPPart sp = smsg.getSOAPPart(); SOAPEnvelope se = (SOAPEnvelope)sp.getEnvelope(); SOAPHeader sh = se.getHeader(); String intestazione =""; // Estrazione dalla Busta-eGov dell'oggetto 'Intestazione' in formato stringa Iterator headers = sh.extractAllHeaderElements(); while (headers.hasNext()) { SOAPHeaderElement he = (SOAPHeaderElement)headers.next(); intestazione = intestazione + DOM2Writer.nodeToString(he, true); } InputSource isource = new InputSource(new StringReader(intestazione)); Intestazione intes = new IntestazioneImpl(); // Deserializzazione della stringa XML(rappresentante l'oggetto 'Intestazione') in un oggetto 'Intestazione' intes = unmarshallIntestazione(isource); return intes; } } DbComunicazAsimmetricaHandler.java package DefinizionePorta; import java.sql.*; import java.io.*; public class DbComunicazAsimmetricaHandler implements Serializable{ // Variabile globale grazie alla quale si riesce a controllare che l'accesso alla tabella 'comunicazasimrisposte' sia sequenziale; // in tal modo le operazioni di prelievo, registrazione ed eliminazione di informazioni possono avvenire solamente in mutua esclusione private boolean flag = true; // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; // gestisce il prelievo dalla tabella 'comunicazasimrisposte' della riga corrispondente ad un determinato 'identificativo' public synchronized ResultSet get(String identif) Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ { while(flag == false) { try { wait(); } catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Class.forName("org.gjt.mm.mysql.Driver"); // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); Statement stmt = conn.createStatement(); String sql = "SELECT * FROM comunicazasimrisposte WHERE identificativo='"+ identif +"';"; ResultSet rset = stmt.executeQuery(sql); flag = true; notifyAll(); return rset; } catch(Exception e) { flag = true; notifyAll(); return null; } } // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; // gestisce l'eliminazione dalla tabella 'comunicazasimrisposte' della riga corrispondente ad un determinato 'identificativo' public synchronized void delete(String identif) { while(flag == false) { try { wait(); } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Class.forName("org.gjt.mm.mysql.Driver"); // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); Statement stmt = conn.createStatement(); String sql = "DELETE FROM comunicazasimrisposte WHERE identificativo='"+ identif +"';"; stmt.executeUpdate(sql); flag = true; notifyAll(); } catch(Exception e) { flag = true; notifyAll(); } } // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; // gestisce la registrazione nella tabella 'comunicazasimrisposte' di una nuova riga public synchronized void put(String identif, String risp) { while(flag == false) { try { wait(); } catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Class.forName("org.gjt.mm.mysql.Driver"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); String sql = "INSERT INTO comunicazasimrisposte (identificativo, risposta) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.clearParameters(); pstmt.setString(1, identif); pstmt.setString(2, risp); pstmt.executeUpdate(); pstmt.close(); conn.close(); } catch(Exception e) {} } flag = true; notifyAll(); } DbComunicazSimmetricaHandler.java package DefinizionePorta; import java.sql.*; import java.io.*; import org.apache.log4j.Logger; public class DbComunicazSimmetricaHandler implements Serializable{ // Variabile globale grazie alla quale si riesce a controllare che l'accesso alla tabella 'comunicazsimmetrica' sia sequenziale; // in tal modo le operazioni di prelievo, registrazione ed eliminazione di informazioni possono avvenire solamente in mutua esclusione private boolean flag = true; transient Logger log = Logger.getRootLogger(); // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // gestisce il prelievo dalla tabella 'comunicazsimmetrica' della riga con 'id' più basso public synchronized ResultSet get() { while(flag == false) { try { wait(); } catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Class.forName("org.gjt.mm.mysql.Driver"); // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); Statement stmt = conn.createStatement(); for(int i = 1; i < 1000; i++) { String sql = "SELECT * FROM comunicazsimmetrica WHERE id='"+ i +"';"; ResultSet rset = stmt.executeQuery(sql); if(rset.next()) { flag = true; notifyAll(); return rset; } } flag = true; notifyAll(); return null; } catch(Exception e) { log.error("L'elaborazione della richiesta di servizio asincrona simmetrica e' fallita!!"); log.error("Error Message : " + e.toString()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ flag = true; notifyAll(); return null; } } // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; // gestisce l'eliminazione dalla tabella 'comunicazsimmetrica' della riga corrispondente ad un determinato 'identificativo' public synchronized void delete(String identif) { while(flag == false) { try { wait(); } catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Class.forName("org.gjt.mm.mysql.Driver"); // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); Statement stmt = conn.createStatement(); String sql = "DELETE FROM comunicazsimmetrica WHERE identificativo='"+ identif +"';"; stmt.executeUpdate(sql); flag = true; notifyAll(); } catch(Exception e) { log.error("L'elaborazione della richiesta di servizio asincrona simmetrica e' fallita!!"); log.error("Error Message : " + e.toString()); flag = true; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ } notifyAll(); } // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; // gestisce la registrazione nella tabella 'comunicazsimmetrica' di una nuova riga public synchronized String put(String identif, String mitt, String dest, String par1, String par2) { String error = ""; while(flag == false) { try { wait(); } catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Class.forName("org.gjt.mm.mysql.Driver"); // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); String sql = "INSERT INTO comunicazsimmetrica (identificativo, mittente, destinatario, parametri) VALUES (?, ?, ?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.clearParameters(); pstmt.setString(1, identif); pstmt.setString(2, mitt); pstmt.setString(3, dest); pstmt.setString(4, par1 + ":" + par2); pstmt.executeUpdate(); pstmt.close(); conn.close(); } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ catch(Exception e) {error = e.toString();} flag = true; notifyAll(); return error; } } DbRichiestaAsimmetricaHandler.java package DefinizionePorta; import java.sql.*; import java.io.*; import org.apache.log4j.Logger; public class DbRichiestaAsimmetricaHandler implements Serializable{ // Variabile globale grazie alla quale si riesce a controllare che l'accesso alla tabella 'comunicazasimmetrica' sia sequenziale; // in tal modo le operazioni di prelievo, registrazione ed eliminazione di informazioni possono avvenire solamente in mutua esclusione private boolean flag = true; transient Logger log = Logger.getRootLogger(); // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; // gestisce il prelievo dalla tabella 'comunicazasimmetrica' della riga con 'id' più basso public synchronized ResultSet get() { while(flag == false) { try { wait(); } catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ Class.forName("org.gjt.mm.mysql.Driver"); // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); Statement stmt = conn.createStatement(); for(int i = 1; i < 1000; i++) { String sql = "SELECT * FROM comunicazasimmetrica WHERE id='"+ i +"';"; ResultSet rset = stmt.executeQuery(sql); if(rset.next()) { flag = true; notifyAll(); return rset; } } flag = true; notifyAll(); return null; } catch(Exception e) { log.error("L'elaborazione della richiesta di servizio asincrona asimmetrica e' fallita!!"); log.error("Error Message : " + e.toString()); flag = true; notifyAll(); return null; } } // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; // gestisce l'eliminazione dalla tabella 'comunicazasimmetrica' della riga corrispondente ad un determinato 'identificativo' public synchronized void delete(String identif) { while(flag == false) { try Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ { wait(); } catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Class.forName("org.gjt.mm.mysql.Driver"); // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); Statement stmt = conn.createStatement(); String sql = "DELETE FROM comunicazasimmetrica WHERE identificativo='"+ identif +"';"; stmt.executeUpdate(sql); flag = true; notifyAll(); } catch(Exception e) { log.error("L'elaborazione della richiesta di servizio asincrona asimmetrica e' fallita!!"); log.error("Error Message : " + e.toString()); } flag = true; notifyAll(); } // Metodo che, grazie all'attributo 'synchronized', possiede un lock e può essere acceduto solamente da un Thread per volta; // gestisce la registrazione nella tabella 'comunicazasimmetrica' di una nuova riga public synchronized String put(String identif, String par1, String par2) { String error = ""; while(flag == false) { try { Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ wait(); } catch(InterruptedException e) {} } flag = false; try { // Carica la driver class Class.forName("org.gjt.mm.mysql.Driver"); // Prova a connettersi al DB server. Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/SPCoop", "lcgp51gr", "lcgp51gr"); String sql = "INSERT INTO comunicazasimmetrica (identificativo, parametri) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.clearParameters(); pstmt.setString(1, identif); pstmt.setString(2, par1 + ":" + par2); pstmt.executeUpdate(); pstmt.close(); conn.close(); } catch(Exception e) {error = e.toString();} flag = true; notifyAll(); } return error; } HandlersStartup.java package DefinizionePorta; import java.io.*; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ public class HandlersStartup { public static void main(String[] args) throws Exception { DefinizionePorta.DbComunicazSimmetricaHandler dbsim = new DefinizionePorta.DbComunicazSimmetricaHandler(); DefinizionePorta.DbComunicazAsimmetricaHandler dbasim = new DefinizionePorta.DbComunicazAsimmetricaHandler(); DefinizionePorta.DbRichiestaAsimmetricaHandler dbric = new DefinizionePorta.DbRichiestaAsimmetricaHandler(); // Serializzazione su files dei tre oggetti ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("dbsim.dat")); out.writeObject(dbsim); out.close(); out = new ObjectOutputStream(new FileOutputStream("dbasim.dat")); out.writeObject(dbasim); out.close(); out = new ObjectOutputStream(new FileOutputStream("dbric.dat")); out.writeObject(dbric); out.close(); DefinizionePorta.ServizioAsincronoAsimmetricoHandler asim = new DefinizionePorta.ServizioAsincronoAsimmetricoHandler(); DefinizionePorta.NotificaAsincronaSimmetricaHandler sim = new DefinizionePorta.NotificaAsincronaSimmetricaHandler(); // Avvio dei due Thread asim.start(); sim.start(); } } NotificaAsincronaSimmetricaHandler.java package DefinizionePorta; import it.cnipa.www.schemas._003.egovit.busta1_0.*; import it.cnipa.www.schemas._003.egovit.busta1_0.impl.*; import import import import import import java.io.*; java.sql.*; java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; java.net.*; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ import org.apache.log4j.Logger; public class NotificaAsincronaSimmetricaHandler extends Thread { // Costruttore della classe public NotificaAsincronaSimmetricaHandler() {} // Metodo che contiene tutto ciò che sarà eseguito dal Thread public void run() { Logger log = Logger.getRootLogger(); try { BustaeGovHandler messaggio = new BustaeGovHandler(); Intestazione intesrisp = new IntestazioneImpl(); TrasmissioneType TTIrisp = new TrasmissioneTypeImpl(); String azione[] = null; String endpoint = ""; String ammCode = "ParteB"; String portaCode = "ANGPD"; int numProg = (int)(Math.random() * 100); // Variabile che determina se bisogna eseguire il ciclo 'while' ('true' --> Tomcat abilitato, 'false' --> Tomcat disabilitato) boolean flag = true; // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' String filename = ".\\..\\risposta-default.xml"; FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); // Se il caricamento del prototipo di Busta-eGov è fallito if(intesrisp == null){ log.error("Errore nello sbustamento dell'Intestazione del messaggio di risposta di default!! La BustaeGov risulta vuota!!"); } // buon fine Se il caricamento del prototipo di Busta-eGov è andato a Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ if(intesrisp != null) { // Impostazione del servizio e del profilo di collaborazione del messaggio di risposta intesrisp.getIntestazioneMessaggio().getServizio().setValue("ServizioAsincronoSim metricoNotificaPort"); intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().setValue("EGOV_IT _ServizioAsincronoSimmetrico"); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta intesrisp.getIntestazioneMessaggio().getMittente().getIdentificativoParte().setValue ("ParteB"); intesrisp.getIntestazioneMessaggio().getDestinatario().getIdentificativoParte().setV alue("ParteA"); TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().getIdentificativoParte().setValue("ParteB"); TTIrisp.getDestinazione().getIdentificativoParte().setValue("ParteA"); // Sleep necessario per ritardare l'esecuzione del ciclo 'while' finchè Tomcat non sarà totalmente inizializzato Thread.currentThread().sleep(10000); // Deserializzazione da file dell'oggetto 'DbComunicazSimmetricaHandler' ObjectInputStream inn = new ObjectInputStream(new FileInputStream("dbsim.dat")); DbComunicazSimmetricaHandler db = (DbComunicazSimmetricaHandler) inn.readObject(); inn.close(); abilitato // Ciclo 'while' che viene ripetuto finchè Tomcat è ancora while(flag) { // Prelievo dalla tabella 'comunicazsimmetrica' del db di una richiesta di servizio asincrona simmetrica ResultSet rset = db.get(); // Se il prelievo dalla tabella 'comunicazsimmetrica' del db di una richiesta di servizio asincrona simmetrica è andato a buon fine if(rset != null) { Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Prelievo dalla tabella 'comunicazsimmetrica' del db di una richiesta di servizio asincrona simmetrica effettuato con successo!!"); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di risposta intesrisp.getIntestazioneMessaggio().setCollaborazione(rset.getString("identificativo ")); intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio(rset. getString("identificativo")); messaggio di risposta // Impostazione degli indirizzi telematici del TTIrisp.getOrigine().getIdentificativoParte().setIndirizzoTelematico(rset.getString(" destinatario")); TTIrisp.getDestinazione().getIdentificativoParte().setIndirizzoTelematico(rset.getStr ing("mittente")); // risposta Impostazione dell'azione del messaggio di intesrisp.getIntestazioneMessaggio().setAzione("servizioNotifica"); // Impostazione dell'identificatore del messaggio di risposta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MM-dd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'ora di registrazione del messaggio di risposta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); log.info("ServizioAsincronoSimmetrico: Elaborazione della richiesta di servizio asincrona simmetrica in corso..."); azione = rset.getString("parametri").split(":"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ Integer i1 = new Integer(azione[0]); Integer i2 = new Integer(azione[1]); log.info("La differenza dei due valori e': " + (i1 - i2)); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "La differenza dei due valori e': " + (i1 - i2), true); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> servizioNotifica"); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta asincrono simmetrico in corso..."); // Creazione del servizio ServizioAsincronoSimmetricoNotifica_Service service = new ServizioAsincronoSimmetricoNotifica_ServiceLocator(); // Impostazione dell'endpoint della Porta Di Dominio da contattare endpoint = TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico() + intesrisp.getIntestazioneMessaggio().getServizio().getValue(); dell'endpoint // Creazione della chiamata e impostazione ServizioAsincronoSimmetricoNotifica_PortType call = service.getServizioAsincronoSimmetricoNotificaPort(new java.net.URL(endpoint)); // Realizzazione della chiamata Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ Risposta_asincronaSimmetrica_operation_type risposta = new Risposta_asincronaSimmetrica_operation_type(); risposta.set_value(res); Ricevuta_asincronaSimmetrica_operation_type ricevuta = call.servizioNotifica(risposta); // Attende finchè non riceve la ricevuta while(ricevuta.get_value().length() == 0) { } log.info("Ricezione di un messaggio di ricevuta asincrono simmetrico in corso..."); log.info("Sbustamento dell'Intestazione del messaggio..."); // Sbustamento della Busta-eGov del messaggio di ricevuta in un oggetto di tipo 'Intestazione' Intestazione intesricevuta = messaggio.sbustamentoHandler(ricevuta.get_value()); // Caricamento del file di log in una stringa filename = ".\\..\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); in = new DataInputStream(f); String testofile=""; while (in.available() !=0) { testofile = testofile+in.readLine(); } presente nel file di log // Se l'identificatore del messaggio di ricevuta è già if(testofile.contains(intesricevuta.getIntestazioneMessaggio().getMessaggio().getId entificatore())) { log.error("ServizioAsincronoSimmetrico: Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intesricevuta.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!"); } // Se l'identificatore del messaggio di ricevuta non è già presente nel file di log else { TrasmissioneType TTIricev = (TrasmissioneType)intesricevuta.getListaTrasmissioni().getTrasmissione().get(0); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Operazione di estrapolazione dal messaggio di ricevuta del contenuto del Body (localizzato in 'parti[0]') String[] parti = ricevuta.get_value().split("Body>"); parti = parti[1].split("</"); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio asincrono simmetrico ricevuto:"); log.info("Identificatore del messaggio --> " + intesricevuta.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesricevuta.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesricevuta.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesricevuta.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio( )); log.info("Indirizzo telematico mittente --> " + TTIricev.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIricev.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesricevuta.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesricevuta.getIntestazioneMessaggio().getAzione().toString()); // Se il messaggio di risposta NON è stato accettato if(ricevuta.get_value().contains("Errore")) { // Risposta rifiutata dal client log.error("ServizioAsincronoSimmetrico: Il messaggio di risposta asincrono simmetrico inviato NON e' stato accettato!!"); log.error("Messaggio d'errore: " + parti[0]); // else } Se il messaggio di risposta è stato accettato { // Risposta accettata dal client log.info("ServizioAsincronoSimmetrico: Il messaggio di risposta asincrono simmetrico inviato e' stato accettato!!"); log.info("Messaggio ricevuto: " + parti[0]); // Eliminazione dalla tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ db.delete(rset.getString("identificativo")); rset.close(); log.info("Eliminazione dalla tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica effettuata con successo!!"); } } } Thread.currentThread().sleep(3000); // Verifica se Tomcat è ancora abilitato tentando di creare un socket sulla porta 8080; // se riesce a creare il socket imposta la variabile 'flag' al valore 'true' (il ciclo 'while' sarà ripetuto), // se NON riesce a creare il socket imposta la variabile 'flag' al valore 'false' (il ciclo 'while' non sarà ripetuto) try { Socket sock = new Socket("localhost", 8080); flag = true; sock.close(); } catch(Exception e) { flag = false; } } } } catch(Exception e) { log.error("Error Message : " + e.toString()); } } } NotificaGUI.java package DefinizionePorta; import java.awt.*; import java.awt.event.*; import javax.swing.JOptionPane; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ public class NotificaGUI extends Frame implements WindowListener,ActionListener { // Costruttore della classe public NotificaGUI(String risposta, String tiporisp) { // Se la stringa da visualizzare è di tipo 'normale' if(tiporisp.equals("normale")) { JOptionPane.showMessageDialog(this, risposta, "Messaggio di risposta", JOptionPane.INFORMATION_MESSAGE); } // Se la stringa da visualizzare è di tipo 'inricezionesimmetrico' else if(tiporisp.equals("inricezionesimmetrico")) { // Gruppo di operazioni necessarie a formattare correttamente l'output della Busta-eGov String[] parti = risposta.split("<SOAP_ENV"); parti[1] = "\n<SOAP_ENV" + parti[1]; parti[2] = "\n<SOAP_ENV" + parti[2]; parti[3] = "\n<SOAP_ENV" + parti[3]; risposta = parti[0] + parti[1] + parti[2] + parti[3]; parti = risposta.split("<eGov_IT"); parti[1] = "\n <eGov_IT" + parti[1]; parti[2] = "\n <eGov_IT" + parti[2]; parti[3] = "\n <eGov_IT" + parti[3]; parti[4] = "\n <eGov_IT" + parti[4]; parti[5] = "\n <eGov_IT" + parti[5]; parti[6] = "\n <eGov_IT" + parti[6]; parti[7] = "\n <eGov_IT" + parti[7]; parti[8] = "\n <eGov_IT" + parti[8]; parti[9] = "\n <eGov_IT" + parti[9]; parti[10] = "\n <eGov_IT" + parti[10]; parti[11] = "\n <eGov_IT" + parti[11]; parti[12] = "\n <eGov_IT" + parti[12]; parti[13] = "\n <eGov_IT" + parti[13]; parti[14] = "\n <eGov_IT" + parti[14]; parti[15] = "\n <eGov_IT" + parti[15]; parti[16] = "\n <eGov_IT" + parti[16]; parti[17] = "\n <eGov_IT" + parti[17]; parti[18] = "\n <eGov_IT" + parti[18]; parti[19] = "\n <eGov_IT" + parti[19]; parti[20] = "\n <eGov_IT" + parti[20]; parti[21] = "\n <eGov_IT" + parti[21]; parti[22] = "\n <eGov_IT" + parti[22]; parti[23] = "\n <eGov_IT" + parti[23]; risposta = parti[0]; for(int i = 1; i < 24; i++) { Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ } risposta = risposta + parti[i]; parti = risposta.split("</SOAP_ENV"); parti[1] = "\n</SOAP_ENV" + parti[1]; parti[2] = "</SOAP_ENV" + parti[2]; parti[3] = "\n</SOAP_ENV" + parti[3]; risposta = parti[0] + parti[1] + parti[2] + parti[3]; parti = risposta.split("</eGov_IT"); parti[1] = "</eGov_IT" + parti[1]; parti[2] = "\n </eGov_IT" + parti[2]; parti[3] = "</eGov_IT" + parti[3]; parti[4] = "\n </eGov_IT" + parti[4]; parti[5] = "</eGov_IT" + parti[5]; parti[6] = "</eGov_IT" + parti[6]; parti[7] = "</eGov_IT" + parti[7]; parti[8] = "</eGov_IT" + parti[8]; parti[9] = "</eGov_IT" + parti[9]; parti[10] = "</eGov_IT" + parti[10]; parti[11] = "</eGov_IT" + parti[11]; parti[12] = "</eGov_IT" + parti[12]; parti[13] = "\n </eGov_IT" + parti[13]; parti[14] = "\n </eGov_IT" + parti[14]; parti[15] = "</eGov_IT" + parti[15]; parti[16] = "\n </eGov_IT" + parti[16]; parti[17] = "</eGov_IT" + parti[17]; parti[18] = "\n </eGov_IT" + parti[18]; parti[19] = "</eGov_IT" + parti[19]; parti[20] = "\n </eGov_IT" + parti[20]; parti[21] = "\n </eGov_IT" + parti[21]; parti[22] = "\n </eGov_IT" + parti[22]; risposta = parti[0]; for(int i = 1; i < 23; i++) { risposta = risposta + parti[i]; } JOptionPane.showMessageDialog(this, risposta, "BustaeGov che e' stata appena ricevuta...", JOptionPane.INFORMATION_MESSAGE); } // Se la stringa da visualizzare è di tipo 'da inviaresimmetrico' else if(tiporisp.equals("dainviaresimmetrico")) { // Gruppo di operazioni necessarie a formattare correttamente l'output della Busta-eGov String[] parti = risposta.split("<SOAP_ENV"); parti[1] = "\n<SOAP_ENV" + parti[1]; parti[2] = "\n<SOAP_ENV" + parti[2]; parti[3] = "\n<SOAP_ENV" + parti[3]; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ risposta = parti[0] + parti[1] + parti[2] + parti[3]; parti = risposta.split("<eGov_IT"); parti[1] = "\n <eGov_IT" + parti[1]; parti[2] = "\n <eGov_IT" + parti[2]; parti[3] = "\n <eGov_IT" + parti[3]; parti[4] = "\n <eGov_IT" + parti[4]; parti[5] = "\n <eGov_IT" + parti[5]; parti[6] = "\n <eGov_IT" + parti[6]; parti[7] = "\n <eGov_IT" + parti[7]; parti[8] = "\n <eGov_IT" + parti[8]; parti[9] = "\n <eGov_IT" + parti[9]; parti[10] = "\n <eGov_IT" + parti[10]; parti[11] = "\n <eGov_IT" + parti[11]; parti[12] = "\n <eGov_IT" + parti[12]; parti[13] = "\n <eGov_IT" + parti[13]; parti[14] = "\n <eGov_IT" + parti[14]; parti[15] = "\n <eGov_IT" + parti[15]; parti[16] = "\n <eGov_IT" + parti[16]; parti[17] = "\n <eGov_IT" + parti[17]; parti[18] = "\n <eGov_IT" + parti[18]; parti[19] = "\n <eGov_IT" + parti[19]; parti[20] = "\n <eGov_IT" + parti[20]; parti[21] = "\n <eGov_IT" + parti[21]; parti[22] = "\n <eGov_IT" + parti[22]; parti[23] = "\n <eGov_IT" + parti[23]; risposta = parti[0]; for(int i = 1; i < 24; i++) { risposta = risposta + parti[i]; } parti = risposta.split("</SOAP_ENV"); parti[1] = "\n</SOAP_ENV" + parti[1]; parti[2] = "</SOAP_ENV" + parti[2]; parti[3] = "\n</SOAP_ENV" + parti[3]; risposta = parti[0] + parti[1] + parti[2] + parti[3]; parti = risposta.split("</eGov_IT"); parti[1] = "</eGov_IT" + parti[1]; parti[2] = "\n </eGov_IT" + parti[2]; parti[3] = "</eGov_IT" + parti[3]; parti[4] = "\n </eGov_IT" + parti[4]; parti[5] = "</eGov_IT" + parti[5]; parti[6] = "</eGov_IT" + parti[6]; parti[7] = "</eGov_IT" + parti[7]; parti[8] = "</eGov_IT" + parti[8]; parti[9] = "</eGov_IT" + parti[9]; parti[10] = "</eGov_IT" + parti[10]; parti[11] = "</eGov_IT" + parti[11]; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ parti[12] = "</eGov_IT" + parti[12]; parti[13] = "\n </eGov_IT" + parti[13]; parti[14] = "\n </eGov_IT" + parti[14]; parti[15] = "</eGov_IT" + parti[15]; parti[16] = "\n </eGov_IT" + parti[16]; parti[17] = "</eGov_IT" + parti[17]; parti[18] = "\n </eGov_IT" + parti[18]; parti[19] = "</eGov_IT" + parti[19]; parti[20] = "\n </eGov_IT" + parti[20]; parti[21] = "\n </eGov_IT" + parti[21]; parti[22] = "\n </eGov_IT" + parti[22]; risposta = parti[0]; for(int i = 1; i < 23; i++) { risposta = risposta + parti[i]; } JOptionPane.showMessageDialog(this, risposta, "BustaeGov che sta per essere inviata...", JOptionPane.INFORMATION_MESSAGE); } } // Metodo che gestisce gli eventi di tipo Button public void actionPerformed(ActionEvent e) { } // public public public public public public public Metodi che gestiscono gli eventi di tipo Window delle finestre create void windowClosing(WindowEvent e) { System.exit(0); } void windowOpened(WindowEvent e) { } void windowClosed(WindowEvent e) { } void windowIconified(WindowEvent e) { } void windowDeiconified(WindowEvent e) { } void windowActivated(WindowEvent e) { } void windowDeactivated(WindowEvent e) { } } ServizioAsincronoAsimmetricoHandler.java package DefinizionePorta; import java.net.Socket; import java.sql.*; import java.io.*; import org.apache.log4j.Logger; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ public class ServizioAsincronoAsimmetricoHandler extends Thread { // Costruttore della classe public ServizioAsincronoAsimmetricoHandler() {} // Metodo che contiene tutto ciò che sarà eseguito dal Thread public void run() { Logger log = Logger.getRootLogger(); try { String azione[] = null; // Variabile che determina se bisogna eseguire il ciclo 'while' ('true' --> Tomcat abilitato, 'false' --> Tomcat disabilitato) boolean flag = true; // Deserializzazione da file dell'oggetto 'DbRichiestaAsimmetricaHandler' ObjectInputStream in = new ObjectInputStream(new FileInputStream("dbric.dat")); DbRichiestaAsimmetricaHandler dbric = (DbRichiestaAsimmetricaHandler) in.readObject(); in.close(); // Deserializzazione da file dell'oggetto 'DbComunicazAsimmetricaHandler' in = new ObjectInputStream(new FileInputStream("dbasim.dat")); DbComunicazAsimmetricaHandler db = (DbComunicazAsimmetricaHandler) in.readObject(); in.close(); abilitato // Ciclo 'while' che viene ripetuto finchè Tomcat è ancora while(flag) { // Prelievo dalla tabella 'comunicazasimmetrica' del db di una richiesta di servizio asincrona asimmetrica ResultSet rset = dbric.get(); // Se il prelievo dalla tabella 'comunicazasimmetrica' del db di una richiesta di servizio asincrona asimmetrica è andato a buon fine if(rset != null) { log.info("Prelievo dalla tabella 'comunicazasimmetrica' del db di una richiesta di servizio asincrona asimmetrica effettuato con successo!!"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("ServizioAsincronoAsimmetrico: Elaborazione della richiesta di servizio asincrona asimmetrica in corso..."); azione = rset.getString("parametri").split(":"); Integer i1 = new Integer(azione[0]); Integer i2 = new Integer(azione[1]); log.info("La differenza dei due valori e': " + (i1 - i2)); log.info("Registrazione nella tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica in corso..."); // Registrazione nella tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica db.put(rset.getString("identificativo"), "La differenza dei due valori e': " + (i1 - i2)); log.info("La registrazione nella tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica e' stata effettuata correttamente!!"); // Eliminazione dalla tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica dbric.delete(rset.getString("identificativo")); rset.close(); log.info("Eliminazione dalla tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica effettuata con successo!!"); } Thread.currentThread().sleep(3000); // Verifica se Tomcat è ancora abilitato tentando di creare un socket sulla porta 8080; // se riesce a creare il socket imposta la variabile 'flag' al valore 'true' (il ciclo 'while' sarà ripetuto), // se NON riesce a creare il socket imposta la variabile 'flag' al valore 'false' (il ciclo 'while' non sarà ripetuto) try { Socket sock = new Socket("localhost", 8080); flag = true; sock.close(); } catch(Exception e) { flag = false; } } } catch(Exception e) { log.error("Error Message : " + e.toString()); } } } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ ServizioAsincronoAsimmetricoPolling_BindingImpl.java package DefinizionePorta; import it.cnipa.www.schemas._003.egovit.busta1_0.*; import it.cnipa.www.schemas._003.egovit.busta1_0.impl.*; import import import import import java.io.*; java.sql.*; java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; import org.apache.log4j.Logger; public class ServizioAsincronoAsimmetricoPolling_BindingImpl implements DefinizionePorta.ServizioAsincronoAsimmetricoPolling_PortType{ // Metodo che verrà eseguito ad una corretta invocazione del servizio implementato dalla classe public DefinizionePorta.Risposta_asincronaAsimmetrica_operation_type servizioPolling(DefinizionePorta.RichiestaStato_asincronaAsimmetrica_operation_ty pe richiestaStatoAsincronaAsimmetrica_Operation_Msg) throws java.rmi.RemoteException { Risposta_asincronaAsimmetrica_operation_type risposta = new Risposta_asincronaAsimmetrica_operation_type(); BustaeGovHandler messaggio = new BustaeGovHandler(); Intestazione intesrisp = new IntestazioneImpl(); TrasmissioneType TTIrisp = new TrasmissioneTypeImpl(); String ammCode = "ParteB"; String portaCode = "ANGPD"; int numProg = (int)(Math.random() * 100); Logger log = Logger.getRootLogger(); try { log.info("Ricezione di un messaggio di richiesta Stato asincrono asimmetrico in corso..."); log.info("Sbustamento dell'Intestazione del messaggio..."); // Sbustamento della Busta-eGov del messaggio di richiesta stato in un oggetto di tipo 'Intestazione' Intestazione intestaz = messaggio.sbustamentoHandler(richiestaStatoAsincronaAsimmetrica_Operation_Ms g.get_value()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta intesrisp.getIntestazioneMessaggio().getMittente().setIdentificativoParte(intestaz.g etIntestazioneMessaggio().getDestinatario().getIdentificativoParte()); intesrisp.getIntestazioneMessaggio().getDestinatario().setIdentificativoParte(intesta z.getIntestazioneMessaggio().getMittente().getIdentificativoParte()); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di risposta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio(intes taz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); intesrisp.getIntestazioneMessaggio().setCollaborazione(intestaz.getIntestazioneMes saggio().getCollaborazione()); // Impostazione del servizio e del profilo di collaborazione del messaggio di risposta intesrisp.getIntestazioneMessaggio().setProfiloCollaborazione(intestaz.getIntestazio neMessaggio().getProfiloCollaborazione()); intesrisp.getIntestazioneMessaggio().setServizio(intestaz.getIntestazioneMessaggio ().getServizio()); // Impostazione dell'azione del messaggio di risposta intesrisp.getIntestazioneMessaggio().setAzione(intestaz.getIntestazioneMessaggio() .getAzione()); // Impostazione dell'identificatore del messaggio di risposta Date data = Calendar.getInstance().getTime(); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TrasmissioneType TTI = (TrasmissioneType)intestaz.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().setIdentificativoParte(TTI.getDestinazione().getIdentificativoPa rte()); TTIrisp.getDestinazione().setIdentificativoParte(TTI.getOrigine().getIdentificativoPa rte()); // Impostazione dell'ora di registrazione del messaggio di risposta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); // Se la Busta-eGov del messaggio di richiesta stato non è vuota e lo sbustamento è andato a buon fine if(intestaz != null) { // Caricamento del file di log in una stringa filename = ".\\..\\webapps\\axis\\WEBINF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); in = new DataInputStream(f); String testofile=""; while (in.available() !=0) { testofile = testofile+in.readLine(); } // Se l'identificatore del messaggio di richiesta stato è già presente nel file di log if(testofile.contains(intestaz.getIntestazioneMessaggio().getMessaggio().getIdentific atore())) { Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.error("ServizioAsincronoAsimmetrico: Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!", false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta asincrono asimmetrico in corso..."); return risposta; } // Se l'identificatore del messaggio di richiesta stato non è già presente nel file di log log.info("Riepilogo delle informazioni dell'Intestazione del messaggio asincrono asimmetrico ricevuto:"); log.info("Identificatore del messaggio --> " + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Collaborazione --> " + intestaz.getIntestazioneMessaggio().getCollaborazione()); log.info("Indirizzo telematico mittente --> " + TTI.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTI.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intestaz.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intestaz.getIntestazioneMessaggio().getAzione().toString()); } // Se la Busta-eGov del messaggio di richiesta stato è vuota e lo sbustamento NON è andato a buon fine if(intestaz == null){ log.error("ServizioAsincronoAsimmetrico: Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!", false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta asincrono asimmetrico in corso..."); return risposta; } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Se l'azione invocata è 'servizioPolling' else if (intestaz.getIntestazioneMessaggio().getAzione().equals("servizioPolling")) { // Se il profilo di collaborazione è 'EGOV_IT_ServizioAsincronoAsimmetrico' if(intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue().equals( "EGOV_IT_ServizioAsincronoAsimmetrico")) { log.info("ServizioAsincronoAsimmetrico: Invocato il metodo 'servizioPolling' con profilo di collaborazione di tipo 'Asincrono Asimmetrico'!!"); log.info("Prelievo dalla tabella 'comunicazasimrisposte' del db di una risposta di servizio asincrona asimmetrica in corso..."); // Deserializzazione da file dell'oggetto 'DbComunicazAsimmetricaHandler' ObjectInputStream inn = new ObjectInputStream(new FileInputStream(".\\..\\webapps\\axis\\WEBINF\\classes\\DefinizionePorta\\dbasim.dat")); DbComunicazAsimmetricaHandler db = (DbComunicazAsimmetricaHandler) inn.readObject(); inn.close(); // Prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica ResultSet rset = db.get(intestaz.getIntestazioneMessaggio().getCollaborazione()); // Se il prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica NON è andato a buon fine // per problemi di comunicazione con il db if(rset == null) { log.error("Il prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica e' fallito per problemi di comunicazione con il db!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Il prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica e' fallito\nper problemi di comunicazione con il db!!", false); risposta.set_value(res); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta asincrono simmetrico in corso..."); } return risposta; // Se il prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica è andato a buon fine if(rset.next()) { log.info("Prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica effettuato con successo!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, rset.getString("risposta"), false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta asincrono asimmetrico in corso..."); rset.close(); // Eliminazione dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica db.delete(intestaz.getIntestazioneMessaggio().getCollaborazione()); log.info("Eliminazione dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica effettuata con successo!!"); return risposta; } // Se il prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica NON è andato a buon fine // perche' la richiesta di servizio non e' stata ancora elaborata else { log.error("Il prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica e' fallito perche' la richiesta di servizio non e' stata ancora elaborata!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Il prelievo dalla tabella 'comunicazasimrisposte' del db della risposta di servizio asincrona asimmetrica e' fallito\nperche' la richiesta di servizio non e' stata ancora elaborata!!", false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta asincrono simmetrico in corso..."); return risposta; } } // Se il metodo 'servizioPolling' è stato invocato con profilo di collaborazione errato else { log.error("ServizioAsincronoAsimmetrico: Errore!! Metodo 'servizioPolling' invocato con profilo di collaborazione errato!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Metodo 'servizioPolling' invocato con profilo di collaborazione errato!!", false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta asincrono asimmetrico in corso..."); return risposta; } // else { } Se l'azione invocata non è disponibile log.error("ServizioAsincronoAsimmetrico: Errore!! Invocazione di un metodo non disponibile!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Invocazione di un metodo non disponibile!!", false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono asimmetrico in corso..."); return risposta; } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ } // Se c'è stato qualche errore nella gestione della BustaeGov catch(Exception s) { log.error("ServizioAsincronoAsimmetrico: Errore nella gestione della BustaeGov!!"); log.error("Error Message : " + s.toString()); String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; try { // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); } catch(Exception e) {} // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta intesrisp.getIntestazioneMessaggio().getMittente().getIdentificativoParte().setValue ("ParteB"); intesrisp.getIntestazioneMessaggio().getDestinatario().getIdentificativoParte().setV alue("ParteA"); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di risposta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio("Non Disponibile"); intesrisp.getIntestazioneMessaggio().setCollaborazione("Non Disponibile"); // Impostazione del servizio e del profilo di collaborazione del messaggio di risposta Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().setValue("EGOV_IT _ServizioAsincronoAsimmetrico"); intesrisp.getIntestazioneMessaggio().getServizio().setValue("ServizioAsincronoAsim metricoPollingPort"); // Impostazione dell'azione del messaggio di risposta intesrisp.getIntestazioneMessaggio().setAzione("servizioPolling"); // Impostazione dell'identificatore del messaggio di risposta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getOrigine().getIdentificativoParte().setValue("ParteB"); TTIrisp.getDestinazione().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getDestinazione().getIdentificativoParte().setValue("ParteA"); // Impostazione dell'ora di registrazione del messaggio di risposta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); try { // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella gestione della BustaeGov!!\nError Message : " + s.toString(), false); risposta.set_value(res); } catch(Exception e) {} Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta asincrono asimmetrico in corso..."); return risposta; } } } ServizioAsincronoAsimmetricoRichiesta_BindingImpl.java package DefinizionePorta; import import import import java.io.*; java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; import org.apache.log4j.*; import it.cnipa.www.schemas._003.egovit.busta1_0.*; import it.cnipa.www.schemas._003.egovit.busta1_0.impl.*; public class ServizioAsincronoAsimmetricoRichiesta_BindingImpl implements DefinizionePorta.ServizioAsincronoAsimmetricoRichiesta_PortType{ Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Metodo che verrà eseguito ad una corretta invocazione del servizio implementato dalla classe public DefinizionePorta.Ricevuta_asincronaAsimmetrica_operation_type subtract(DefinizionePorta.Richiesta_asincronaAsimmetrica_operation_type richiestaAsincronaAsimmetrica_Operation_Msg) throws java.rmi.RemoteException { Ricevuta_asincronaAsimmetrica_operation_type ricevuta = new Ricevuta_asincronaAsimmetrica_operation_type(); BustaeGovHandler messaggio = new BustaeGovHandler(); Intestazione intesrisp = new IntestazioneImpl(); TrasmissioneType TTIrisp = new TrasmissioneTypeImpl(); String azione[] = null; String ammCode = "ParteB"; String portaCode = "ANGPD"; int numProg = (int)(Math.random() * 100); Logger log = Logger.getRootLogger(); try { log.info("Ricezione di un messaggio di richiesta asincrono asimmetrico in corso..."); log.info("Sbustamento dell'Intestazione del messaggio..."); // Sbustamento della Busta-eGov del messaggio di richiesta in un oggetto di tipo 'Intestazione' Intestazione intestaz = messaggio.sbustamentoHandler(richiestaAsincronaAsimmetrica_Operation_Msg.get _value()); // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMittente().setIdentificativoParte(intestaz.g etIntestazioneMessaggio().getDestinatario().getIdentificativoParte()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ intesrisp.getIntestazioneMessaggio().getDestinatario().setIdentificativoParte(intesta z.getIntestazioneMessaggio().getMittente().getIdentificativoParte()); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio(intes taz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); intesrisp.getIntestazioneMessaggio().setCollaborazione(intestaz.getIntestazioneMes saggio().getCollaborazione()); // Impostazione del servizio, del servizio correlato e del profilo di collaborazione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().setProfiloCollaborazione(intestaz.getIntestazio neMessaggio().getProfiloCollaborazione()); intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().setServizioCorrelato ("ServizioAsincronoAsimmetricoPollingPort"); intesrisp.getIntestazioneMessaggio().setServizio(intestaz.getIntestazioneMessaggio ().getServizio()); // Impostazione dell'azione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().setAzione(intestaz.getIntestazioneMessaggio() .getAzione()); // Impostazione dell'identificatore del messaggio di ricevuta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TrasmissioneType TTI = (TrasmissioneType)intestaz.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().setIdentificativoParte(TTI.getDestinazione().getIdentificativoPa rte()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ TTIrisp.getDestinazione().setIdentificativoParte(TTI.getOrigine().getIdentificativoPa rte()); // Impostazione dell'ora di registrazione del messaggio di ricevuta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); // Se la Busta-eGov del messaggio di richiesta non è vuota e lo sbustamento è andato a buon fine if(intestaz != null) { azione = intestaz.getIntestazioneMessaggio().getAzione().toString().split(":"); // Caricamento del file di log in una stringa filename = ".\\..\\webapps\\axis\\WEBINF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); in = new DataInputStream(f); String testofile=""; while (in.available() !=0) { testofile = testofile+in.readLine(); } // Se l'identificatore del messaggio di richiesta è già presente nel file di log if(testofile.contains(intestaz.getIntestazioneMessaggio().getMessaggio().getIdentific atore())) { log.error("ServizioAsincronoAsimmetrico: Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!", false); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono asimmetrico in corso..."); } return ricevuta; // Se l'identificatore del messaggio di richiesta non è già presente nel file di log log.info("Riepilogo delle informazioni dell'Intestazione del messaggio asincrono asimmetrico ricevuto:"); log.info("Identificatore del messaggio --> " + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intestaz.getIntestazioneMessaggio().getCollaborazione()); log.info("Indirizzo telematico mittente --> " + TTI.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTI.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intestaz.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Se la Busta-eGov del messaggio di richiesta è vuota e lo sbustamento NON è andato a buon fine if(intestaz == null){ log.error("ServizioAsincronoAsimmetrico: Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono asimmetrico in corso..."); return ricevuta; } // Se l'azione invocata è 'subtract' else if (azione[0].equals("subtract")) { // Se il profilo di collaborazione è 'EGOV_IT_ServizioAsincronoAsimmetrico' if(intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue().equals( "EGOV_IT_ServizioAsincronoAsimmetrico")) { log.info("ServizioAsincronoAsimmetrico: Invocato il metodo 'subtract' con profilo di collaborazione di tipo 'Asincrono Asimmetrico'!!"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Registrazione nella tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica in corso..."); // Deserializzazione da file dell'oggetto 'DbRichiestaAsimmetricaHandler' ObjectInputStream inn = new ObjectInputStream(new FileInputStream(".\\..\\webapps\\axis\\WEBINF\\classes\\DefinizionePorta\\dbric.dat")); DbRichiestaAsimmetricaHandler dbric = (DbRichiestaAsimmetricaHandler) inn.readObject(); inn.close(); // Registrazione nella tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica String error = dbric.put(intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore(), azione[1], azione[2]); // Se la registrazione nella tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica NON è andata a buon fine if(error.length() != 0) { log.error("La registrazione nella tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica e' fallita!!"); log.error("Error Message : " + error); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "La registrazione nella tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica e' fallita!!\nError Message : " + error, false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); } return ricevuta; // Se la registrazione nella tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica è andata a buon fine log.info("La registrazione nella tabella 'comunicazasimmetrica' del db della richiesta di servizio asincrona asimmetrica e' stata effettuata correttamente!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "La richiesta di servizio asincrona asimmetrica e' stata ricevuta correttamente!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Invio del messaggio di ricevuta asincrono asimmetrico in corso..."); return ricevuta; } // Se il metodo 'subtract' è stato invocato con profilo di collaborazione errato else { log.error("ServizioAsincronoAsimmetrico: Errore!! Metodo 'subtract' invocato con profilo di collaborazione errato!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Metodo 'subtract' invocato con profilo di collaborazione errato!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono asimmetrico in corso..."); } } // else { return ricevuta; Se l'azione invocata non è disponibile log.error("ServizioAsincronoAsimmetrico: Errore!! Invocazione di un metodo non disponibile!!"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Invocazione di un metodo non disponibile!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono asimmetrico in corso..."); } return ricevuta; } // Se c'è stato qualche errore nella gestione della BustaeGov catch(Exception e) { log.error("ServizioAsincronoAsimmetrico: Errore nella gestione della BustaeGov!!"); log.error("Error Message : " + e.toString()); String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; try { // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' FileInputStream f = new FileInputStream(filename); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); } catch(Exception s) {} // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMittente().getIdentificativoParte().setValue ("ParteB"); intesrisp.getIntestazioneMessaggio().getDestinatario().getIdentificativoParte().setV alue("ParteA"); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio("Non Disponibile"); intesrisp.getIntestazioneMessaggio().setCollaborazione("Non Disponibile"); // Impostazione del servizio e del profilo di collaborazione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().setValue("EGOV_IT _ServizioAsincronoAsimmetrico"); intesrisp.getIntestazioneMessaggio().getServizio().setValue("ServizioAsincronoAsim metricoRichiestaPort"); // Impostazione dell'azione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().setAzione("subtract:?:?"); azione = intesrisp.getIntestazioneMessaggio().getAzione().toString().split(":"); // Impostazione dell'identificatore del messaggio di ricevuta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getOrigine().getIdentificativoParte().setValue("ParteB"); TTIrisp.getDestinazione().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getDestinazione().getIdentificativoParte().setValue("ParteA"); // Impostazione dell'ora di registrazione del messaggio di ricevuta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); try { // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella gestione della BustaeGov!!\nError Message : " + e.toString(), false); ricevuta.set_value(res); } catch(Exception s) {} log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono asimmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ corso..."); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono asimmetrico in return ricevuta; } } } ServizioAsincronoSimmetricoNotifica_BindingImpl.java package DefinizionePorta; import import import import import java.io.DataInputStream; java.io.FileInputStream; java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; import org.apache.log4j.*; import it.cnipa.www.schemas._003.egovit.busta1_0.*; import it.cnipa.www.schemas._003.egovit.busta1_0.impl.*; public class ServizioAsincronoSimmetricoNotifica_BindingImpl implements DefinizionePorta.ServizioAsincronoSimmetricoNotifica_PortType{ // Metodo che verrà eseguito ad una corretta invocazione del servizio implementato dalla classe public DefinizionePorta.Ricevuta_asincronaSimmetrica_operation_type servizioNotifica(DefinizionePorta.Risposta_asincronaSimmetrica_operation_type rispostaAsincronaSimmetrica_Operation_Msg) throws java.rmi.RemoteException { Ricevuta_asincronaSimmetrica_operation_type ricevuta = new Ricevuta_asincronaSimmetrica_operation_type(); BustaeGovHandler messaggio = new BustaeGovHandler(); NotificaGUI notif; Intestazione intesrisp = new IntestazioneImpl(); TrasmissioneType TTIrisp = new TrasmissioneTypeImpl(); String ammCode = "ParteA"; String portaCode = "ANGPD"; int numProg = (int)(Math.random() * 100); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ Logger log = Logger.getRootLogger(); try { log.info("Ricezione di un messaggio di risposta asincrono simmetrico in corso..."); log.info("Sbustamento dell'Intestazione del messaggio..."); // Sbustamento della Busta-eGov del messaggio di risposta in un oggetto di tipo 'Intestazione' Intestazione intestaz = messaggio.sbustamentoHandler(rispostaAsincronaSimmetrica_Operation_Msg.get_ value()); // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMittente().setIdentificativoParte(intestaz.g etIntestazioneMessaggio().getDestinatario().getIdentificativoParte()); intesrisp.getIntestazioneMessaggio().getDestinatario().setIdentificativoParte(intesta z.getIntestazioneMessaggio().getMittente().getIdentificativoParte()); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio(intes taz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); intesrisp.getIntestazioneMessaggio().setCollaborazione(intestaz.getIntestazioneMes saggio().getCollaborazione()); // Impostazione del servizio e del profilo di collaborazione del messaggio di ricevuta Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ intesrisp.getIntestazioneMessaggio().setProfiloCollaborazione(intestaz.getIntestazio neMessaggio().getProfiloCollaborazione()); intesrisp.getIntestazioneMessaggio().setServizio(intestaz.getIntestazioneMessaggio ().getServizio()); // Impostazione dell'azione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().setAzione(intestaz.getIntestazioneMessaggio() .getAzione()); // Impostazione dell'identificatore del messaggio di ricevuta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TrasmissioneType TTI = (TrasmissioneType)intestaz.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().setIdentificativoParte(TTI.getDestinazione().getIdentificativoPa rte()); TTIrisp.getDestinazione().setIdentificativoParte(TTI.getOrigine().getIdentificativoPa rte()); // Impostazione dell'ora di registrazione del messaggio di ricevuta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); // Se la Busta-eGov del messaggio di risposta non è vuota e lo sbustamento è andato a buon fine if(intestaz != null) { // Caricamento del file di log in una stringa filename = ".\\..\\webapps\\axis\\WEBINF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); in = new DataInputStream(f); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ String testofile=""; while (in.available() !=0) { testofile = testofile+in.readLine(); } // Se il messaggio di risposta asincrono simmetrico e' gia' stato correttamente ricevuto in precedenza ma il messaggio di ricevuta // non è stato accettato dal fornitore che aveva inviato la risposta if(testofile.contains("(ServizioAsincronoSimmetricoNotifica_BindingImpl.java) RiferimentoMessaggio --> " + intestaz.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()) && testofile.contains("(ServizioAsincronoSimmetricoNotifica_BindingImpl.java) Collaborazione --> " + intestaz.getIntestazioneMessaggio().getCollaborazione())) { log.error("ServizioAsincronoSimmetrico: Errore!! Tale messaggio di risposta asincrono simmetrico e' gia' stato correttamente ricevuto in precedenza!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "La risposta di servizio asincrona simmetrica e' stata ricevuta correttamente!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); } // return ricevuta; Se l'identificatore del messaggio di risposta è già presente nel file di log if(testofile.contains(intestaz.getIntestazioneMessaggio().getMessaggio().getIdentific atore())) { log.error("ServizioAsincronoSimmetrico: Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); } return ricevuta; // Se l'identificatore del messaggio di risposta non è già presente nel file di log e non è già stato ricevuto correttamente in precedenza log.info("Riepilogo delle informazioni dell'Intestazione del messaggio asincrono simmetrico ricevuto:"); log.info("Identificatore del messaggio --> " + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intestaz.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intestaz.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTI.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTI.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intestaz.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intestaz.getIntestazioneMessaggio().getAzione().toString()); // Creazione dell'interfaccia grafica che mostra la Busta- eGov ricevuta notif = new NotificaGUI(rispostaAsincronaSimmetrica_Operation_Msg.get_value(), "inricezionesimmetrico"); } // Se la Busta-eGov del messaggio di risposta è vuota e lo sbustamento NON è andato a buon fine if(intestaz == null){ log.error("ServizioAsincronoSimmetrico: Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!", false); ricevuta.set_value(res); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } // Se l'azione invocata è 'servizioNotifica' else if (intestaz.getIntestazioneMessaggio().getAzione().equals("servizioNotifica")) { // Se il profilo di collaborazione è 'EGOV_IT_ServizioAsincronoSimmetrico' if(intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue().equals( "EGOV_IT_ServizioAsincronoSimmetrico")) { log.info("ServizioAsincronoSimmetrico: Invocato il metodo 'servizioNotifica' con profilo di collaborazione di tipo 'Asincrono Simmetrico'!!"); // Operazione di estrapolazione dal messaggio di risposta del contenuto del Body (localizzato in 'parti[0]') String[] parti = rispostaAsincronaSimmetrica_Operation_Msg.get_value().split("Body>"); parti = parti[1].split("</"); log.info(parti[0]); // Creazione dell'interfaccia grafica che mostra il messaggio di risposta notif = new NotificaGUI(parti[0], "normale"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "La risposta di servizio asincrona simmetrica e' stata ricevuta correttamente!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); // eGov da inviare Creazione dell'interfaccia grafica che mostra la Busta- notif = new NotificaGUI(res, "dainviaresimmetrico"); return ricevuta; } // Se il metodo 'servizioNotifica' è stato invocato con profilo di collaborazione errato else { log.error("ServizioAsincronoSimmetrico: Errore!! Metodo 'servizioNotifica' invocato con profilo di collaborazione errato!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Metodo 'servizioNotifica' invocato con profilo di collaborazione errato!!", false); ricevuta.set_value(res); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } // else { } Se l'azione invocata non è disponibile log.error("ServizioAsincronoSimmetrico: Errore!! Invocazione di un metodo non disponibile!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Invocazione di un metodo non disponibile!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } } // Se c'è stato qualche errore nella gestione della BustaeGov catch(Exception e) { log.error("ServizioAsincronoSimmetrico: Errore nella gestione della BustaeGov!!"); log.error("Error Message : " + e.toString()); String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; { try // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); } catch(Exception s) {} // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMittente().getIdentificativoParte().setValue ("ParteA"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ intesrisp.getIntestazioneMessaggio().getDestinatario().getIdentificativoParte().setV alue("ParteB"); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio("Non Disponibile"); intesrisp.getIntestazioneMessaggio().setCollaborazione("Non Disponibile"); // Impostazione del servizio e del profilo di collaborazione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().setValue("EGOV_IT _ServizioAsincronoSimmetrico"); intesrisp.getIntestazioneMessaggio().getServizio().setValue("ServizioAsincronoSim metricoNotificaPort"); // Impostazione dell'azione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().setAzione("servizioNotifica"); // Impostazione dell'identificatore del messaggio di ricevuta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getOrigine().getIdentificativoParte().setValue("ParteA"); TTIrisp.getDestinazione().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getDestinazione().getIdentificativoParte().setValue("ParteB"); // Impostazione dell'ora di registrazione del messaggio di ricevuta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ TTIrisp.setOraRegistrazione(ora); try { // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella gestione della BustaeGov!!\nError Message : " + e.toString(), false); ricevuta.set_value(res); } catch(Exception s) {} log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + intesrisp.getIntestazioneMessaggio().getAzione().toString()); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } } } ServizioAsincronoSimmetricoRichiesta_BindingImpl.java package DefinizionePorta; import java.io.DataInputStream; import java.io.FileInputStream; Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ import import import import java.io.ObjectInputStream; java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; import org.apache.log4j.*; import it.cnipa.www.schemas._003.egovit.busta1_0.*; import it.cnipa.www.schemas._003.egovit.busta1_0.impl.*; public class ServizioAsincronoSimmetricoRichiesta_BindingImpl implements DefinizionePorta.ServizioAsincronoSimmetricoRichiesta_PortType{ // Metodo che verrà eseguito ad una corretta invocazione del servizio implementato dalla classe public DefinizionePorta.Ricevuta_asincronaSimmetrica_operation_type subtract(DefinizionePorta.Richiesta_asincronaSimmetrica_operation_type richiestaAsincronaSimmetrica_Operation_Msg) throws java.rmi.RemoteException { Ricevuta_asincronaSimmetrica_operation_type ricevuta = new Ricevuta_asincronaSimmetrica_operation_type(); BustaeGovHandler messaggio = new BustaeGovHandler(); Intestazione intesrisp = new IntestazioneImpl(); TrasmissioneType TTIrisp = new TrasmissioneTypeImpl(); String azione[] = null; String ammCode = "ParteB"; String portaCode = "ANGPD"; int numProg = (int)(Math.random() * 100); Logger log = Logger.getRootLogger(); try { log.info("Ricezione di un messaggio di richiesta asincrono simmetrico in corso..."); log.info("Sbustamento dell'Intestazione del messaggio..."); // Sbustamento della Busta-eGov del messaggio di richiesta in un oggetto di tipo 'Intestazione' Intestazione intestaz = messaggio.sbustamentoHandler(richiestaAsincronaSimmetrica_Operation_Msg.get_ value()); // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMittente().setIdentificativoParte(intestaz.g etIntestazioneMessaggio().getDestinatario().getIdentificativoParte()); intesrisp.getIntestazioneMessaggio().getDestinatario().setIdentificativoParte(intesta z.getIntestazioneMessaggio().getMittente().getIdentificativoParte()); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio(intes taz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); intesrisp.getIntestazioneMessaggio().setCollaborazione(intestaz.getIntestazioneMes saggio().getCollaborazione()); // Impostazione del servizio e del profilo di collaborazione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().setProfiloCollaborazione(intestaz.getIntestazio neMessaggio().getProfiloCollaborazione()); intesrisp.getIntestazioneMessaggio().setServizio(intestaz.getIntestazioneMessaggio ().getServizio()); // Impostazione dell'azione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().setAzione(intestaz.getIntestazioneMessaggio() .getAzione()); // Impostazione dell'identificatore del messaggio di ricevuta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TrasmissioneType TTI = (TrasmissioneType)intestaz.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().setIdentificativoParte(TTI.getDestinazione().getIdentificativoPa rte()); TTIrisp.getDestinazione().setIdentificativoParte(TTI.getOrigine().getIdentificativoPa rte()); // Impostazione dell'ora di registrazione del messaggio di ricevuta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); // Se la Busta-eGov del messaggio di richiesta non è vuota e lo sbustamento è andato a buon fine if(intestaz != null) { azione = intestaz.getIntestazioneMessaggio().getAzione().toString().split(":"); // Caricamento del file di log in una stringa filename = ".\\..\\webapps\\axis\\WEBINF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); in = new DataInputStream(f); String testofile=""; while (in.available() !=0) { testofile = testofile+in.readLine(); } // Se l'identificatore del messaggio di richiesta è già presente nel file di log if(testofile.contains(intestaz.getIntestazioneMessaggio().getMessaggio().getIdentific atore())) { log.error("ServizioAsincronoSimmetrico: Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); } return ricevuta; // Se l'identificatore del messaggio di richiesta non è già presente nel file di log log.info("Riepilogo delle informazioni dell'Intestazione del messaggio asincrono simmetrico ricevuto:"); log.info("Identificatore del messaggio --> " + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intestaz.getIntestazioneMessaggio().getCollaborazione()); log.info("Indirizzo telematico mittente --> " + TTI.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Indirizzo telematico destinatario --> " + TTI.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intestaz.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); } // Se la Busta-eGov del messaggio di richiesta è vuota e lo sbustamento NON è andato a buon fine if(intestaz == null){ log.error("ServizioAsincronoSimmetrico: Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } // Se l'azione invocata è 'subtract' else if (azione[0].equals("subtract")) Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ { // Se il profilo di collaborazione è 'EGOV_IT_ServizioAsincronoSimmetrico' if(intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue().equals( "EGOV_IT_ServizioAsincronoSimmetrico")) { log.info("ServizioAsincronoSimmetrico: Invocato il metodo 'subtract' con profilo di collaborazione di tipo 'Asincrono Simmetrico'!!"); log.info("Registrazione nella tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica in corso..."); // Deserializzazione da file dell'oggetto 'DbComunicazSimmetricaHandler' ObjectInputStream inn = new ObjectInputStream(new FileInputStream(".\\..\\webapps\\axis\\WEBINF\\classes\\DefinizionePorta\\dbsim.dat")); DbComunicazSimmetricaHandler dbric = (DbComunicazSimmetricaHandler) inn.readObject(); inn.close(); // Registrazione nella tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica String error = dbric.put(intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore(), TTI.getOrigine().getIdentificativoParte().getIndirizzoTelematico(), TTI.getDestinazione().getIdentificativoParte().getIndirizzoTelematico(), azione[1], azione[2]); // Se la registrazione nella tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica NON è andata a buon fine if(error.length() != 0) { log.error("La registrazione nella tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica e' fallita!!"); log.error("Error Message : " + error); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "La registrazione nella tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica e' fallita!!\nError Message : " + error, false); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } // Se la registrazione nella tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica è andata a buon fine log.info("La registrazione nella tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica e' stata effettuata correttamente!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "La richiesta di servizio asincrona simmetrica e' stata ricevuta correttamente!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } // Se il metodo 'subtract' è stato invocato con profilo di collaborazione errato else { log.error("ServizioAsincronoSimmetrico: Errore!! Metodo 'subtract' invocato con profilo di collaborazione errato!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Metodo 'subtract' invocato con profilo di collaborazione errato!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); } } // else { return ricevuta; Se l'azione invocata non è disponibile log.error("ServizioAsincronoSimmetrico: Errore!! Invocazione di un metodo non disponibile!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Invocazione di un metodo non disponibile!!", false); ricevuta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } } // Se c'è stato qualche errore nella gestione della BustaeGov catch(Exception e) { Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.error("ServizioAsincronoSimmetrico: Errore nella gestione della BustaeGov!!"); log.error("Error Message : " + e.toString()); String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; try { // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); } catch(Exception s) {} // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMittente().getIdentificativoParte().setValue ("ParteB"); intesrisp.getIntestazioneMessaggio().getDestinatario().getIdentificativoParte().setV alue("ParteA"); // Impostazione della Collaborazione e del RiferimentoMessaggio del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio("Non Disponibile"); intesrisp.getIntestazioneMessaggio().setCollaborazione("Non Disponibile"); // Impostazione del servizio e del profilo di collaborazione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().setValue("EGOV_IT _ServizioAsincronoSimmetrico"); intesrisp.getIntestazioneMessaggio().getServizio().setValue("ServizioAsincronoSim metricoRichiestaPort"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Impostazione dell'azione del messaggio di ricevuta intesrisp.getIntestazioneMessaggio().setAzione("subtract:?:?"); azione = intesrisp.getIntestazioneMessaggio().getAzione().toString().split(":"); // Impostazione dell'identificatore del messaggio di ricevuta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di ricevuta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getOrigine().getIdentificativoParte().setValue("ParteB"); TTIrisp.getDestinazione().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getDestinazione().getIdentificativoParte().setValue("ParteA"); // Impostazione dell'ora di registrazione del messaggio di ricevuta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); try { // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella gestione della BustaeGov!!\nError Message : " + e.toString(), false); ricevuta.set_value(res); } catch(Exception s) {} log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di ricevuta asincrono simmetrico:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Collaborazione --> " + intesrisp.getIntestazioneMessaggio().getCollaborazione()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di ricevuta asincrono simmetrico in corso..."); return ricevuta; } } } ServizioOneWay_BindingImpl.java package DefinizionePorta; import java.io.DataInputStream; import java.io.FileInputStream; import org.apache.log4j.*; import it.cnipa.www.schemas._003.egovit.busta1_0.*; public class ServizioOneWay_BindingImpl implements DefinizionePorta.ServizioOneWay_PortType{ // Metodo che verrà eseguito ad una corretta invocazione del servizio implementato dalla classe public void operazioneOneWay(DefinizionePorta.Richiesta_oneWay_operation_type richiestaOneWay_Operation_Msg) throws java.rmi.RemoteException { Logger log = Logger.getRootLogger(); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ try { // Variabile che determina se la richiesta one way può essere elaborata normalmente o meno String flag = ""; log.info("Ricezione di un messaggio di richiesta oneway in corso..."); BustaeGovHandler messaggio = new BustaeGovHandler(); log.info("Sbustamento dell'Intestazione del messaggio..."); // Sbustamento della Busta-eGov del messaggio di richiesta in un oggetto di tipo 'Intestazione' Intestazione intestaz = messaggio.sbustamentoHandler(richiestaOneWay_Operation_Msg.get_value()); // Se la Busta-eGov del messaggio di richiesta non è vuota e lo sbustamento è andato a buon fine if(intestaz != null) { TrasmissioneType TTI = (TrasmissioneType)intestaz.getListaTrasmissioni().getTrasmissione().get(0); String[] azione = intestaz.getIntestazioneMessaggio().getAzione().toString().split(":"); // Caricamento del file di log in una stringa String filename = ".\\..\\webapps\\axis\\WEBINF\\classes\\logs\\PortaDiDominio.log"; FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String testofile=""; while (in.available() !=0) { testofile = testofile+in.readLine(); } nel file di log // Se l'identificatore del messaggio di richiesta è già presente if(testofile.contains(intestaz.getIntestazioneMessaggio().getMessaggio().getIdentific atore())) { log.error("ServizioOneWay: Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Impostazione della variabile 'flag' al valore 'esci', in tal modo la richiesta one way non sarà elaborata normalmente flag = "esci"; } // Se la variabile 'flag' non è stata impostata e l'elaborazione della richiesta one way può avvenire normalmente if(flag.length() == 0) { log.info("Riepilogo delle informazioni dell'Intestazione del messaggio oneway ricevuto:"); log.info("Identificatore del messaggio --> " + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Indirizzo telematico mittente --> " + TTI.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTI.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intestaz.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); } } // Se la Busta-eGov del messaggio di richiesta è vuota e lo sbustamento NON è andato a buon fine if(intestaz == null){ log.error("ServizioOneWay: Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!"); } // Se l'azione invocata è 'operazioneOneWay' e la variabile 'flag' non è stata impostata else if (intestaz.getIntestazioneMessaggio().getAzione().equals("operazioneOneWay") && (flag.length() == 0)) { // Se il profilo di collaborazione è 'EGOV_IT_MessaggioSingoloOneWay' if(intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue().equals( "EGOV_IT_MessaggioSingoloOneWay")) { log.info("ServizioOneWay: Invocato il metodo 'operazioneOneWay' con profilo di collaborazione di tipo 'OneWay'!!"); } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Se il metodo 'operazioneOneWay' è stato invocato con profilo di collaborazione errato else { log.error("ServizioOneWay: Errore!! Metodo 'operazioneOneWay' invocato con profilo di collaborazione errato!!"); } } // Se l'azione invocata non è disponibile e la variabile 'flag' non è stata impostata else if (flag.length() == 0) { log.error("ServizioOneWay: Errore!! Invocazione di un metodo non disponibile!!"); } } // Se c'è stato qualche errore nella gestione della BustaeGov catch(Exception e) { log.error("ServizioOneWay: Errore nella gestione della BustaeGov!!"); log.error("Error Message : " + e.toString()); } } } ServizioSincrono_BindingImpl.java package DefinizionePorta; import import import import import java.io.DataInputStream; java.io.FileInputStream; java.text.SimpleDateFormat; java.util.Calendar; java.util.Date; import org.apache.log4j.*; import it.cnipa.www.schemas._003.egovit.busta1_0.*; import it.cnipa.www.schemas._003.egovit.busta1_0.impl.*; public class ServizioSincrono_BindingImpl implements DefinizionePorta.ServizioSincrono_PortType{ Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Metodo che verrà eseguito ad una corretta invocazione del servizio implementato dalla classe public DefinizionePorta.Risposta_sincrona_operation_type add(DefinizionePorta.Richiesta_sincrona_operation_type richiestaSincrona_Operation_Msg) throws java.rmi.RemoteException { Risposta_sincrona_operation_type risposta = new Risposta_sincrona_operation_type(); BustaeGovHandler messaggio = new BustaeGovHandler(); Intestazione intesrisp = new IntestazioneImpl(); TrasmissioneType TTIrisp = new TrasmissioneTypeImpl(); String azione[] = null; String ammCode = "ParteB"; String portaCode = "ANGPD"; int numProg = (int)(Math.random() * 100); Logger log = Logger.getRootLogger(); try { corso..."); log.info("Ricezione di un messaggio di richiesta sincrono in log.info("Sbustamento dell'Intestazione del messaggio..."); // Sbustamento della Busta-eGov del messaggio di richiesta in un oggetto di tipo 'Intestazione' Intestazione intestaz = messaggio.sbustamentoHandler(richiestaSincrona_Operation_Msg.get_value()); // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta intesrisp.getIntestazioneMessaggio().getMittente().setIdentificativoParte(intestaz.g etIntestazioneMessaggio().getDestinatario().getIdentificativoParte()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ intesrisp.getIntestazioneMessaggio().getDestinatario().setIdentificativoParte(intesta z.getIntestazioneMessaggio().getMittente().getIdentificativoParte()); risposta // Impostazione del RiferimentoMessaggio del messaggio di intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio(intes taz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); // Impostazione del servizio e del profilo di collaborazione del messaggio di risposta intesrisp.getIntestazioneMessaggio().setProfiloCollaborazione(intestaz.getIntestazio neMessaggio().getProfiloCollaborazione()); intesrisp.getIntestazioneMessaggio().setServizio(intestaz.getIntestazioneMessaggio ().getServizio()); // Impostazione dell'azione del messaggio di risposta intesrisp.getIntestazioneMessaggio().setAzione(intestaz.getIntestazioneMessaggio() .getAzione()); // Impostazione dell'identificatore del messaggio di risposta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TrasmissioneType TTI = (TrasmissioneType)intestaz.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().setIdentificativoParte(TTI.getDestinazione().getIdentificativoPa rte()); TTIrisp.getDestinazione().setIdentificativoParte(TTI.getOrigine().getIdentificativoPa rte()); // Impostazione dell'ora di registrazione del messaggio di risposta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); // Se la Busta-eGov del messaggio di richiesta non è vuota e lo sbustamento è andato a buon fine if(intestaz != null) { azione = intestaz.getIntestazioneMessaggio().getAzione().toString().split(":"); // Caricamento del file di log in una stringa filename = ".\\..\\webapps\\axis\\WEBINF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); in = new DataInputStream(f); String testofile=""; while (in.available() !=0) { testofile = testofile+in.readLine(); } // Se l'identificatore del messaggio di richiesta è già presente nel file di log if(testofile.contains(intestaz.getIntestazioneMessaggio().getMessaggio().getIdentific atore())) { log.error("ServizioSincrono: Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore() + "' e' gia' stato utilizzato in precedenza!!", false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta sincrono:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta sincrono in corso..."); return risposta; } // Se l'identificatore del messaggio di richiesta non è già presente nel file di log log.info("Riepilogo delle informazioni dell'Intestazione del messaggio sincrono ricevuto:"); log.info("Identificatore del messaggio --> " + intestaz.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("Indirizzo telematico mittente --> " + TTI.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTI.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intestaz.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); } // Se la Busta-eGov del messaggio di richiesta è vuota e lo sbustamento NON è andato a buon fine if(intestaz == null){ log.error("ServizioSincrono: Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nello sbustamento dell'Intestazione del messaggio!! La BustaeGov risulta vuota!!", false); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta sincrono:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta sincrono in corso..."); return risposta; } // Se l'azione invocata è 'add' else if (azione[0].equals("add")) { // Se il profilo di collaborazione è 'EGOV_IT_ServizioSincrono' if(intestaz.getIntestazioneMessaggio().getProfiloCollaborazione().getValue().equals( "EGOV_IT_ServizioSincrono")) { log.info("ServizioSincrono: Invocato il metodo 'add' con profilo di collaborazione di tipo 'Sincrono'!!"); Integer i1 = new Integer(azione[1]); Integer i2 = new Integer(azione[2]); log.info("La somma dei due valori e': " + (i1 + i2)); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "La somma dei due valori e': " + (i1 + i2), false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta sincrono:"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta sincrono in corso..."); return risposta; } // Se il metodo 'add' è stato invocato con profilo di collaborazione errato else { log.error("ServizioSincrono: Errore!! Metodo 'add' invocato con profilo di collaborazione errato!!"); // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Metodo 'add' invocato con profilo di collaborazione errato!!", false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta sincrono:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta sincrono in corso..."); } } // else { disponibile!!"); return risposta; Se l'azione invocata non è disponibile log.error("ServizioSincrono: Errore!! Invocazione di un metodo non // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore!! Invocazione di un metodo non disponibile!!", false); risposta.set_value(res); log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta sincrono:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta sincrono in corso..."); return risposta; } } // Se c'è stato qualche errore nella gestione della BustaeGov catch(Exception e) { log.error("ServizioSincrono: Errore nella gestione della BustaeGov!!"); log.error("Error Message : " + e.toString()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ String filename = ".\\..\\webapps\\axis\\WEB-INF\\classes\\rispostadefault.xml"; { try // Caricamento del prototipo di Busta-eGov da una stringa XML in un oggetto di tipo 'Intestazione' FileInputStream f = new FileInputStream(filename); DataInputStream in = new DataInputStream(f); String sXML=""; while (in.available() !=0) { sXML= sXML+in.readLine(); } intesrisp = messaggio.sbustamentoHandler(sXML); } catch(Exception s) {} // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta intesrisp.getIntestazioneMessaggio().getMittente().getIdentificativoParte().setValue ("ParteB"); intesrisp.getIntestazioneMessaggio().getDestinatario().getIdentificativoParte().setV alue("ParteA"); // Impostazione del RiferimentoMessaggio del messaggio di risposta intesrisp.getIntestazioneMessaggio().getMessaggio().setRiferimentoMessaggio("Non Disponibile"); di risposta // Impostazione del servizio e del profilo di collaborazione del messaggio intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().setValue("EGOV_IT _ServizioSincrono"); intesrisp.getIntestazioneMessaggio().getServizio().setValue("ServizioSincronoPort") ; // Impostazione dell'azione del messaggio di risposta intesrisp.getIntestazioneMessaggio().setAzione("add:?:?"); azione = intesrisp.getIntestazioneMessaggio().getAzione().toString().split(":"); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ // Impostazione dell'identificatore del messaggio di risposta Date data = Calendar.getInstance().getTime(); SimpleDateFormat dateTime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = dateTime.format(data.getTime()); intesrisp.getIntestazioneMessaggio().getMessaggio().setIdentificatore(ammCode+" _"+portaCode+"_"+numProg+"_"+now); // Impostazione dell'IdentificativoParte del mittente e del destinatario del messaggio di risposta TTIrisp = (TrasmissioneType)intesrisp.getListaTrasmissioni().getTrasmissione().get(0); TTIrisp.getOrigine().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getOrigine().getIdentificativoParte().setValue("ParteB"); TTIrisp.getDestinazione().getIdentificativoParte().setIndirizzoTelematico("Non Disponibile"); TTIrisp.getDestinazione().getIdentificativoParte().setValue("ParteA"); // Impostazione dell'ora di registrazione del messaggio di risposta OraRegistrazioneType ora = new OraRegistrazioneTypeImpl(); ora.setValue(Calendar.getInstance()); intesrisp.getIntestazioneMessaggio().getMessaggio().setOraRegistrazione(ora); TTIrisp.setOraRegistrazione(ora); try { // Imbustamento dell'oggetto di tipo 'Intestazione' in una stringa XML (Busta-eGov) String res = messaggio.imbustamentoHandler(intesrisp, true, "Errore nella gestione della BustaeGov!!\nError Message : " + e.toString(), false); risposta.set_value(res); } catch(Exception s) {} log.info("Riepilogo delle informazioni dell'Intestazione del messaggio di risposta sincrono:"); log.info("Identificatore del messaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getIdentificatore()); log.info("Profilo di collaborazione --> " + intesrisp.getIntestazioneMessaggio().getProfiloCollaborazione().getValue()); log.info("RiferimentoMessaggio --> " + intesrisp.getIntestazioneMessaggio().getMessaggio().getRiferimentoMessaggio()); log.info("Indirizzo telematico mittente --> " + TTIrisp.getOrigine().getIdentificativoParte().getIndirizzoTelematico()); Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice C: Codice della PDD sviluppata Lucio Lecce ______________________________________________________________________ log.info("Indirizzo telematico destinatario --> " + TTIrisp.getDestinazione().getIdentificativoParte().getIndirizzoTelematico()); log.info("Nome del servizio --> " + intesrisp.getIntestazioneMessaggio().getServizio().getValue()); log.info("Nome del metodo --> " + azione[0]); log.info("Primo parametro metodo --> " + azione[1]); log.info("Secondo parametro metodo --> " + azione[2]); log.info("Imbustamento dell'Intestazione del messaggio..."); log.info("Invio del messaggio di risposta sincrono in corso..."); return risposta; } } } Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Appendice D: Diagrammi UML – Flussi alternativi Validi per ogni tipo di comunicazione La Figura 1, Figura 2 e Figura 3 mostrano i sequence diagram relativi ai flussi di esecuzione alternativi che hanno validità generale, che sono cioè validi per ognuno dei profili di collaborazione disponibili. Validi per il tipo di comunicazione One Way La Figura 4 mostra il sequence diagram relativo al flusso di esecuzione alternativo valido nel caso di profilo di collaborazione di tipo One Way. Validi per il tipo di comunicazione Sincrona La Figura 5 mostra il sequence diagram relativo al flusso di esecuzione alternativo valido nel caso di profilo di collaborazione di tipo Sincrono. Validi per il tipo di comunicazione Asincrona Simmetrica La Figura 6, Figura 7, Figura 8, Figura 9, Figura 10 e Figura 11 mostrano i sequence diagram relativi ai flussi di esecuzione alternativi che sono validi nel caso di profilo di collaborazione di tipo Asincrono Simmetrico. Validi per il tipo di comunicazione Asincrona Asimmetrica La Figura 12, Figura 13, Figura 14, Figura 15, Figura 16 e Figura 17 mostrano i sequence diagram relativi ai flussi di esecuzione alternativi che sono validi nel caso di profilo di collaborazione di tipo Asincrono Asimmetrico. Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ : Amministrazione : TestClient : FormClient : ResponseGUI : BustaeGovHandler // Avvio applicazione client FormClient( ) BustaeGovHandler( ) sbustamentoHandler( ) Primo flusso alternativo unmarshallIntestazione( ) Errore!! Invocazione di un servizio non disponibile. ResponseGUI( ) Figura 1: Sequence Diagram Gestione Porta Di Dominio - Primo flusso alternativo : Amministrazione : TestClient : FormClient : ResponseGUI : BustaeGovHandler // Avvio applicazione client FormClient( ) BustaeGovHandler( ) Secondo flusso alternativo sbustamentoHandler( ) unmarshallIntestazione( ) Errore nello sbustamento del prototipo di Busta eGov. ResponseGUI( ) Figura 2: Sequence Diagram Gestione Porta Di Dominio - Secondo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ : Amministrazione : TestClient : FormClient : ResponseGUI : BustaeGovHandler // Avvio applicazione client FormClient( ) BustaeGovHandler( ) Secondo flusso alternativo sbustamentoHandler( ) unmarshallIntestazione( ) imbustamentoHandler( ) Errore nell'imbustamento del messaggio di richiesta. marshallIntestazione( ) ResponseGUI( ) Figura 3: Sequence Diagram Gestione Porta Di Dominio - Terzo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 4: Sequence Diagram Gestione Comunicazione One Way - Flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 5: Sequence Diagram Gestione Comunicazione Sincrona - Flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 6: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica – Richiesta - Primo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 7: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica – Richiesta - Secondo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ : NotificaAsincronaSimme... : BustaeGovHandler BustaeGovHandler( ) Primo flusso alternativo risposta sbustamentoHandler( ) unmarshallIntestazione( ) Errore nello sbustamento del prototipo di Busta eGov Figura 8: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica – Risposta - Primo flusso alternativo : NotificaAsincronaSimme... : BustaeGovHandler : DbComunicazSimmetr... : Database BustaeGovHandler( ) Secondo flusso alternativo risposta sbustamentoHandler( ) Sbustamento del prototipo di Busta eGov unmarshallIntestazione( ) get( ) Inizio del ciclo "while" che viene ripetuto finchè Tomcat è ancora abilitato // Prelievo della richiesta dal db Non ci sono richieste da soddisfare!! Se Tomcat è ancora abilitato si ripete il ciclo "while" Figura 9: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica – Risposta - Secondo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 10: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica – Risposta - Terzo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 11: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica – Risposta - Quarto flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 12: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica – Richiesta - Primo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 13: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica – Richiesta - Secondo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 14: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica – Risposta - Secondo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ Figura 15: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica – Risposta - Terzo flusso alternativo Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ : TestClient : ResponseGUI Continuazione dell'applicazione client del diagramma della richiesta : BustaeGovHandler Primo flusso alternativo risposta sbustamentoHandler( ) unmarshallIntestazione( ) Sbustamento del messaggio di ricevuta imbustamentoHandler( ) Inizio del ciclo "while" che viene ripetuto finchè non si ottiene un messaggio di risposta corretto marshallIntestazione( ) ResponseGUI( ) Errore nell'imbustamento del messaggio di richiesta stato. Poichè il tentativo di ottenere un messaggio di risposta corretto è fallito si ripete il ciclo "while" Figura 16: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica – Risposta - Primo flusso alternativo 163 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice D: Diagrammi UML – Flussi alternativi Lucio Lecce ______________________________________________________________________ : ServizioAsincronoAsimm... : DbRichiestaAsimmetri... : Database get( ) // Prelievo della richiesta dal db Inizio del ciclo "while" che viene ripetuto finchè Tomcat è ancora abilitato Non ci sono richieste da soddisfare!! Se Tomcat è ancora abilitato si ripete il ciclo "while" Flusso alternativo elaborazione Figura 17: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica – Elaborazione Flusso alternativo 164 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice E: Guida ai contenuti del DVD allegato Lucio Lecce ______________________________________________________________________ Appendice E: Guida ai contenuti del DVD allegato Questa guida ha lo scopo di dare delucidazioni sui contenuti del dvd allegato alla tesi: • Il file “startup.bat” rappresenta il file che si trova nella sottocartella “bin” del percorso su disco nel quale è installato Tomcat; tale file è necessario per l’avvio del server Tomcat e presenta, rispetto al file installato di default, le modifiche necessarie per far avviare i due demoni necessari per la comunicazione asincrona simmetrica e asimmetrica. • La cartella “Classi Lato Server” contiene tutte le classi necessarie al corretto funzionamento dei servizi della Porta Di Dominio messi a disposizione dal server Tomcat; il contenuto di tale cartella dovrebbe essere copiato nella sottocartella “webapps\axis\WEB-INF\classes” del percorso su disco nel quale è installato Tomcat. • La cartella “Progetto Eclipse della PDD” contiene l’intero progetto della Porta Di Dominio sviluppato con il software Eclipse; tale progetto comprende cioè sia le classi delle applicazioni lato client sia le classi dei servizi lato server (che dovrebbero cioè essere forniti dal server Tomcat). Da notare in questa cartella i files “deploy.wsdd” e “undeploy.wsdd” che sono necessari per la pubblicazione o meno sul server Tomcat dei servizi della PDD. 165 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice E: Guida ai contenuti del DVD allegato Lucio Lecce ______________________________________________________________________ • La cartella “Progetto Eclipse della definizione della PDD in WSDL” contiene il progetto, sviluppato con il software EclipseWTP, della definizione in linguaggio WSDL delle caratteristiche della Porta Di Dominio. Con i due files creati in questo progetto (“DefinizionePorta.wsdl” e “InterfacciaDefinitoria.xsd”) è possibile successivamente creare, sfruttando le funzionalità del servizio WSDL2Java messo a disposizione da Axis, l’intera infrastruttura di classi del progetto della Porta Di Dominio (il progetto definito in precedenza). • Nella cartella “Software necessario” è presente tutto il software che è necessario installare per il corretto funzionamento della Porta Di Dominio sviluppata. Da notare la presenza di “jre-6” che, anche se in realtà non è direttamente utilizzato nel progetto della PDD, si è dimostrato necessario per far funzionare “Eclipse-WTP”. Da notare infine le sottocartelle “lib (common)” e “lib (webapps_axis_WEBINF)” che contengono tutte le librerie (Axis, Jaxme, Log4j, ecc.) che è necessario mettere a disposizione del server Tomcat dopo che è stato installato (nel nome delle sottocartelle è presente il percorso relativo in cui bisognerebbe copiare le librerie). • Per testare il funzionamento della Porta Di Dominio sviluppata è stato utilizzato il software “VMware-server” (disponibile nella cartella “Software necessario”). Grazie a tale software infatti è stato possibile installare una macchina virtuale con lo stesso sistema 166 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice E: Guida ai contenuti del DVD allegato Lucio Lecce ______________________________________________________________________ operativo e con le stesse configurazioni della macchina fisica, in questo modo utilizzando una rete privata condivisa tra la macchina fisica e quella virtuale (opzione “host-only” per la connessione di rete della scheda Ethernet di VMware) le due macchine hanno potuto comunicare senza problemi. Per ottenere una licenza per “VMware-server” è sufficiente andare sul sito del software (http://register.vmware.com/content/registration.html) e richiederla gratuitamente. • I tre file in formato video ‘avi’ sono stati creati con l’ausilio del software ‘opensource’ “CamStudio” (software disponibile sul dvd nella cartella “Software necessario”) e mostrano esempi di funzionamento della PDD sviluppata. Nel dettaglio sul dvd è disponibile l’esempio di funzionamento per la comunicazione One Way, la comunicazione Sincrona e la comunicazione Asincrona Asimmetrica. • Nella cartella “Libreria Busta-eGov” sono presenti i files “bustaEGov.xsd” e “envelopeMustUnderstandActorDef-.xsd” che rappresentano l’XML Schema usato per descrivere le caratteristiche della Busta-eGov. Attraverso l’ausilio del software “apache-ant” (software disponibile sul dvd nella cartella “Software necessario”) si può realizzare, eseguendo lo script “antStart.bat”, la libreria in Java della Busta-eGov (presente nella sottocartella “DefinizioneBusta”). 167 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ Appendice F: Strumenti utilizzati per lo sviluppo della PDD Tomcat 5.5.12 Tomcat, anche noto come Jakarta Tomcat, dall'omonimo progetto in seno alla Apache Software Foundation, è un JSP / Servlet Engine. Oltre alle funzionalità HTTP statiche offerte da altre applicazioni simili (come lo stesso web server Apache), Tomcat è in grado di fungere da contenitore e di eseguire le servlet o Java Server Pages (JSP): specifiche di Sun Microsystems. Questo lo rende in grado quindi di supportare e processare pagine web dinamiche. Spesso, per questo motivo, Tomcat viene usato in abbinamento ad Apache, lasciando al secondo il compito di processare le pagine statiche e occupandosi solo dei contenuti dinamici. Tomcat è scritto interamente in Java ed è un progetto open source, rilasciato sotto licenza Apache Software License. Esso può quindi essere eseguito su qualsiasi architettura che supporti un JVM. Visto che si è scelto di sviluppare i Web Services (di cui sarà fatta la porta) in JAVA, Tomcat sembra il server più adatto a gestire questo tipo di sviluppo. AXIS AXIS è un progetto che nasce in seno a Tomcat, prodotto da Apache Software Foundation. AXIS è un toolkit che implementa il protocollo SOAP e si è dimostrato essere una ottima base sulla quale implementare Servizi Web in Java. 168 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ AXIS supporta molte funzionalità: • Supporto per SOAP 1.1. Ad esempio viene supportato il concetto degli header mustUnderstand SOAP. • Supporto per la gestione di XML tramite SAX (Simple API for XML) che lo rende più rapido di quei toolkits che utilizzano DOM (Document Object Model). • Supporto per la generazione del WSDL (Web Services Description Language) dai servizi schierati. Inoltre ha la funzionalità di generare codice Java per lo scheletro dei Servizi da documenti scritti in WSDL tramite il tool wsdl2java. • Supporto per lo sviluppo di servizi come EJB (Enterprise JavaBeans) • Supporto ad esporre come servizi, classi Java, semplicemente spostandoli nel “motore” e pubblicando il servizio tramite un file di deploy. Da quanto sopra elencato si può comprendere il perché sia stato scelto AXIS sia per il processamento della busta SOAP sia per la gestione dei Web Services. Grazie ad AXIS ci si può concentrare sulla logica della PDD e non pensare ad implementare la gestione di come le porte debbano essere interfacciate tra loro, evitando tutti i problemi che potrebbero sorgere andandosi a scontrare con i vari protocolli di rete di cui fa parte il protocollo SOAP. Una funzionalità di AXIS utilissima per rendere estremamente più semplice lo sviluppo delle applicazioni Web Server necessarie all’implementazione della PDD è stato il tool wsdl2java, tool che genera il Web Service direttamente dal corrispondente WSDL. Inoltre, in futuro, la funzionalità di AXIS di generare il WSDL direttamente dal Web Service che è stato schierato sul server (tool java2wsdl) potrebbe facilitare infinitamente il lavoro di sviluppo dell’Accordo di Servizio. 169 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ Anche le chiamate ai Web Services saranno più semplici attraverso l’utilizzo di AXIS, infatti, è possibile effettuare chiamate ai Servizi Web tramite semplici chiamate a classi. E’ importante ricordarsi di settare, dopo l’installazione, le variabili di ambiente AXIS_HOME, AXIS_LIB e AXISCLASSPATH nel seguente modo: • AXIS_HOME = # percorso sul filesystem in cui è stata installato il software # • AXIS_LIB = %AXIS_HOME%\lib • AXISCLASSPATH = %AXIS_LIB%\axis.jar;%AXIS_LIB%\commonsdiscovery.jar;%AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar;%AXIS_LIB%\xmlapis.jar;%AXIS_LIB%\xercesImpl.jar JAXB JAXB, acronimo di Java Architecture for XML Binding, rappresenta una maniera facile di collegare uno “Schema” XML con una rappresentazione in codice Java. Grazie a JAXB è facile utilizzare dati schematizzati in XML in applicazioni basate su codice Java semplicemente utilizzando i dati come se fossero in classi Java. In pratica JAXB semplifica la creazione e la manutenzione di applicazioni Java che utilizzano XML. JAXB fornisce un compilatore ed un framework a runtime per supportare la mappatura bi-direzionale tra documenti XML ed oggetti Java. Il compilatore traduce gli Schema XML in una o più classi Java in modo da evitare allo sviluppatore di fare classi complesse che facciano il parsing e di concentrare la propria attenzione sulla vera e propria logica del software che va a sviluppare. 170 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ Le classi generate tramite lo Schema ed il framework di collegamento a runtime permettono di fare validazione sugli Schema XML che vengono passati al sistema. Questo rende possibile che solo messaggi XML validi e senza errori possano essere accettati dal sistema. Ci sono diverse implementazioni di JAXB; tra tutte la scelta è ricaduta su JAXME che è una implementazione open source che ha le stesse funzionalità previste dalle specifiche di JAXB per il collegamento tra Java e XML. inoltre le classi generate tramite JAXME possono: • salvare i Java bean in un database, preferibilmente database XML ma anche in database relazionali come MySql; • fare query sui database per estrarre le istanze dei bean. In poche parole semplicemente facendo uno Schema e dandolo in pasto al compilatore JAXME. Figura 18: Schema di funzionamento di JAXME 171 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ Automaticamente vengono generate le classi che implementano il completo workflow di una applicazione Web. Figura 19: Schema di funzionamento del processo di serializzazione/deserializzazione JDK 1.5 Il Java Development Kit (JDK) è un prodotto della Sun messo a disposizione degli sviluppatori Java. I componenti principali del JDK sono il seguente insieme di programming tools: • javac – Il compilatore, che converte il codice sorgente in Java bytecode • jar – L’archiver, che impacchetta le librerie delle classi collegate in un singolo file di tipo JAR • javadoc – Il generatore di documentazione, che genera automaticamente la documentazione dai commenti del codice sorgente • 1 jdb – Il debugger1 Java Development Kit, Wikipedia Errore. L'origine riferimento non è stata trovata. 172 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ Il JDK mette a disposizione anche un completo Java Runtime Environment. Esso consiste di un Java Virtual Machine, di tutte le librerie delle classi che saranno necessarie nell’ambiente di produzione e inoltre delle librerie aggiuntive che saranno utili per gli sviluppatori, come ad esempio le librerie IDL. E’ importante ricordarsi di settare, dopo l’installazione, la variabile di ambiente JAVA_HOME ed aggiornare la variabile di ambiente PATH nel seguente modo: • JAVA_HOME = # percorso sul filesystem in cui è stata installato il software # • PATH = %PATH%;%JAVA_HOME%bin Log4j Questo framework permette di inserire messaggi di log all'interno di una applicazione (sia J2EE che J2SE) in modo molto potente ed elegante. Il concetto alla base di tutto il sistema è che durante il ciclo di sviluppo test e utilizzo di un componente software nasce l'esigenza di controllare a vario livello il funzionamento dello stesso. Se quindi durante lo sviluppo e il test è utile essere informati di ogni più piccola informazione circa il flusso applicativo, quando il sistema sarà stato completamente debuggato e messo in produzione, è opportuno monitorare solamente gli eventi più gravi ed imprevisti (le eccezioni o i fatal error). Per questo motivo log4j offre in modo molto semplice ed efficace la possibilità di "accendere" o "spegnere" il log di messaggi di livello basso (livello dei messaggi ALL e DEBUG) medio (livello dei messaggi INFO) o grave (ERROR e FATAL). Combinando questa funzionalità con la possibilità di redirigere in modo dinamico e composito messaggi verso una o più destinazione (console, file, syslog, email ed altro ancora) appare chiaro quanto sia potente il sistema in questione. 173 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ Il fattore probabilmente più importante è la capacità di configurare e modificare dinamicamente il comportamento del log (livello, destinazioni) semplicemente modificando un file di configurazione esterno alla applicazione, senza la necessità di riscrivere o ricompilare il codice, tramite la definizione di livelli di messaggio è possibile in ogni momento. Gli elementi principali del framework sono tre: loggers (strumento che permette di inviare messaggi verso una determinata destinazione), appenders o destinazioni e layout di stampa del messaggio. Nel nostro caso specifico il file di configurazione utilizzato è disponibile nell’appendice C al file “log4j.properties”. Da notare in questo file la definizione del layout di stampa dei messaggi di log (data di arrivo del msg - livello del messaggio – file che genera il msg - messaggio) e la definizione dei due appenders o destinazioni di tali messaggi (la consolle e il file di log). Ant 1.7 Apache Ant è un software per l’automazione del processo di build. È simile a make ma scritto in Java ed è principalmente orientato allo sviluppo Java. ANT è un progetto Apache, open source, ed è rilasciato sotto licenza Apache. In parole povere, possiamo definire Ant una sorta di "make" senza le stranezze ed avversità del "make". Ant è un programma Java (e quindi multipiattaforma) che ci facilita ed automatizza il processo di sviluppo di applicazioni Java (siano esse Stand Alone Application, Web Application, Enterprise Application) eseguendo per noi tutti gli step necessari per ottenere il prodotto finale di un progetto di grandi dimensioni a partire direttamente dal nostro codice sorgente. 174 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ Con ANT possiamo compilare, creare directory, generare la documentazione dei nostri sorgenti nel formato java doc, realizzare file .jar e .war, fare il deploy di Web Application, ecc. il tutto in maniera semplice, intuitiva ed automatizzata. ANT è un programma che non ha interfacce grafiche, si lancia da linea di comando. I comandi che Ant esegue vengono letti all'interno di un file di configurazione denominato build.xml. Dentro questo file i comandi che ANT deve eseguire sono definiti mediante opportuni tag. Entrando nel dettaglio del file di configurazione di ANT, in tale file vengono definite le librerie che devono generare il codice, il file XML che deve essere preso come Schema per la generazione delle classi, che poi rappresenta lo Schema del file XML che verrà deseralizzato nelle classi e serializzato dalle classi. Il tag <target> identifica il task che deve essere svolto, che corrisponde al target impostato come default per il progetto, come si può vedere all’interno del tag <project>, successivamente si vedono tra i tags <path> la definizione delle classi che servono per la generazione delle classi Java. Nella sezione <taskdef> viene definito il nome del task da eseguire e le classi utilizzate per generare le classi. Viene definito poi il tag relativo al task che si va ad eseguire per generare codice, in questo caso il nome del task è stato definito come xjc e dunque il tag nel quale si fa riferimento al task si chiamerà <xjc>; nella definizione del task viene indicata la sorgente dello Schema da seguire nella generazione e la directory da utilizzare per mettere le classi generate. 175 Tesi di Laurea Ingegneria Informatica Università di Roma ”Tor Vergata” Appendice F: Strumenti utilizzati per lo sviluppo della PDD Lucio Lecce ______________________________________________________________________ Dopo aver correttamente definito il file di configurazione, si può infine lanciare il generatore di classi ANT che genera le classi secondo quello che viene indicato nel file il cui path è inserito nel campo schema della sezione riguardante il task. E’ importante ricordarsi di settare, dopo l’installazione, la variabile di ambiente ANT_HOME ed aggiornare la variabile di ambiente PATH nel seguente modo: • ANT_HOME = # percorso sul filesystem in cui è stata installato il software # • PATH = %PATH%;%ANT_HOME%bin 176