Appendice A

Transcript

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