Appendice A: Schema XML della descrizione della Busta e-gov
|
|
|
- Emilia Barbara Vigano
- 10 anni fa
- Visualizzazioni
Transcript
1 Appendice A: Schema XML della descrizione della Busta e-gov 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/jaxme jar"/> <pathelement location="c:/javadevelop/lib/jaxme/jaxmejs jar"/> <pathelement location="c:/javadevelop/lib/jaxme/jaxmexs jar"/> <pathelement location="c:/javadevelop/lib/jaxme/jaxmeapi 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.
2 Appendice A: Schema XML della descrizione della Busta e-gov 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=" xmlns:egov_it=" xmlns=" xmlns:xsd=" xmlns:soap_env=" elementformdefault="qualified" attributeformdefault="unqualified"> <xsd:import namespace=" 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>
3 Appendice A: Schema XML della descrizione della Busta e-gov </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>
4 Appendice A: Schema XML della descrizione della Busta e-gov </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>
5 Appendice A: Schema XML della descrizione della Busta e-gov 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">
6 Appendice A: Schema XML della descrizione della Busta e-gov <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">
7 Appendice A: Schema XML della descrizione della Busta e-gov <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>
8 Appendice A: Schema XML della descrizione della Busta e-gov <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>
9 Appendice A: Schema XML della descrizione della Busta e-gov <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">
10 Appendice A: Schema XML della descrizione della Busta e-gov <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>
11 Appendice A: Schema XML della descrizione della Busta e-gov </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]+_\d7_\d4\-\d2\- \d2_\d2:\d2"/> </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=" <xsd:attribute ref="soap_env:mustunderstand" use="required" fixed="1"/> </xsd:complextype>
12 Appendice A: Schema XML della descrizione della Busta e-gov </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">
13 Appendice A: Schema XML della descrizione della Busta e-gov <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">
14 Appendice A: Schema XML della descrizione della Busta e-gov <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"/>
15 Appendice A: Schema XML della descrizione della Busta e-gov <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>
16 Appendice A: Schema XML della descrizione della Busta e-gov <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>
17 Appendice A: Schema XML della descrizione della Busta e-gov <xsd:attribute name="numeroprogressivo" use="required"> <xsd:simpletype> <xsd:restriction base="xsd:positiveinteger"> <xsd:pattern value="\d7"/> </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"/>
18 Appendice A: Schema XML della descrizione della Busta e-gov <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=" xmlns:tns=" targetnamespace=" > <xs:attribute name="mustunderstand" type="xs:string" default="0" /> <xs:attribute name="actor" type="xs:anyuri" /> </xs:schema>
19 Appendice B: Schema XML della descrizione della PDD sviluppata Appendice B: Schema XML della descrizione della PDD sviluppata DefinizionePorta.wsdl <?xml version="1.0" encoding="utf-8"?> <wsdl:definitions xmlns:soap=" xmlns:tns="definizioneporta" xmlns:typens="definizioneporta" xmlns: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>
20 Appendice B: Schema XML della descrizione della PDD sviluppata <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 ">
21 Appendice B: Schema XML della descrizione della PDD sviluppata <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>
22 Appendice B: Schema XML della descrizione della PDD sviluppata <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=" <wsdl:operation name="operazioneoneway"> <soap:operation soapaction=" OneWay"/>
23 Appendice B: Schema XML della descrizione della PDD sviluppata <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=" <wsdl:operation name="add"> <soap:operation soapaction=" <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=" <wsdl:operation name="subtract"> <soap:operation soapaction=" ia/subtract"/>
24 Appendice B: Schema XML della descrizione della PDD sviluppata <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=" <wsdl:operation name="servizionotifica"> <soap:operation soapaction=" 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>
25 Appendice B: Schema XML della descrizione della PDD sviluppata <wsdl:binding name="servizioasincronoasimmetricorichiesta" type="tns:servizioasincronoasimmetricorichiesta"> <soap:binding style="document" transport=" <wsdl:operation name="subtract"> <soap:operation soapaction=" 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=" <wsdl:operation name="serviziopolling"> <soap:operation soapaction=" cia/serviziopolling"/> <wsdl:input> <soap:body use="literal" parts="tns:richiestastatoasincronaasimmetrica_operation_msg"/> </wsdl:input>
26 Appendice B: Schema XML della descrizione della PDD sviluppata <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=" ort"/> </wsdl:port> </wsdl:service> <wsdl:service name="serviziosincrono"> <wsdl:port name="serviziosincronoport" binding="tns:serviziosincrono"> <soap:address location=" oport"/> </wsdl:port> </wsdl:service> <wsdl:service name="servizioasincronosimmetricorichiesta"> <wsdl:port name="servizioasincronosimmetricorichiestaport" binding="tns:servizioasincronosimmetricorichiesta"> <soap:address location=" nosimmetricorichiestaport"/>
27 Appendice B: Schema XML della descrizione della PDD sviluppata </wsdl:port> </wsdl:service> <wsdl:service name="servizioasincronosimmetriconotifica"> <wsdl:port name="servizioasincronosimmetriconotificaport" binding="tns:servizioasincronosimmetriconotifica"> <soap:address location=" nosimmetriconotificaport"/> </wsdl:port> </wsdl:service> <wsdl:service name="servizioasincronoasimmetricorichiesta"> <wsdl:port name="servizioasincronoasimmetricorichiestaport" binding="tns:servizioasincronoasimmetricorichiesta"> <soap:address location=" noasimmetricorichiestaport"/> </wsdl:port> </wsdl:service> <wsdl:service name="servizioasincronoasimmetricopolling"> <wsdl:port name="servizioasincronoasimmetricopollingport" binding="tns:servizioasincronoasimmetricopolling"> <soap:address location=" noasimmetricopollingport"/> </wsdl:port> </wsdl:service> </wsdl:definitions>
28 Appendice B: Schema XML della descrizione della PDD sviluppata InterfacciaDefinitoria.xsd <?xml version="1.0" encoding="utf-8"?> <xs:schema targetnamespace="definizioneporta" attributeformdefault="unqualified" xmlns:xs=" <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>
29 Appendice B: Schema XML della descrizione della PDD sviluppata <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>
30 Appendice B: Schema XML della descrizione della PDD sviluppata
31 richiesta-default.xml <?xml version="1.0" encoding="utf-8"?> <SOAP_ENV:Envelope xmlns:soap_env=" <SOAP_ENV:Header xmlns:soap_env=" <egov_it:intestazione xmlns:egov_it=" " SOAP_ENV:actor=" 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"> t17:58:10
32 </egov_it:oraregistrazione> <egov_it:scadenza> t17: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"> t17: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=" <SOAP_ENV:Header xmlns:soap_env="
33 <egov_it:intestazione xmlns:egov_it=" " SOAP_ENV:actor=" 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"> t17:58:10 </egov_it:oraregistrazione> <egov_it:scadenza> t17: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>
34 <egov_it:destinazione> <egov_it:identificativoparte tipo="codicepa" indirizzotelematico=""> </egov_it:identificativoparte> </egov_it:destinazione> <egov_it:oraregistrazione tempo="egov_it_spc"> t17: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-tomcat \\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
35 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();
36 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 OneWay"); profili[1] = new MenuItem("Servizio Sincrono"); profili[2] = new MenuItem("Servizio Asincrono Simmetrico"); profili[3] = new MenuItem("Servizio 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);
37 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 = " + indirizzoclient2.gettext() + ":8080/axis/services/"; TestClient.serveraddress = " + 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
38 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";
39 // 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];
40 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];
41 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];
42 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];
43 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];
44 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];
45 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'
46 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. import it.cnipa. import DefinizionePorta.*; import java.io.*; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import javax.xml.bind.jaxbexception;
47 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)
48 // Impostazione dell'identificatore del messaggio Date data = Calendar.getInstance().getTime(); SimpleDateFormat datetime = new SimpleDateFormat("yyyy-MMdd_HH:mm"); String now = datetime.format(data.gettime()); intes.getintestazionemessaggio().getmessaggio().setidentificatore(ammcode+"_"+ portacode+"_"+numprog+"_"+now); messaggio // Per testare il controllo dell'autenticita' dell'identificatore del //intes.getintestazionemessaggio().getmessaggio().setidentificatore("partea_angp D_1_ _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); messaggio // Impostazione del profilo di collaborazione e del servizio del 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);
49 // 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(); // Creazione della chiamata e impostazione dell'endpoint 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);
50 // 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");
51 la Busta-eGov ricevuta il messaggio di risposta // Creazione dell'interfaccia grafica che mostra String XMLrisp = rispostasincrona.get_value(); risp = new ResponseGUI(XMLrisp, "inricezione"); // 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
52 "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 else // Creazione dell'interfaccia grafica che mostra String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "errore"); // Creazione dell'interfaccia grafica che mostra la Busta-eGov ricevuta String XMLrisp = rispostaasincronasim.get_value(); risp = new ResponseGUI(XMLrisp, "inricezioneasincrono");
53 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
54 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"); // Creazione dell'interfaccia grafica che mostra il messaggio di ricevuta String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], "erroreasincrono"); else // Creazione dell'interfaccia grafica che mostra la Busta-eGov ricevuta String XMLrisp = ricevutaasincronaasim.get_value(); risp = new ResponseGUI(XMLrisp, "inricezioneasincrono"); il messaggio di ricevuta "normaleasincrono"); // Creazione dell'interfaccia grafica che mostra String[] parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0],
55 // Sbustamento della Busta-eGov del messaggio di ricevuta in un oggetto di tipo 'Intestazione' Intestazione intesrisp = messaggio.sbustamentohandler(xmlrisp); richiesta Stato // Impostazione dell'azione del messaggio di intes.getintestazionemessaggio().setazione("serviziopolling"); richiesta Stato // Impostazione del servizio del messaggio di 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 (); nuovo lo stato // Variabile che determina se bisogna richiedere di 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 MM-dd_HH:mm"); // Impostazione dell'identificatore data = Calendar.getInstance().getTime(); datetime = new SimpleDateFormat("yyyy- 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);
56 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); risposta // Attende finchè non riceve la while(rispostaasincronaasim.get_value().length() == 0)
57 // 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 "erroreasincrono"); grafica che mostra la Busta-eGov ricevuta rispostaasincronaasim.get_value(); "inricezioneasincrono"); grafica che mostra il messaggio di risposta "normaleasincrono"); else // Creazione dell'interfaccia parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], // Creazione dell'interfaccia XMLrisp = risp = new ResponseGUI(XMLrisp, // Creazione dell'interfaccia parti = XMLrisp.split("Body>"); parti = parti[1].split("</"); risp = new ResponseGUI(parti[0], valore 'false' per uscire dal ciclo 'while' System.exit(0); // Imposta la variabile al flag = false;
58 // Se il servizio invocato non è disponibile else 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. import it.cnipa. import java.io.*; import java.util.*; import javax.xml.bind.jaxbcontext; import javax.xml.bind.jaxbexception; import javax.xml.bind.unmarshaller; import javax.xml.bind.marshaller; import javax.xml.parsers.*; import javax.xml.soap.*; import org.w3c.dom.node; import org.w3c.dom.document; import org.xml.sax.inputsource; import 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'
59 private static Intestazione unmarshallintestazione(inputsource psource) throws JAXBException Intestazione retval = new IntestazioneImpl(); JAXBContext context = JAXBContext.newInstance("it.cnipa. 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. 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')
60 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;
61 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);
62 // 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:soap- ENV=\" res = part[0] + part[1]; part = res.split(" xmlns:soap_env=\" res = part[0] + " xmlns:soap_env=\" + 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();
63 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)
64 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();
65 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");
66 // 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;
67 // 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(); id='"+ i +"';"; for(int i = 1; i < 1000; i++) String sql = "SELECT * FROM comunicazsimmetrica WHERE 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());
68 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;
69 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();
70 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
71 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(); id='"+ i +"';"; for(int i = 1; i < 1000; i++) String sql = "SELECT * FROM comunicazasimmetrica WHERE 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
72 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
73 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.*;
74 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. import it.cnipa. import java.io.*; import java.sql.*; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import java.net.*;
75 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
76 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(); // Ciclo 'while' che viene ripetuto finchè Tomcat è ancora abilitato 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)
77 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(":");
78 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(); // Creazione della chiamata e impostazione dell'endpoint ServizioAsincronoSimmetricoNotifica_PortType call = service.getservizioasincronosimmetriconotificaport(new java.net.url(endpoint)); // Realizzazione della chiamata
79 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) simmetrico in corso..."); messaggio..."); log.info("ricezione di un messaggio di ricevuta asincrono log.info("sbustamento dell'intestazione del // 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);
80 // 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]); // Se il messaggio di risposta è stato accettato else // Risposta accettata dal client log.info("servizioasincronosimmetrico: Il messaggio di risposta asincrono simmetrico inviato e' stato accettato!!"); parti[0]); log.info("messaggio ricevuto: " + // Eliminazione dalla tabella 'comunicazsimmetrica' del db della richiesta di servizio asincrona simmetrica
81 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;
82 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++)
83 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];
84 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];
85 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) // 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) ServizioAsincronoAsimmetricoHandler.java package DefinizionePorta; import java.net.socket; import java.sql.*; import java.io.*; import org.apache.log4j.logger;
86 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(); // Ciclo 'while' che viene ripetuto finchè Tomcat è ancora abilitato 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!!");
87 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());
88 ServizioAsincronoAsimmetricoPolling_BindingImpl.java package DefinizionePorta; import it.cnipa. import it.cnipa. import java.io.*; import java.sql.*; import java.text.simpledateformat; import java.util.calendar; import 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());
89 // 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();
90 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\\web- INF\\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()))
91 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());
92 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;
93 // 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\\WEB- INF\\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);
94 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());
95 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());
96 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());
97 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'azione invocata non è disponibile else 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;
98 // 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
99 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)
100 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 java.io.*; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import org.apache.log4j.*; import it.cnipa. import it.cnipa. public class ServizioAsincronoAsimmetricoRichiesta_BindingImpl implements DefinizionePorta.ServizioAsincronoAsimmetricoRichiesta_PortType
101 // 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());
102 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());
103 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\\web- INF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); 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("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);
104 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]);
105 // 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'!!");
106 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\\WEB- INF\\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());
107 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...");
108 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..."); return ricevuta; // Se l'azione invocata non è disponibile else log.error("servizioasincronoasimmetrico: Errore!! Invocazione di un metodo non disponibile!!");
109 // 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);
110 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());
111 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());
112 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 java.io.datainputstream; import java.io.fileinputstream; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import org.apache.log4j.*; import it.cnipa. import it.cnipa. 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);
113 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
114 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\\web- INF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); in = new DataInputStream(f);
115 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());
116 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; file di log // Se l'identificatore del messaggio di risposta è già presente nel 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());
117 in corso..."); log.info("imbustamento dell'intestazione del messaggio..."); log.info("invio del messaggio di ricevuta asincrono simmetrico 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 BustaeGov 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);
118 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");
119 // 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..."); // Creazione dell'interfaccia grafica che mostra la BustaeGov da inviare 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);
120 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 non è disponibile else 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());
121 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");
122 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);
123 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;
124 import java.io.objectinputstream; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import org.apache.log4j.*; import it.cnipa. import it.cnipa. 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);
125 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);
126 // 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\\web- INF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); 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("servizioasincronosimmetrico: Errore nella verifica dell'autenticita' dell'identificatore del messaggio!! L'identificatore '" + intestaz.getintestazionemessaggio().getmessaggio().getidentificatore() + "' e' gia' stato utilizzato in precedenza!!");
127 // 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());
128 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"))
129 // 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\\WEB- INF\\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);
130 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());
131 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]);
132 in corso..."); log.info("imbustamento dell'intestazione del messaggio..."); log.info("invio del messaggio di ricevuta asincrono simmetrico return ricevuta; // Se l'azione invocata non è disponibile else 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)
133 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");
134 // 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());
135 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. 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();
136 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\\web- INF\\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!!");
137 // 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'!!");
138 // 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 java.io.datainputstream; import java.io.fileinputstream; import java.text.simpledateformat; import java.util.calendar; import java.util.date; import org.apache.log4j.*; import it.cnipa. import it.cnipa. public class ServizioSincrono_BindingImpl implements DefinizionePorta.ServizioSincrono_PortType
139 // 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());
140 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());
141 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\\web- INF\\classes\\logs\\PortaDiDominio.log"; f = new FileInputStream(filename); 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("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());
142 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);
143 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:");
144 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]);
145 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 non è disponibile else log.error("serviziosincrono: 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 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());
146 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"); // Impostazione del servizio e del profilo di collaborazione del messaggio di risposta 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(":");
147 // 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());
148 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;
149 Appendice D: Diagrammi UML Flussi alternativi 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.
150 Appendice D: Diagrammi UML Flussi alternativi : Amministrazione : TestClient : FormClient : ResponseGUI : BustaeGovHandler // Avvio applicazione client FormClient( ) BustaeGovHandler( ) Primo flusso alternativo sbustamentohandler( ) 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
151 Appendice D: Diagrammi UML Flussi alternativi : 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
152 Appendice D: Diagrammi UML Flussi alternativi Figura 4: Sequence Diagram Gestione Comunicazione One Way - Flusso alternativo
153 Appendice D: Diagrammi UML Flussi alternativi Figura 5: Sequence Diagram Gestione Comunicazione Sincrona - Flusso alternativo
154 Appendice D: Diagrammi UML Flussi alternativi Figura 6: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica Richiesta - Primo flusso alternativo
155 Appendice D: Diagrammi UML Flussi alternativi Figura 7: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica Richiesta - Secondo flusso alternativo
156 Appendice D: Diagrammi UML Flussi alternativi : 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 Secondo flusso alternativo risposta BustaeGovHandler( ) 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
157 Appendice D: Diagrammi UML Flussi alternativi Figura 10: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica Risposta - Terzo flusso alternativo
158 Appendice D: Diagrammi UML Flussi alternativi Figura 11: Sequence Diagram Gestione Comunicazione Asincrona Simmetrica Risposta - Quarto flusso alternativo
159 Appendice D: Diagrammi UML Flussi alternativi Figura 12: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica Richiesta - Primo flusso alternativo
160 Appendice D: Diagrammi UML Flussi alternativi Figura 13: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica Richiesta - Secondo flusso alternativo
161 Appendice D: Diagrammi UML Flussi alternativi Figura 14: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica Risposta - Secondo flusso alternativo
162 Appendice D: Diagrammi UML Flussi alternativi Figura 15: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica Risposta - Terzo flusso alternativo
163 Appendice D: Diagrammi UML Flussi alternativi : TestClient : ResponseGUI : BustaeGovHandler Continuazione dell'applicazione client del diagramma della richiesta sbustamentohandler( ) Primo flusso alternativo risposta Sbustamento del messaggio di ricevuta unmarshallintestazione( ) Inizio del ciclo "while" che viene ripetuto finchè non si ottiene un messaggio di risposta corretto imbustamentohandler( ) marshallintestazione( ) ResponseGUI( ) Poichè il tentativo di ottenere un messaggio di risposta corretto è fallito si ripete il ciclo "while" Errore nell'imbustamento del messaggio di richiesta stato. Figura 16: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica Risposta - Primo flusso alternativo 163
164 Appendice D: Diagrammi UML Flussi alternativi : ServizioAsincronoAsimm... : DbRichiestaAsimmetri... : Database Inizio del ciclo "while" che viene ripetuto finchè Tomcat è ancora abilitato get( ) Non ci sono richieste da soddisfare!! Se Tomcat è ancora abilitato si ripete il ciclo "while" // Prelievo della richiesta dal db Flusso alternativo elaborazione Figura 17: Sequence Diagram Gestione Comunicazione Asincrona Asimmetrica Elaborazione - Flusso alternativo 164
165 Appendice E: Guida ai contenuti del DVD allegato 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
166 Appendice E: Guida ai contenuti del DVD allegato La cartella Progetto Eclipse della definizione della PDD in WSDL contiene il progetto, sviluppato con il software Eclipse- WTP, 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_web- INF) 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
167 Appendice E: Guida ai contenuti del DVD allegato 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 ( 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
168 Appendice F: Strumenti utilizzati per lo sviluppo della PDD Appendice F: Strumenti utilizzati per lo sviluppo della PDD Tomcat 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
169 Appendice F: Strumenti utilizzati per lo sviluppo della PDD 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
170 Appendice F: Strumenti utilizzati per lo sviluppo della PDD 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 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
171 Appendice F: Strumenti utilizzati per lo sviluppo della PDD 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
172 Appendice F: Strumenti utilizzati per lo sviluppo della PDD 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 jdb Il debugger 1 1 Java Development Kit, Wikipedia Errore. L'origine riferimento non è stata trovata. 172
173 Appendice F: Strumenti utilizzati per lo sviluppo della PDD 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, ed altro ancora) appare chiaro quanto sia potente il sistema in questione. 173
174 Appendice F: Strumenti utilizzati per lo sviluppo della PDD 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
175 Appendice F: Strumenti utilizzati per lo sviluppo della PDD 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
176 Appendice F: Strumenti utilizzati per lo sviluppo della PDD 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
1. Accordo di servizio Richiesta Indirizzi PEC CAD Art6 [concessionario del servizio di posta certificata al cittadino]
Allegato Tecnico 1. Accordo di servizio Richiesta Indirizzi PEC CAD Art6 [concessionario del servizio di posta certificata al cittadino]
PROGETTO TESSERA SANITARIA
PROGETTO TESSERA SANITARIA WEB SERVICES PER LA VISUALIZZAZIONE E LO SCARICO DELLE RICEVUTE DI ATTESTAZIONE DELLE OPERAZIONI E DELLE TRANSAZIONI EFFETTUATE SULLE RICETTE DEMATERIALIZZATE (DECRETO 2 NOVEMBRE
QUALIFICAZIONE DELLA PORTA DI DOMINIO
QUALIFICAZIONE DELLA PORTA DI DOMINIO IN MODALITÀ PROVVISORIA Versione 1.0 Qualificazione della Porta di INDICE 1. PROCESSO DI QUALIFICAZIONE DELLA PORTA DI DOMINIO IN MODALITÀ PROVVISORIA 3 2. DESCRIZIONE
PROGETTO TESSERA SANITARIA
PROGETTO TESSERA SANITARIA WEB SERVICES PER LA COMUNICAZIONE DELL AUTORIZZAZIONE CHE UN MEDICO TITOLARE DEVE FORNIRE AL SISTEMA TS AFFINCHE UN MEDICO SUO SOSTITUTO POSSA PRESCRIVERE RICETTE DEMATERIALIZZATE
Tutorial di configurazione e programmazione di OpenSPCoop. Tutorial di configurazione e programmazione di OpenSPCoop
i Tutorial di configurazione e programmazione di OpenSPCoop ii Copyright 2005-2008 Link.it s.r.l. iii COLLABORATORI TITOLO : Tutorial di configurazione e programmazione di OpenSPCoop AZIONE NOME DATA FIRMA
Tutorial di configurazione e programmazione di OpenSPCoop. Tutorial di configurazione e programmazione di OpenSPCoop
i Tutorial di configurazione e programmazione di OpenSPCoop ii Copyright 2005-2011 Link.it s.r.l. iii Indice 1 Introduzione 1 2 Ambiente di sviluppo 1 3 Presentazione degli scenari di esempio 2 4 Comunicazione
ZTL Firenze Inserimento Automatico
ZTL Firenze Inserimento Automatico Introduzione In seguito alla variazione dell ordinanza del giugno 2011 che regola la modalità di rilascio dei permessi portale per le categorie abilitate, non è più possibile
Specifiche di invocazione del sistema di monitoraggio e controllo servizi CART
Regione Toscana Specifiche di invocazione del sistema di monitoraggio e controllo servizi CART Stato del documento Definitiva Versione del documento 1.8 Data 29/05/13 Documento Acronimo del documento Specifiche
INF-1: Specifiche Tecniche di Interfaccia
INF-1: Specifiche tecniche di Interfaccia INF-1: Specifiche Tecniche di Interfaccia Versione 1.1 Nome doc.: INF-1 Specifiche Interfaccia v1.0.doc Edizione: 1.0 Data emissione: 12/1/2007 INDICE Modifiche
Specifiche tecniche per il controllo e la trasmissione telematica delle pratiche di Comunicazione Unica
Specifiche tecniche per il controllo e la trasmissione telematica delle pratiche di Comunicazione Unica 1/20 1.1 Modifiche Documento Descrizione Modifica Edizione Data Prima emissione 1 28/07/2008 1.2
Web Service per il controllo e la trasmissione telematica delle pratiche di Comunicazione Unica
Web Service per il controllo e la trasmissione telematica delle pratiche di Comunicazione Unica Versione: 3 Data: 16/10/2014 Autore: InfoCamere 1. Introduzione al documento...3 1.1 Modifiche al documento...
Progetto SIRPE De-materializzazione delle prescrizioni. Servizi personalizzati della CIL
Pag. 1 di 17 Progetto SIRPE De-materializzazione personalizzati CIL per la cooperazione Versione 1.0 INDICE Pag. 2 di 17 1 INTRODUZIONE 4 1.1 Scopo del documento 4 1.2 Riferimenti 4 2 GENERALITÀ 4 2.1
PROGETTO TESSERA SANITARIA
PROGETTO TESSERA SANITARIA WEB SERVICES PER LA VISUALIZZAZIONE DEL REPORT E DEL DETTAGLIO DELLE SEGNALAZIONI DEL CITTADINO DI ANOMALIE SUI DOCUMENTI DI SPESA INVIATI (DECRETO 27 APRILE 2018) VERSIONE 28
A2A Specifiche Web Services
A2A Specifiche Web Services Contenuti 1 CONTENUTI...1 1 INTRODUZIONE...3 2 UPLOAD SEGMENTATO...5 2.1 RICHIESTA UPLOAD SEGMENTATO...5 2.1.1 Input del WS...5 2.1.2 Output del WS...6 2.2 UPLOAD SEGMENTATO...7
PROGETTO TESSERA SANITARIA WSDL E SCHEMI XSD PER L UTILIZZO DEI SERVIZI WEB- SERVICE
09/03/2011 Pag. 1 di 10 PROGETTO TESSERA SANITARIA WSDL E SCHEMI XSD PER L UTILIZZO DEI SERVIZI WEB- Pag. 2 di 10 INDICE 1. INTRODUZIONE 4 2. LISTAESENTIREDDITO.WSDL 5 3. INTERROGAASSESERED.WSDL 7 Pag.
Corso sul linguaggio Java
Corso sul linguaggio Java Modulo JAVA5 B1 Gestione eventi 1 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti AWT o Swing Programmazione ad eventi 2 1 Introduzione Le interfacce create
SDK-CART. Versione 1.1
SDK-CART Versione 1.1 20/04/2008 Indice dei Contenuti 1 INTRODUZIONE...2 2 L USO DEL COMPONENTE DI INTEGRAZIONE DELLA PORTA DI DOMINIO... 2 2.1 Modalità d'uso trasparente dei Servizi...3 2.2 Uso del Servizio
PAG. 1 DI 39 20 LUGLIO 2010 PROGETTO TESSERA SANITARIA WEB SERVICES PER LA TRASMISSIONE DEI CERTIFICATI DI MALATTIA ALL INPS VER 1.
PAG. 1 DI 39 PROGETTO TESSERA SANITARIA WEB SERVICES PER LA TRASMISSIONE DEI CERTIFICATI DI MALATTIA ALL INPS VER 1.5 DEI CERTIFICATI DI MALATTIA ALL INPS PAG. 2 DI 39 INDICE 1. REVISIONI DEL DOCUMENTO
Realizzazione di un sistema per l archiviazione, la conservazione sostitutiva e la dematerializzazione dei documenti
1/27 PROGETTO AIRUMBRIA la conservazione sostitutiva e la dematerializzazione dei documenti MODULI SW REALIZZATI E FUNZIONANTI DEL SERVIZIO DI CONSERVAZIONE - (documento 6.6.1) 2/27 Data: 1/6/2011 Compilato:
ScanDoc presentazione ed uso
ScanDoc presentazione ed uso - documentazione ufficiale - Sommario Premessa... 2 Descrizione ScanDoc... 2 Panoramica... 2 Funzioni disponibili... 2 Invio di documenti letti da scanner tramite mail... 2
Web Service SOAP e WSDL. Tito Flagella [email protected] Lorenzo Nardi [email protected]
Web Service SOAP e WSDL Tito Flagella [email protected] Lorenzo Nardi [email protected] SOAP Originariamente: Simple Object Access Protocol E poi evoluto in un Framework per lo scambio di messaggi in XML 2
Manuale d uso Servizi di accoglienza prescrizioni regionali
Manuale d uso Servizi di accoglienza prescrizioni regionali Il presente documento intende fornire la descrizione e le specifiche tecniche necessarie al colloquio fra i sistemi software produttori di prescrizioni
Web Service per importare una pratica SUAP in. attraverso
Web Service per importare una pratica SUAP in attraverso Versione: 1.0 Data: 31/03/2016 Autore: InfoCamere Direzione Applicazioni 1. Introduzione al documento... 3 1.1 Novità introdotte rispetto alla precedente
WebCare. Specifiche Tecniche recupero dati per tariffazione. Redatto da: STUDIOFARMA 28 MAGGIO 2009 Verificato da: Approvato da:
WebCare Specifiche Tecniche recupero dati per tariffazione Progetto: WEBCARE 2 Versione 1.3 Data 05 AGOSTO 2011 Redatto da: STUDIOFARMA 28 MAGGIO 2009 Verificato da: Approvato da: CRONOLOGIA DELLE VERSIONI
MODALITÀ DI QUALIFICAZIONE DELLA PORTA DI DOMINIO
MODALITÀ DI QUALIFICAZIONE DELLA PORTA DI DOMINIO Versione 1.1 INDICE 1. PREFAZIONE 3 1.1 Autori 3 1.2 Modifiche Documento 3 1.3 Riferimenti 4 1.4 Acronimi e Definizioni 4 2. OBIETTIVI E CONTESTO DI RIFERIMENTO
ASSEGNAZIONE FABBISOGNO
2.0 1 8 Sommario SOMMARIO... 2 1 INTRODUZIONE... 3 2 DETTAGLIO DEL DOCUMENTO... 4 3 SCHEMA XML (STANDARD W3C)... 6 4 ESEMPIO DOCUMENTO XML... 8 2.0 2 8 1 Introduzione In queste pagine è descritta la struttura
PROGETTO TESSERA SANITARIA SERVIZI DI COMUNICAZIONE ATTIVAZIONE E REVOCA DELLE TS-CNS
PROGETTO TESSERA SANITARIA Pag. 2 di 13 INDICE 1. INTRODUZIONE 4 2. CANALI DI COMUNICAZIONE DEI SISTEMI REGIONALI CON IL SISTEMA TS 5 3. SERVIZIO DI COMUNICAZIONE ATTIVAZIONE/REVOCA CNS 6 3.1 DESCRIZIONE
PROGETTO TESSERA SANITARIA WEB SERVICE CMS ATTIVAZIONE E REVOCA TS-CNS IN INTEROPERABILITA FRA CARD MANAGEMENT SYSTEM
PROGETTO TESSERA SANITARIA WEB SERVICE CMS ATTIVAZIONE E REVOCA TS-CNS IN INTEROPERABILITA FRA CARD Pag. 2 di 14 INDICE 1. INTRODUZIONE 4 2. DESCRIZIONE DEL SERVIZIO DI RICHIESTA DI ATTIVAZIONE E REVOCA
Allegato tecnico Servizi di Accoglienza Regionale del Friuli Venezia Giulia Prescrizione Ricetta dematerializzata (D.M. 2/11/2011) - BOZZA
2013_ PRESC_DEM_01 IDAS-SAN-00001-AT-13-001 25 10 2013 Allegato tecnico Servizi di Accoglienza Regionale del Friuli Venezia Giulia Prescrizione Ricetta dematerializzata (D.M. 2/11/2011) - BOZZA Il presente
Gestione degli eventi in Java
Gestione degli eventi in Java package java.awt.event.* Il modello degli eventi I componenti dell awt generano eventi in seguito alle azioni dell utente movimento del mouse click pressione di un tasto etc.
Finestra.java. static String nomicolonne[] = {"ind.","cognome","nome","telefono","e-mail"}; //nomi delle colonne della tabella
import java.awt.*; import java.awt.event.actionevent; import java.awt.event.actionlistener; import java.awt.event.windowevent; import java.awt.event.windowlistener; import java.io.*; import java.util.*;
Manuale d uso Servizi di accoglienza prescrizioni regionali
Manuale d uso Servizi di accoglienza prescrizioni regionali Il presente documento intende fornire la descrizione e le specifiche tecniche necessarie al colloquio fra i sistemi software produttori di prescrizioni
Specifiche struttura del file dei rilievi Descrizione e XML Schema
Specifiche struttura del file dei rilievi Descrizione e XML Schema Contenuti CONTENUTI...2 1 INTRODUZIONE...3 2 MODELLO INFORMATIVO...4 3 APPENDICE...7 3.1 APPENDICE A XSD...7 3.1.1 Remark.xsd...7 2 1
COMUNAS Estensione del portale
COMUNAS Estensione del portale Documento: Data: Maggio 2008 File: Allegato_tecnico.doc Versione: def_2008-05-29 Redazione: Sardegna IT Approvazione: REGIONE AUTONOMA DELLA SARDEGNA Presidenza Direzione
OSSERVATORIO RIFIUTI SOVRAREGIONALE ~ ~ ~ IMPORTAZIONE AUTOMATICA DELLE IMFORMAZIONI SUI RIFIUTI RITIRATI E PRODOTTI DAGLI IMPIANTI.
OSSERVATORIO RIFIUTI SOVRAREGIONALE ~ ~ ~ IMPORTAZIONE AUTOMATICA DELLE IMFORMAZIONI SUI RIFIUTI RITIRATI E PRODOTTI DAGLI IMPIANTI Revisione 106 Omnigate srl Bergamo, luglio 2009 1. Introduzione Il servizio
Referti on-line e CRM ReView Service Monitor Specifiche tecniche
Referti on-line e CRM ReView Service Monitor Specifiche tecniche Versione 1.3 Sommario 1- Introduzione... 3 2 - Modalità di interazione con il servizio... 3 3 - Formato dell output... 3 4 - Modello dei
Guida alla programmazione e integrazione di servizi in OpenSPCoop. Guida alla programmazione e integrazione di servizi in OpenSPCoop
i Guida alla programmazione e integrazione di servizi in OpenSPCoop ii Copyright 2005-2008 Link.it s.r.l. iii COLLABORATORI TITOLO : Guida alla programmazione e integrazione di servizi in OpenSPCoop AZIONE
Allegato 2 XML-Schema per l alimentazione del ReGIndE TipiBaseReGIndE.xsd
Allegato 2 XML-Schema per l alimentazione del ReGIndE TipiBaseReGIndE.xsd
Guida alla programmazione e integrazione di servizi in OpenSPCoop. Guida alla programmazione e integrazione di servizi in OpenSPCoop
i Guida alla programmazione e integrazione di servizi in OpenSPCoop ii Copyright 2005-2011 Link.it s.r.l. iii Indice 1 Introduzione 1 2 Modalità d integrazione trasparente 1 3 Modalità d integrazione tramite
Definizione delle interfacce di colloquio SOAP 1.1
Definizione delle interfacce di colloquio SOAP 1.1 DOCUMENTO:. 1.0 Emesso da: EMISSIONE VERIFICA APPROVAZIONE Nome Alessio Sardaro firma Verificato da: Approvato da: LISTA DI DISTRIBUZIONE AGGIORNAMENTI
Sistema di Tracciabilità del Farmaco
SPECIFICHE TECNICHE DEI TRACCIATI XML TRACCIATO PER LE VALORIZZAZIONI DELLA FORNITURA A SSN Sistema di Tracciabilità del Farmaco Fase 1 Fase di prima attuazione 1 gennaio 2006 Versione 1.1 Pag. 1 di 16
WebEDI Interfaccia web service Descrizione dei servizi
WebEDI Interfaccia web service Descrizione dei servizi Documento Redatto da: Massimo Candi Verificato da: Massimo Candi Approvato da: Massimo Candi Modello Codice Documento Versione e Data Identificativo
XML extensible Markup Language
XML extensible Markup Language Schemi parte b XMLSchema versione 2.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina) G. Mecca Università della Basilicata
Client e Server comunicano tramite il protocollo SOAP.
In questo tutorial implementeremo un semplice SOAP web service in PHP che un client Java richiamerà. In questo modo mostreremo l'interoperabilità fra linguaggi diversi che SOAP permette di avere. La struttura
WSDL. Ing. dell Informazione Gestione dei Servizi Telematici Federica Paganelli 1
WSDL Ing. dell Informazione Gestione dei Servizi Telematici Federica Paganelli 1 Cos è WSDL? Web Service Description Language Linguaggio XML per descrivere servizi web (o, meglio, le loro interfacce) Originariamente
MODALITÀ DI QUALIFICAZIONE DELLA PORTA DI DOMINIO
MODALITÀ DI QUALIFICAZIONE DELLA PORTA DI DOMINIO Versione 1.0 INDICE 1. PREFAZIONE 3 1.1 Autori 3 1.2 Modifiche Documento 3 1.3 Riferimenti 4 1.4 Acronimi e Definizioni 4 2. OBIETTIVI E CONTESTO DI RIFERIMENTO
DTD ed XML Schema - Esercizi
Corso di Laurea Specialistica in Ingegneria Informatica Corso di Linguaggi e Tecnologie Web A. A. 2011-2012 DTD ed XML Schema - Esercizi Eufemia TINELLI Contenuti Esercizi: DTD XML e XSD XML Design Pattern
PROGETTO TESSERA SANITARIA WEB SERVICES PER LA VISUALIZZAZIONE DELLE RICEVUTE DI ATTESTAZIONE DEGLI INVII DEI DOCUMENTI DI SPESA PRECOMPILATO
PROGETTO TESSERA SANITARIA WEB SERVICES PER LA VISUALIZZAZIONE DELLE RICEVUTE DI ATTESTAZIONE DEGLI INVII DEI DOCUMENTI DI SPESA - 730 PRECOMPILATO (DECRETO 31 LUGLIO 2015) VERSIONE 16 11 2015 Pag. 2 di
Invio dei dati di spesa sanitaria di cui art. 3 comma 3 D.ls 175/2014 WEB SERVICE SINCRONO
PROGETTO TESSERA SANITARIA Invio dei dati di spesa sanitaria di cui art. 3 comma 3 D.ls 175/2014 WEB SERVICE SINCRONO (DECRETO 31 LUGLIO 2015) VERSIONE 12 11 2015 Pag. 2 di 33 INDICE 1. INTRODUZIONE 3
Programmazione di Web Services
Luca Cabibbo Architetture Software Programmazione di Web Services Dispensa ASW 860 ottobre 2014 La scelta tra architetture può ben dipendere da quali sono gli svantaggi che il cliente può gestire meglio.
Gestione ex Inpdap SISTEMA INFORMATIVO DOMANDE DI PRESTAZIONI PENSIONISTICHE E NON PENSIONISTICHE
Allegato_Tecnico Gestione ex Inpdap SISTEMA INFORMATIVO COOPERAZIONE CON GLI ENTI DI PATRONATO PER LA ISTRUTTORIA RELATIVA ALLE DOMANDE DI PRESTAZIONI PENSIONISTICHE E NON PENSIONISTICHE NOTA TECNICA:
AVVISO DI PAGAMENTO. Descrizione del documento e schema XML. WebEDI Scambio elettronico documenti. AVVISO DI PAGAMENTO.doc
Compilare il profilo:non scrivere qui! 1 10 Sommario SOMMARIO... 2 1 INTRODUZIONE... 3 2 DETTAGLIO DEL DOCUMENTO... 4 3 SCHEMA XML (STANDARD W3C)... 6 4 ESEMPIO DOCUMENTO XML... 9 Compilare il profilo:non
Manuale di progettazione schemi XML
Ministero dell'economia e delle finanze Dipartimento per le politiche fiscali - Ufficio coordinamento tecnologie informatiche Sergio Baldelli Manuale di progettazione schemi XML Conformi alle regole del
Riassunto. GUI in Java con l AWT 1. Cos è una GUI. Oggi: GUI in Java, l AWT. GUI in Java. Un esempio. Stefano Mizzaro 1
Riassunto GUI in Java con l AWT 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro [email protected] Programmazione, lezione 23 15 febbraio
Il Sistema di interscambio: Prodotti di TEST a supporto dell adesione ai servizi
Pagina 1 di 18 Il Sistema di interscambio: Prodotti di TEST a supporto dell adesione ai servizi Indice 1 INTRODUZIONE... 2 2 CLIENT SOAP... 2 2.1 INSTALLAZIONE DEL CLIENT SOAP... 2 2.1.1 PREREQUISITI...
Esercitazione XML. Tecniche di Programmazione avanzata Corso di Laurea Specialistica in Ingegneria Telematica Università Kore Enna A.A.
Tecniche di Programmazione avanzata Corso di Laurea Specialistica in Ingegneria Telematica Università Kore Enna A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu [email protected]
Eventi di azione. // con interfaccia per eventi di azione
Eventi di azione (Interfaces ActionListener, Classes ActionEvent) Sono generati quando si premono bottoni, si selezionano voci di menù, si preme invio mentre si scrive in un campo di testo. In awt sono
Web Services Servizio Telematico Dogane
Web Services Servizio Telematico Dogane MANUALE PER L'UTENTE Pagina 1 di 21 Indice 1 Introduzione... 3 2 Test funzionale dei web services... 6 3 Creazione del client... 10 3.1 Soluzioni Open Source...
Specifiche Tecniche Servizi Visura documenti FSE e Invio Patient Summary - Cartelle MMG/PLS
Specifiche Tecniche Servizi Visura documenti FSE e Invio Patient Summary - Cartelle MMG/PLS Il presente documento intende fornire la descrizione e le specifiche tecniche necessarie al colloquio fra il
FATTURA ELETTRONICA {
FATTURA ELETTRONICA { NORMATIVA La Finanziaria 2008 ha stabilito che la fatturazione nei confronti dell Amministrazione dello stato debba avvenire esclusivamente in maniera elettronica Il DM 5 aprile 2013
L Iniziativa egovernment.net per l Italia. Porte di Dominio per la Cooperazione Applicativa Allegato 2
L Iniziativa egovernment.net per l Italia Porte di Dominio per la Cooperazione Applicativa Allegato 2 Porta di Dominio STK Versione 1.0, Aprile 2002 Soluzioni per l Interoperabilità e la Cooperazione Applicativa
Riassunto. GUI in Java con l AWT 1. Oggi: GUI in Java, l AWT. Oggi. GUI in Java. Cos è una GUI. Stefano Mizzaro 1
Riassunto GUI in Java con l AWT 1 Stefano Mizzaro Dipartimento di matematica e informatica Università di Udine http://www.dimi.uniud.it/mizzaro/ [email protected] Programmazione, lezione 20 20 novembre
SISTEMA INFORMATIVO INTEGRATO PER LA GESTIONE DEI FLUSSI INFORMATIVI RELATIVI AI MERCATI DELL ENERGIA ELETTRICA E DEL GAS (SII)
1/41 SISTEMA INFORMATIVO INTEGRATO PER LA GESTIONE DEI FLUSSI INFORMATIVI RELATIVI AI MERCATI DELL ENERGIA ELETTRICA E DEL GAS ALLEGATO A MESSAGGIO PDC 2/41 Indice 1 Introduzione... 3 2 La comunicazione
Esercitazione n 6. Capacità di analisi e di estensione di progetti Componenti grafici e gestione di eventi Linguaggio Java:
Esercitazione n 6 Capacità di analisi e di estensione di progetti Componenti grafici e gestione di eventi Linguaggio Java: il package javax.swing (JFrame, JPanel, JButton, ) java.util.eventobject e sue
Sistema DE.PRO.EM. Istruzioni per il caricamento delle informazioni relative ai prodotti tramite file XML. Versione 1.0
Sistema DE.PRO.EM. Istruzioni per il caricamento delle informazioni relative ai prodotti tramite file XML Versione 1.0 1 Sommario Sommario... 2 1. Istruzioni operative... 3 2. Struttura del file XML...
PROGETTO TESSERA SANITARIA. Schema dati spesa sanitaria di cui art. 3 comma 3 D.ls 175/2014
PROGETTO TESSERA SANITARIA Pag. 2 di 23 REVISIONI DEL DOCUMENTO... 3 1. INTRODUZIONE... 4 2. GENERALITA... 5 3. STANDARD TECNICI... 6 4. INVIO DEI DATI DI SPESA... 7 4.1. CARATTERISTICHE... 7 4.2. ACCESSO
AVVISO DI MERCE PRONTA
AVVISO DI MERCE 2.0 1 8 Sommario SOMMARIO... 2 1 INTRODUZIONE... 3 2 DETTAGLIO DEL DOCUMENTO... 4 3 SCHEMA XML (STANDARD W3C)... 5 4 ESEMPIO DOCUMENTO XML... 7 AVVISO DI MERCE 2.0 2 8 1 Introduzione In
AdvSelf Italia Srl. Manuale Gateway FTP XML. Copyright @ 2015 AdvSelf Italia srl - All Rights Reserved
AdvSelf Italia Srl Manuale Gateway FTP XML Indice Indice... 2 Introduzione... 3 ftp XML... 4 Risposta... 5 SendMessage... 5 Risposta positiva a SendMessage... 6 Esempi SendMessage... 6 Esempio 1:... 7
Manuale Gestione di OpenSPCoop 1.4 i. Manuale Gestione di OpenSPCoop 1.4
i Manuale Gestione di OpenSPCoop 1.4 ii Copyright 2005-2011 Link.it srl iii Indice 1 Introduzione 1 2 Prerequisiti per la Configurazione della Porta di Dominio 1 2.1 Verifica dell applicazione di gestione
IL SISTEMA APPLICATIVO WORD
Programma di Alfabetizzazione informatica Corso di II^ livello a.s. 2014/2015 IL SISTEMA APPLICATIVO WORD Approfondimenti del Menu pricipale di Word : inserisci, formato, strumenti Personalizzazione di
Appendice F: Allegato tecnico alle linee guida sull iscrizione on line
Linee guida Università Digitale Appendice F: Allegato tecnico alle linee guida sull iscrizione on line Descrizione tecnica del servizio realizzato da CINECA per adempiere alla sperimentazione delle verifiche
1 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages
1 http://desvino.altervista.org JSPDynPage, componenti portale e Java Server Pages Le JSP DynPages sono un utile strumento, fornito da SAP Netweaver, per una gestione più evoluta di event handling e session
La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete
La prima applicazione Java Programma MyFirstApplication Il programma visualizza una finestra vuota sullo schermo. Importo il package delle classi usate nel seguito. Dichiaro la classe MyFirstApplication
