SPCoopValidazioneSintattica.java

  1. /*
  2.  * GovWay - A customizable API Gateway
  3.  * https://govway.org
  4.  *
  5.  * Copyright (c) 2005-2025 Link.it srl (https://link.it).
  6.  *
  7.  * This program is free software: you can redistribute it and/or modify
  8.  * it under the terms of the GNU General Public License version 3, as published by
  9.  * the Free Software Foundation.
  10.  *
  11.  * This program is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14.  * GNU General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU General Public License
  17.  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  18.  *
  19.  */



  20. package org.openspcoop2.protocol.spcoop.validator;


  21. import java.net.URL;
  22. import java.text.SimpleDateFormat;
  23. import java.util.Date;
  24. import java.util.GregorianCalendar;
  25. import java.util.List;

  26. import javax.xml.soap.AttachmentPart;
  27. import javax.xml.soap.Detail;
  28. import javax.xml.soap.Name;
  29. import javax.xml.soap.SOAPBody;
  30. import javax.xml.soap.SOAPFault;
  31. import javax.xml.soap.SOAPHeader;
  32. import javax.xml.soap.SOAPHeaderElement;

  33. import org.openspcoop2.core.constants.TipoPdD;
  34. import org.openspcoop2.core.id.IDSoggetto;
  35. import org.openspcoop2.message.OpenSPCoop2Message;
  36. import org.openspcoop2.message.OpenSPCoop2MessageFactory;
  37. import org.openspcoop2.message.OpenSPCoop2SoapMessage;
  38. import org.openspcoop2.message.constants.Costanti;
  39. import org.openspcoop2.message.constants.MessageRole;
  40. import org.openspcoop2.message.constants.MessageType;
  41. import org.openspcoop2.message.soap.SoapUtils;
  42. import org.openspcoop2.protocol.basic.BasicStateComponentFactory;
  43. import org.openspcoop2.protocol.sdk.Busta;
  44. import org.openspcoop2.protocol.sdk.Context;
  45. import org.openspcoop2.protocol.sdk.Eccezione;
  46. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  47. import org.openspcoop2.protocol.sdk.ProtocolException;
  48. import org.openspcoop2.protocol.sdk.Riscontro;
  49. import org.openspcoop2.protocol.sdk.Trasmissione;
  50. import org.openspcoop2.protocol.sdk.builder.ProprietaManifestAttachments;
  51. import org.openspcoop2.protocol.sdk.config.ITraduttore;
  52. import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
  53. import org.openspcoop2.protocol.sdk.constants.ContestoCodificaEccezione;
  54. import org.openspcoop2.protocol.sdk.constants.CostantiProtocollo;
  55. import org.openspcoop2.protocol.sdk.constants.ErroreCooperazione;
  56. import org.openspcoop2.protocol.sdk.constants.Inoltro;
  57. import org.openspcoop2.protocol.sdk.constants.LivelloRilevanza;
  58. import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
  59. import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
  60. import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
  61. import org.openspcoop2.protocol.sdk.state.IState;
  62. import org.openspcoop2.protocol.sdk.validator.IValidazioneSintattica;
  63. import org.openspcoop2.protocol.sdk.validator.ProprietaValidazioneErrori;
  64. import org.openspcoop2.protocol.sdk.validator.StrutturaBustaException;
  65. import org.openspcoop2.protocol.sdk.validator.ValidazioneSintatticaResult;
  66. import org.openspcoop2.protocol.spcoop.SPCoopBustaRawContent;
  67. import org.openspcoop2.protocol.spcoop.config.SPCoopProperties;
  68. import org.openspcoop2.protocol.spcoop.constants.SPCoopCostanti;
  69. import org.openspcoop2.protocol.spcoop.constants.SPCoopCostantiPosizioneEccezione;
  70. import org.openspcoop2.protocol.spcoop.utils.SPCoopUtils;
  71. import org.openspcoop2.utils.date.DateManager;
  72. import org.openspcoop2.utils.date.DateUtils;
  73. import org.w3c.dom.Node;

  74. /**
  75.  * Classe che implementa, in base al protocollo SPCoop, l'interfaccia {@link org.openspcoop2.protocol.sdk.validator.IValidazioneSintattica}
  76.  *
  77.  * @author Poli Andrea (apoli@link.it)
  78.  * @author Lorenzo Nardi (nardi@link.it)
  79.  * @author $Author$
  80.  * @version $Rev$, $Date$
  81.  */
  82. public class SPCoopValidazioneSintattica extends BasicStateComponentFactory implements IValidazioneSintattica<SOAPHeaderElement>{

  83.     /** Messaggio. */
  84.     private OpenSPCoop2SoapMessage msg;
  85.     public void setMsg(OpenSPCoop2SoapMessage msg) {
  86.         this.msg = msg;
  87.     }
  88.     /** HeaderSOAP */
  89.     private SOAPHeader headerSOAP = null;
  90.     /** Header SPCoop */
  91.     private SPCoopBustaRawContent headerEGov;
  92.     public void setHeaderSOAP(SOAPHeader headerSOAP) {
  93.         this.headerSOAP = headerSOAP;
  94.     }
  95.     /** Errori di validazione riscontrati sulla busta */
  96.     private java.util.List<Eccezione> erroriValidazione;
  97.     /** Errori di processamento riscontrati sulla busta */
  98.     private java.util.List<Eccezione> erroriProcessamento;
  99.     /** Errors riscontrati sulla lista eccezioni */
  100.     private java.util.List<Eccezione> errorsTrovatiSullaListaEccezioni;
  101.     /** Busta */
  102.     private Busta busta;
  103.     /** Eventuale messaggio di errore avvenuto durante il processo di validazione */
  104.     private String msgErrore;
  105.     /** Eventuale codice di errore avvenuto durante il processo di validazione  */
  106.     private CodiceErroreCooperazione codiceErrore;
  107.     /** Indicazione se leggere gli attributi qualificati */
  108.     private boolean readQualifiedAttribute;
  109.     public void setReadQualifiedAttribute(boolean readQualifiedAttribute) {
  110.         this.readQualifiedAttribute = readQualifiedAttribute;
  111.     }

  112.     private boolean segnalazioneElementoPresentePiuVolte = false;
  113.    
  114.     /** Indicazione se la busta risulta scaduta */
  115.     private boolean messaggioScaduto = false;
  116.    
  117.     /** bustaErroreHeaderIntestazione: generata solo quando la busta egov arrivata non contiene gli elementi principali */
  118.     private Busta bustaErroreHeaderIntestazione = null;
  119.    
  120. //  private List<String> tipiSoggetti = null;
  121. //  private List<String> tipiServizi = null;

  122.     private ITraduttore traduttore = null;
  123.    
  124.     private SPCoopProperties spcoopProperties = null;
  125.    
  126.     @SuppressWarnings("unused")
  127.     private Context context;
  128.    
  129.     /**
  130.      * Costruttore
  131.      *
  132.      * @param protocolFactory ProtocolFactory
  133.      * @throws ProtocolException
  134.      *
  135.      */
  136.     public SPCoopValidazioneSintattica(IProtocolFactory<SOAPHeaderElement> protocolFactory,IState state) throws ProtocolException{
  137.         super(protocolFactory,state);
  138.         this.errorsTrovatiSullaListaEccezioni = new java.util.ArrayList<Eccezione>();
  139.         this.erroriProcessamento = new java.util.ArrayList<Eccezione>();
  140.         this.erroriValidazione = new java.util.ArrayList<Eccezione>();
  141.        
  142. //      this.tipiSoggetti = this.protocolFactory.createProtocolConfiguration().getTipiSoggetti();
  143. //      this.tipiServizi = this.protocolFactory.createProtocolConfiguration().getTipiServizi(ServiceBinding.SOAP);
  144.        
  145.         this.traduttore = this.protocolFactory.createTraduttore();
  146.        
  147.         this.spcoopProperties = SPCoopProperties.getInstance(this.log);
  148.     }


  149.     public SPCoopBustaRawContent getHeaderEGov(OpenSPCoop2SoapMessage aMsg, boolean readQualifiedAttribute) throws ProtocolException{
  150.         this.msg = aMsg;
  151.         this.readQualifiedAttribute = readQualifiedAttribute;
  152.         return getHeaderEGov();
  153.     }
  154.     /**
  155.      * Ritorna l'header SPCoop.
  156.      *
  157.      * @return header SPCoop.
  158.      *
  159.      */
  160.     public SPCoopBustaRawContent getHeaderEGov() throws ProtocolException{
  161.         try{
  162.             if(this.headerEGov!=null){
  163.                 return this.headerEGov;
  164.             }else{
  165.                 if(this.headerSOAP==null){
  166.                     this.headerSOAP = this.msg.getSOAPHeader();
  167.                 }
  168.                 this.headerEGov = this.getHeaderEGov(this.msg.getFactory(), this.headerSOAP);
  169.                 return this.headerEGov;
  170.             }
  171.         }catch(Exception e){
  172.             this.log.error("ValidazioneSintattica.headerEGovAsBytes error: "+e.getMessage(),e);
  173.             throw new ProtocolException("ValidazioneSintattica.headerEGovAsBytes error: "+e.getMessage(),e);
  174.         }
  175.     }


  176.     @Override
  177.     public void setContext(Context context) {
  178.         this.context = context;
  179.     }

  180.     /**
  181.      * Oggetto Busta SPCoop contenente i valori della busta ricevuta.
  182.      *
  183.      * @return busta SPCoop.
  184.      *
  185.      */
  186.     public Busta getBusta(){
  187.         return this.busta;
  188.     }

  189.     /**
  190.      * Ritorna un List contenente eventuali eccezioni di validazione riscontrate nella busta SPCoop.  
  191.      *
  192.      * @return Eccezioni riscontrate nella busta SPCoop.
  193.      *
  194.      */
  195.     public java.util.List<Eccezione> getEccezioniValidazione(){
  196.         return this.erroriValidazione;
  197.     }
  198.     /**
  199.      * Ritorna un List contenente eventuali eccezioni di processamento riscontrate nella busta SPCoop.  
  200.      *
  201.      * @return Eccezioni riscontrate nella busta SPCoop.
  202.      *
  203.      */
  204.     public java.util.List<Eccezione> getEccezioniProcessamento(){
  205.         return this.erroriProcessamento;
  206.     }

  207.     /**
  208.      * Ritorna un List contenente eventuali eccezioni riscontrate nella busta SPCoop durante il processo di validazione.  
  209.      *
  210.      * @return Eccezioni riscontrate nella busta SPCoop.
  211.      *
  212.      */
  213.     public java.util.List<Eccezione> getErroriTrovatiSullaListaEccezioni(){
  214.         return this.errorsTrovatiSullaListaEccezioni;
  215.     }

  216.     /**
  217.      * In caso di avvenuto errore durante il processo di validazione,
  218.      * questo metodo ritorna il motivo dell'errore.
  219.      *
  220.      * @return motivo dell'errore (se avvenuto).
  221.      *
  222.      */
  223.     public String getMsgErrore(){
  224.         return this.msgErrore;
  225.     }

  226.     /**
  227.      * In caso di avvenuto errore, questo metodo ritorna il codice dell'errore.
  228.      *
  229.      * @return codice dell'errore (se avvenuto).
  230.      *
  231.      */
  232.     public CodiceErroreCooperazione getCodiceErrore(){
  233.         return this.codiceErrore;
  234.     }

  235.     /**
  236.      * Ritorna l'header SPCoop.
  237.      *
  238.      * @return header SPCoop.
  239.      *
  240.      */
  241.     public SPCoopBustaRawContent getHeaderSPCoop(){
  242.         return this.headerEGov;
  243.     }

  244.     /**
  245.      * Metodo che effettua una validazione sintattica di una busta SPCoop.
  246.      * Il metodo, oltre ad effettuare la validazione della busta, si occupa anche di leggerne il contenuto e
  247.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  248.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  249.      *   {@link Eccezione}, e viene inserito nel List <var>errors</var>.
  250.      *
  251.      * @return return true in caso di validazione sintattica riuscita (con o senza anomalie), false in caso di errori di processamento.
  252.      *
  253.      */
  254.     public boolean valida(boolean localizzaSolamenteDatiIdentificativiMinimi){

  255.         OpenSPCoop2MessageFactory messageFactory = null;
  256.         try{

  257.             /** ------ CONTROLLO PRESENZA BUSTA SPCOOP ----- */

  258.             // Estraggo header
  259.             if(this.headerSOAP==null)
  260.                 this.headerSOAP = this.msg.getSOAPHeader();
  261.             if(this.headerSOAP==null){
  262.                 this.msgErrore =  "Analizzato un messaggio senza header";
  263.                 this.codiceErrore = CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO;
  264.                 return false;
  265.             }
  266.            
  267.             messageFactory = this.msg.getFactory();
  268.            
  269.             // Estraggo busta SPCoop
  270.             if(this.headerEGov==null)
  271.                 this.headerEGov = getHeaderEGov(messageFactory, this.headerSOAP);
  272.             if(this.headerEGov==null){
  273.                 this.msgErrore =  "Analizzato un messaggio senza busta SPCoop";
  274.                 this.codiceErrore = CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO;
  275.                 return false;
  276.             }      
  277.            
  278.         } catch(StrutturaBustaException e) {
  279.             this.log.error("Struttura della busta non corretta: "+e.getMessage(),e);
  280.             this.msgErrore =  e.getMessage();
  281.             this.codiceErrore = CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO;
  282.             return false;
  283.         } catch(Exception e) {
  284.             this.msgErrore = "(Validazione sintattica) "+e.getMessage();
  285.             this.codiceErrore = CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO;
  286.             this.busta = null;
  287.             return false;
  288.         }


  289.         try{

  290.             /** ------ VALIDAZIONE SINTATTICA -- */

  291.             // Busta da ritornare
  292.             Busta aBusta = new Busta(this.protocolFactory.getProtocol());
  293.             this.busta = aBusta;
  294.             this.erroriValidazione = new java.util.ArrayList<Eccezione>();
  295.             this.erroriProcessamento = new java.util.ArrayList<Eccezione>();
  296.             this.errorsTrovatiSullaListaEccezioni = new java.util.ArrayList<Eccezione>();

  297.             // Prefix eGov
  298.             String xmlns = getPrefix();

  299.             // Controllo Actor
  300.             //log.info("Controllo attributo Actor["+this.header.getActor()+"] ...");
  301.             if(SPCoopCostanti.ACTOR_EGOV.equals(this.headerEGov.getElement().getActor()) == false){
  302.                 if(this.spcoopProperties.isGenerazioneBustaErrore_actorScorretto()==false){
  303.                     throw new StrutturaBustaException("Header egov con actor scorretto","Actor");
  304.                 }else{
  305.                     Eccezione ecc = new Eccezione();
  306.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  307.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  308.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  309.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_ACTOR.toString());
  310.                     this.erroriValidazione.add(ecc);
  311.                 }
  312.             }
  313.            
  314.             // Controllo MustUnderstand
  315.             //log.info("Controllo attributo MustUnderstand["+this.header.getMustUnderstand()+"] ...");
  316.             if(this.headerEGov.getElement().getMustUnderstand() == false){
  317.                 Eccezione ecc = new Eccezione();
  318.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  319.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  320.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  321.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_MUST_UNDERSTAND.toString());
  322.                 this.erroriValidazione.add(ecc);
  323.             }
  324.             List<Node> list = SoapUtils.getNotEmptyChildNodes(messageFactory, this.headerEGov.getElement());

  325.             //  Controllo value prefix
  326.             if(SPCoopCostanti.NAMESPACE_EGOV.equals(this.headerEGov.getElement().getNamespaceURI())==false){
  327.                 Eccezione ecc = new Eccezione();
  328.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  329.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  330.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  331.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_NAMESPACE.toString());
  332.                 this.erroriValidazione.add(ecc);
  333.             }

  334.             // intestazione messaggio
  335.             Node intestazioneMsg = list.get(0);
  336.             List<Node> headerMsg = SoapUtils.getNotEmptyChildNodes(messageFactory, intestazioneMsg);
  337.             boolean mittenteGiaTrovato = false;
  338.             boolean destinatarioGiaTrovato = false;
  339.             boolean profiloCollaborazioneGiaTrovato = false;
  340.             boolean collaborazioneGiaTrovato = false;
  341.             boolean servizioGiaTrovato = false;
  342.             boolean azioneGiaTrovato = false;
  343.             boolean messaggioGiaTrovato = false;
  344.             boolean profiloTrasmissioneGiaTrovato = false;
  345.             boolean sequenzaGiaTrovato = false;
  346.             for(int i =0; i<headerMsg.size();i++){
  347.                 Node child = headerMsg.get(i);
  348.                 //if((child.getNodeName().equals(xmlns+"Mittente"))){
  349.                 if(SoapUtils.matchLocalName(messageFactory, child, "Mittente", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  350.                     if(mittenteGiaTrovato==false){
  351.                         validazioneMittente(messageFactory, child,xmlns);
  352.                         mittenteGiaTrovato = true;
  353.                     }else{
  354.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  355.                             throw new StrutturaBustaException("Header egov con più di un elemento Mittente","Mittente");
  356.                         }else{
  357.                             Eccezione ecc = new Eccezione();
  358.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  359.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.MITTENTE_PRESENTE_PIU_VOLTE);
  360.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  361.                             if(this.segnalazioneElementoPresentePiuVolte)
  362.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  363.                             else
  364.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE.toString());
  365.                             this.erroriValidazione.add(ecc);
  366.                         }
  367.                     }
  368.                 }
  369.                 //else if((child.getNodeName().equals(xmlns+"Destinatario"))){
  370.                 else if(SoapUtils.matchLocalName(messageFactory, child, "Destinatario", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  371.                     if(destinatarioGiaTrovato==false){
  372.                         validazioneDestinatario(messageFactory, child,xmlns);
  373.                         destinatarioGiaTrovato = true;
  374.                     }else{
  375.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  376.                             throw new StrutturaBustaException("Header egov con più di un elemento Destinatario","Destinatario");
  377.                         }else{
  378.                             Eccezione ecc = new Eccezione();
  379.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  380.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.DESTINATARIO_PRESENTE_PIU_VOLTE);
  381.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  382.                             if(this.segnalazioneElementoPresentePiuVolte)
  383.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  384.                             else
  385.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE.toString());
  386.                             this.erroriValidazione.add(ecc);
  387.                         }
  388.                     }
  389.                 }
  390.                 //else if((child.getNodeName().equals(xmlns+"ProfiloCollaborazione"))){
  391.                 else if(SoapUtils.matchLocalName(messageFactory, child, "ProfiloCollaborazione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  392.                     // Serve per poter riconoscere il caso del profilo asincrono in modo da non localizzare una porta applicativa
  393.                     //if(localizzaSolamenteDatiIdentificativiMinimi==false){
  394.                     if(profiloCollaborazioneGiaTrovato==false){
  395.                         validazioneProfiloCollaborazione(messageFactory, child,xmlns);
  396.                         profiloCollaborazioneGiaTrovato = true;
  397.                     }else{
  398.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  399.                             throw new StrutturaBustaException("Header egov con più di un elemento ProfiloCollaborazione","ProfiloCollaborazione");
  400.                         }else{
  401.                             Eccezione ecc = new Eccezione();
  402.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  403.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_COLLABORAZIONE_PRESENTE_PIU_VOLTE);
  404.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  405.                             if(this.segnalazioneElementoPresentePiuVolte)
  406.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  407.                             else
  408.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE.toString());
  409.                             this.erroriValidazione.add(ecc);
  410.                         }
  411.                     }
  412.                 }
  413.                 //else if((child.getNodeName().equals(xmlns+"Collaborazione"))){
  414.                 else if(SoapUtils.matchLocalName(messageFactory, child, "Collaborazione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  415.                     if(localizzaSolamenteDatiIdentificativiMinimi==false){
  416.                         if(collaborazioneGiaTrovato==false){
  417.                             validazioneCollaborazione(messageFactory, child);
  418.                             collaborazioneGiaTrovato = true;
  419.                         }else{
  420.                             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  421.                                 throw new StrutturaBustaException("Header egov con più di un elemento Collaborazione","Collaborazione");
  422.                             }else{
  423.                                 Eccezione ecc = new Eccezione();
  424.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  425.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.COLLABORAZIONE_PRESENTE_PIU_VOLTE);
  426.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  427.                                 if(this.segnalazioneElementoPresentePiuVolte)
  428.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_COLLABORAZIONE_SCONOSCIUTA_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  429.                                 else
  430.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_COLLABORAZIONE_SCONOSCIUTA_POSIZIONE.toString());
  431.                                 this.erroriValidazione.add(ecc);
  432.                             }
  433.                         }
  434.                     }
  435.                 }
  436.                 //else if((child.getNodeName().equals(xmlns+"Servizio"))){
  437.                 else if(SoapUtils.matchLocalName(messageFactory, child, "Servizio", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  438.                     if(servizioGiaTrovato==false){
  439.                         validazioneServizio(messageFactory, child,xmlns);
  440.                         servizioGiaTrovato = true;
  441.                     }else{
  442.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  443.                             throw new StrutturaBustaException("Header egov con più di un elemento Servizio","Servizio");
  444.                         }else{
  445.                             Eccezione ecc = new Eccezione();
  446.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  447.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_PRESENTE_PIU_VOLTE);
  448.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  449.                             if(this.segnalazioneElementoPresentePiuVolte)
  450.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  451.                             else
  452.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE.toString());
  453.                             this.erroriValidazione.add(ecc);
  454.                         }
  455.                     }
  456.                 }
  457.                 //else if((child.getNodeName().equals(xmlns+"Azione"))){
  458.                 else if(SoapUtils.matchLocalName(messageFactory, child, "Azione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  459.                     if(azioneGiaTrovato==false){
  460.                         validazioneAzione(messageFactory, child);
  461.                         azioneGiaTrovato = true;
  462.                     }else{
  463.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  464.                             throw new StrutturaBustaException("Header egov con più di un elemento Azione","Azione");
  465.                         }else{
  466.                             Eccezione ecc = new Eccezione();
  467.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  468.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.AZIONE_PRESENTE_PIU_VOLTE);
  469.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  470.                             if(this.segnalazioneElementoPresentePiuVolte)
  471.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_AZIONE_SCONOSCIUTA_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  472.                             else
  473.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_AZIONE_SCONOSCIUTA_POSIZIONE.toString());
  474.                             this.erroriValidazione.add(ecc);
  475.                         }
  476.                     }
  477.                 }
  478.                 //else if((child.getNodeName().equals(xmlns+"Messaggio"))){
  479.                 else if(SoapUtils.matchLocalName(messageFactory, child, "Messaggio", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  480.                     // Serve per poter riconoscere il caso del profilo asincrono in modo da non localizzare una porta applicativa
  481.                     //if(localizzaSolamenteDatiIdentificativiMinimi==false){
  482.                     if(messaggioGiaTrovato==false){
  483.                         validazioneMessaggio(messageFactory, child,xmlns);
  484.                         messaggioGiaTrovato = true;
  485.                     }else{
  486.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  487.                             throw new StrutturaBustaException("Header egov con più di un elemento Messaggio","Messaggio");
  488.                         }else{
  489.                             Eccezione ecc = new Eccezione();
  490.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  491.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  492.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  493.                             if(this.segnalazioneElementoPresentePiuVolte)
  494.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_MESSAGGIO+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  495.                             else
  496.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_MESSAGGIO.toString());
  497.                             this.erroriValidazione.add(ecc);
  498.                         }
  499.                     }
  500.                     //}
  501.                 }
  502.                 //else if((child.getNodeName().equals(xmlns+"ProfiloTrasmissione"))){
  503.                 else if(SoapUtils.matchLocalName(messageFactory, child, "ProfiloTrasmissione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  504.                     if(localizzaSolamenteDatiIdentificativiMinimi==false){
  505.                         if(profiloTrasmissioneGiaTrovato==false){
  506.                             validazioneProfiloTrasmissione(messageFactory, child,xmlns);
  507.                             profiloTrasmissioneGiaTrovato = true;
  508.                         }else{
  509.                             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  510.                                 throw new StrutturaBustaException("Header egov con più di un elemento ProfiloTrasmissione","ProfiloTrasmissione");
  511.                             }else{
  512.                                 Eccezione ecc = new Eccezione();
  513.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  514.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_TRASMISSIONE_PRESENTE_PIU_VOLTE);
  515.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  516.                                 if(this.segnalazioneElementoPresentePiuVolte)
  517.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_TRASMISSIONE_NON_VALIDO_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  518.                                 else
  519.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_TRASMISSIONE_NON_VALIDO_POSIZIONE.toString());
  520.                                 this.erroriValidazione.add(ecc);
  521.                             }
  522.                         }
  523.                     }
  524.                 }
  525.                 //else if((child.getNodeName().equals(xmlns+"Sequenza"))){
  526.                 else if(SoapUtils.matchLocalName(messageFactory, child, "Sequenza", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  527.                     if(localizzaSolamenteDatiIdentificativiMinimi==false){
  528.                         if(sequenzaGiaTrovato==false){
  529.                             validazioneSequenza(messageFactory, child,xmlns);
  530.                             sequenzaGiaTrovato = true;
  531.                         }else{
  532.                             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  533.                                 throw new StrutturaBustaException("Header egov con più di un elemento Sequenza","Sequenza");
  534.                             }else{
  535.                                 Eccezione ecc = new Eccezione();
  536.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  537.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.CONSEGNA_IN_ORDINE_PRESENTE_PIU_VOLTE);
  538.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  539.                                 if(this.segnalazioneElementoPresentePiuVolte)
  540.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SEQUENZA_NON_VALIDA_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  541.                                 else
  542.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SEQUENZA_NON_VALIDA_POSIZIONE.toString());
  543.                                 this.erroriValidazione.add(ecc);
  544.                             }
  545.                         }
  546.                     }
  547.                 }else{
  548.                     Eccezione ecc = new Eccezione();
  549.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  550.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  551.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  552.                     ecc.setDescrizione("Messaggio/child["+child.getNodeName()+"]");
  553.                     this.erroriValidazione.add(ecc);
  554.                 }
  555.             }

  556.             if(localizzaSolamenteDatiIdentificativiMinimi){
  557.                 // una volta letto il messaggio, anche minimo, e' possibile utilizzarlo.
  558.                 return true;
  559.             }
  560.            
  561.             // Controllo scadenza messaggio rispetto ora registrazione
  562.             if(this.spcoopProperties.isRepositoryBusteFiltraBusteScaduteRispettoOraRegistrazione() && (this.messaggioScaduto==false)){
  563.                
  564.                 // Check su OraRegistrazione
  565.                 // Se correttamente formato, altrimenti segnalero' poi il problema
  566.                 Date oraRegistrazioneMinimaAccettata = new Date(DateManager.getTimeMillis()-(this.spcoopProperties.getIntervalloScadenzaBuste()*60*1000));
  567.                 /*System.out.println("BUSTA ["+this.busta.getOraRegistrazione().toString()
  568.                         +"]   MINIMA ["+oraRegistrazioneMinimaAccettata.toString()+"]");*/
  569.                 if(this.busta.getOraRegistrazione()!=null){
  570.                     if( this.busta.getOraRegistrazione().before(oraRegistrazioneMinimaAccettata)){
  571.                         this.log.error("OraRegistrazione portata nella busta ("+SPCoopUtils.getDate_eGovFormat(this.busta.getOraRegistrazione())+") più vecchia della data minima attesa ("+SPCoopUtils.getDate_eGovFormat(oraRegistrazioneMinimaAccettata)+") e scadenza non presente");
  572.                         Eccezione ecc = new Eccezione();
  573.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  574.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.MESSAGGIO_SCADUTO);
  575.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  576.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SCADENZA_NON_VALIDA_POSIZIONE.toString());
  577.                         this.erroriValidazione.add(ecc);
  578.                     }
  579.                 }
  580.                
  581.                 // Check su id egov
  582.                 // Se correttamente formato, altrimenti segnalero' poi il problema
  583.                 if(this.busta.getID()!=null){
  584.                     String [] split = this.busta.getID().split("_");
  585.                     if(split != null && split.length == 5){
  586.                         Date dataIntoIDEgov = null;
  587.                         try{
  588.                             SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMinute();
  589.                             dataIntoIDEgov = dateformat.parse(split[3]+"_"+split[4]);
  590.                         }catch(Exception e){
  591.                             // ignore
  592.                         }
  593.                         if(dataIntoIDEgov!=null){
  594.                             //System.out.println("DATA IDEGOV BUSTA ["+dataIntoIDEgov.toString()
  595.                             //      +"]   MINIMA ["+oraRegistrazioneMinimaAccettata.toString()+"]");
  596.                             if( dataIntoIDEgov.before(oraRegistrazioneMinimaAccettata)){
  597.                                 this.log.error("Data presente nell'idEgov della busta ("+SPCoopUtils.getDate_eGovFormat(dataIntoIDEgov)+") più vecchia della data minima attesa ("+SPCoopUtils.getDate_eGovFormat(oraRegistrazioneMinimaAccettata)+") e scadenza non presente");
  598.                                 Eccezione ecc = new Eccezione();
  599.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  600.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.MESSAGGIO_SCADUTO);
  601.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  602.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SCADENZA_NON_VALIDA_POSIZIONE.toString());
  603.                                 this.erroriValidazione.add(ecc);
  604.                             }
  605.                         }
  606.                     }
  607.                 }
  608.             }

  609.            
  610.             // Altri Elementi
  611.             if(list.size()>1){
  612.                 boolean listaRiscontriGiaPresente = false;
  613.                 boolean listaTrasmissioniGiaPresente = false;
  614.                 boolean listaEccezioniGiaPresente = false;
  615.                 for(int i =1; i<list.size();i++){
  616.                     Node child = list.get(i);
  617.                     if(SoapUtils.matchLocalName(messageFactory, child, "IntestazioneMessaggio", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  618.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  619.                             throw new StrutturaBustaException("Header egov con più di un elemento IntestazioneMessaggio","IntestazioneMessaggio");
  620.                         }else{
  621.                             Eccezione ecc = new Eccezione();
  622.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  623.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  624.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  625.                             if(this.segnalazioneElementoPresentePiuVolte)
  626.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_INTESTAZIONE_MESSAGGIO+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  627.                             else
  628.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_INTESTAZIONE_MESSAGGIO.toString());
  629.                             this.erroriValidazione.add(ecc);
  630.                         }
  631.                     }
  632.                     //else if((child.getNodeName().equals(xmlns+"ListaRiscontri"))){
  633.                     else if(SoapUtils.matchLocalName(messageFactory, child, "ListaRiscontri", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  634.                         if(listaRiscontriGiaPresente==false){
  635.                             validazioneListaRiscontri(messageFactory, child,xmlns);
  636.                             listaRiscontriGiaPresente = true;
  637.                         }else{
  638.                             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  639.                                 throw new StrutturaBustaException("Header egov con più di un elemento ListaRiscontri","ListaRiscontri");
  640.                             }else{
  641.                                 Eccezione ecc = new Eccezione();
  642.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  643.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.LISTA_RISCONTRI_PRESENTE_PIU_VOLTE);
  644.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  645.                                 if(this.segnalazioneElementoPresentePiuVolte)
  646.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  647.                                 else
  648.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE.toString());
  649.                                 this.erroriValidazione.add(ecc);
  650.                             }
  651.                         }
  652.                     }
  653.                     //else if((child.getNodeName().equals(xmlns+"ListaTrasmissioni"))){
  654.                     else if(SoapUtils.matchLocalName(messageFactory, child, "ListaTrasmissioni", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  655.                         if(listaTrasmissioniGiaPresente==false){
  656.                             validazioneListaTrasmissioni(messageFactory, child,xmlns);
  657.                             listaTrasmissioniGiaPresente = true;
  658.                         }else{
  659.                             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  660.                                 throw new StrutturaBustaException("Header egov con più di un elemento ListaTrasmissioni","ListaTrasmissioni");
  661.                             }else{
  662.                                 Eccezione ecc = new Eccezione();
  663.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  664.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.LISTA_TRASMISSIONI_PRESENTE_PIU_VOLTE);
  665.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  666.                                 if(this.segnalazioneElementoPresentePiuVolte)
  667.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  668.                                 else
  669.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE.toString());
  670.                                 this.erroriValidazione.add(ecc);
  671.                             }
  672.                         }
  673.                     }
  674.                     //else if((child.getNodeName().equals(xmlns+"ListaEccezioni"))){
  675.                     else if(SoapUtils.matchLocalName(messageFactory, child, "ListaEccezioni", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  676.                         if(listaEccezioniGiaPresente==false){
  677.                             validazioneListaEccezioni(messageFactory, child,xmlns);
  678.                             listaEccezioniGiaPresente = true;
  679.                         }else{
  680.                             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  681.                                 throw new StrutturaBustaException("Header egov con più di un elemento ListaEccezioni","ListaEccezioni");
  682.                             }else{
  683.                                 Eccezione ecc = new Eccezione();
  684.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  685.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  686.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  687.                                 if(this.segnalazioneElementoPresentePiuVolte)
  688.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  689.                                 else
  690.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE.toString());
  691.                                 this.errorsTrovatiSullaListaEccezioni.add(ecc);
  692.                             }
  693.                         }
  694.                     }else{
  695.                         Eccezione ecc = new Eccezione();
  696.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  697.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  698.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  699.                         ecc.setDescrizione("Intestazione/child["+child.getNodeName()+"]");
  700.                         this.erroriValidazione.add(ecc);
  701.                     }
  702.                 }
  703.             }

  704.            
  705.             if(this.spcoopProperties.isCheckTolleranzaDateFutureAttivo()){
  706.                 if(this.erroriValidazione.size()==0){
  707.                     // controllo che non vi siano date future
  708.                     validazioneDatePresentiRispettoDateFuture();
  709.                 }
  710.             }

  711.         } catch(StrutturaBustaException e) {
  712.             this.log.error("Struttura della busta non corretta: "+e.getMessage(),e);
  713.             this.msgErrore =  e.getMessage();
  714.             this.codiceErrore = CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO;
  715.             return false;
  716.         } catch(Exception e) {
  717.             Eccezione ecc = new Eccezione();
  718.             ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  719.             ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  720.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  721.             ecc.setDescrizione("Errore di processamento durante la validazione sintattica");
  722.             this.erroriProcessamento.add(ecc);
  723.             this.log.error("Errore di processamento durante la validazione sintattica",e);
  724.         }

  725.         // una volta letto il messaggio e' possibile utilizzarlo.
  726.         return true;
  727.     }

  728.    
  729.     public SPCoopBustaRawContent getHeaderEGov_senzaControlli() throws ProtocolException{
  730.         try{    
  731.             // Estraggo header
  732.             if(this.headerSOAP==null)
  733.                 this.headerSOAP = this.msg.getSOAPHeader();
  734.             if(this.headerSOAP==null){
  735.                 throw new Exception("Analizzato un messaggio senza header");
  736.             }  
  737.            
  738.             // cerco la busta per l'actor
  739.             java.util.Iterator<?> it = this.headerSOAP.examineAllHeaderElements();
  740.             SOAPHeaderElement headerElementEGov = null;
  741.             while( it.hasNext()  ){

  742.                 // Test Header Element
  743.                 SOAPHeaderElement headerElement = (SOAPHeaderElement) it.next();

  744.                 //Controllo Actor
  745.                 if( SPCoopCostanti.ACTOR_EGOV.equals(headerElement.getActor()) == false  ){
  746.                     continue;
  747.                 }
  748.                 headerElementEGov = headerElement;
  749.             }
  750.            
  751.             if(headerElementEGov==null){
  752.                 // cerco la busta per il namespace
  753.                 it = this.headerSOAP.examineAllHeaderElements();
  754.                 while( it.hasNext()  ){

  755.                     // Test Header Element
  756.                     SOAPHeaderElement headerElement = (SOAPHeaderElement) it.next();

  757.                     //Controllo Namespace
  758.                     if( SPCoopCostanti.NAMESPACE_EGOV.equals(headerElement.getNamespaceURI()) == false  ){
  759.                         continue;
  760.                     }
  761.                     headerElementEGov = headerElement;
  762.                 }
  763.             }
  764.            
  765.             if(headerElementEGov==null){
  766.                 // header egov non trovato
  767.                 throw new Exception("Header eGov non presente");
  768.             }else{
  769.                 return new SPCoopBustaRawContent(headerElementEGov);
  770.             }
  771.         }catch(Exception e){
  772.             throw new ProtocolException("Lettura non riuscita: "+e.getMessage(),e);
  773.         }
  774.     }
  775.    
  776.     /**
  777.      * Metodo che si occupa di verificare che sia presente un header eGov nel SOAPHeader <var>SOAPHeader</var>.
  778.      * Per essere presente, un header eGov deve possedere almeno i seguenti elementi obbligatori :
  779.      * Intestazione con :
  780.      * <p>
  781.      * <ul>
  782.      * <li> IntestazioneMessaggio-Mittente-IdentificativoParte con tipo e valore
  783.      * <li> IntestazioneMessaggio-Destinatario-IdentificativoParte con tipo e valore
  784.      * <li> IntestazioneMessaggio-Messaggio-....
  785.      * </ul>
  786.      * <p>
  787.      * Se la verifica non ha successo, il metodo ritorna null, altrimenti l'header eGov presente (non estratto).
  788.      *
  789.      * @param header Header Soap in cui deve essere verificato la presenza di un header eGov.
  790.      * @return null se la verifica ha successo, altrimenti l'header eGov presente (non estratto).
  791.      *
  792.      */
  793.     public SPCoopBustaRawContent getHeaderEGov(OpenSPCoop2MessageFactory messageFactory, SOAPHeader header) throws ProtocolException,StrutturaBustaException{
  794.         try{    

  795.             if(header == null)
  796.                 return null;
  797.            
  798.             // cerco la busta per l'actor
  799.             java.util.Iterator<?> it = header.examineAllHeaderElements();
  800.             SOAPHeaderElement headerElementEGov = null;
  801.             StringBuilder bf = new StringBuilder();
  802.             while( it.hasNext()  ){

  803.                 // Test Header Element
  804.                 SOAPHeaderElement headerElement = (SOAPHeaderElement) it.next();

  805.                 //Controllo Actor
  806.                 try{
  807.                     bf.append("Check ACTOR Atteso["+SPCoopCostanti.ACTOR_EGOV+"]==["+headerElement.getActor()+"]=["+SPCoopCostanti.ACTOR_EGOV.equals(headerElement.getActor())+"]\n");
  808.                 }catch(Exception e){
  809.                     // ignore
  810.                 }

  811.                 if( SPCoopCostanti.ACTOR_EGOV.equals(headerElement.getActor()) == false  ){
  812.                     continue;
  813.                 }
  814.                 bf.append("FIND!\n");
  815.                 headerElementEGov = headerElement;
  816.             }
  817.            
  818.             if(headerElementEGov==null){
  819.                 bf.append("NOT FOUND TRAMITE ACTOR!\n");
  820.                 // cerco la busta per il namespace
  821.                 it = header.examineAllHeaderElements();
  822.                 while( it.hasNext()  ){

  823.                     // Test Header Element
  824.                     SOAPHeaderElement headerElement = (SOAPHeaderElement) it.next();

  825.                     //Controllo Namespace
  826.                     try{
  827.                         bf.append("Check NAMESPACE Atteso["+SPCoopCostanti.NAMESPACE_EGOV+"]==["+headerElement.getNamespaceURI()+"]=["+SPCoopCostanti.NAMESPACE_EGOV.equals(headerElement.getNamespaceURI())+"]\n");
  828.                     }catch(Exception e){
  829.                         // ignore
  830.                     }
  831.                     if( SPCoopCostanti.NAMESPACE_EGOV.equals(headerElement.getNamespaceURI()) == false  ){
  832.                         continue;
  833.                     }
  834.                     bf.append("FIND!\n");
  835.                     headerElementEGov = headerElement;
  836.                 }
  837.             }
  838.            
  839.             if(headerElementEGov==null){
  840.                 // header egov non trovato
  841.                 String msgHeader = "";
  842.                 try{
  843.                     msgHeader = " header-soap: "+messageFactory.createEmptyMessage(MessageType.SOAP_11,MessageRole.NONE).getAsString(header, false);
  844.                 }catch(Exception e){
  845.                     // ignore
  846.                 }
  847.                 throw new Exception("Header eGov non presente ("+bf.toString()+")"+msgHeader);
  848.             }
  849.            
  850.             // Preparazione busta di default per eventuale eccezione
  851.             Busta errore = new Busta(this.protocolFactory.getProtocol());
  852.             errore.setTipoMittente(this.spcoopProperties.getKeywordTipoMittenteSconosciuto());
  853.             errore.setMittente(this.spcoopProperties.getKeywordMittenteSconosciuto());
  854.             errore.setIdentificativoPortaMittente(this.traduttore.getIdentificativoPortaDefault(new IDSoggetto(errore.getTipoMittente(), errore.getMittente())));
  855.             errore.setTipoDestinatario(this.spcoopProperties.getKeywordTipoMittenteSconosciuto());
  856.             errore.setDestinatario(this.spcoopProperties.getKeywordMittenteSconosciuto());
  857.             errore.setIdentificativoPortaDestinatario(this.traduttore.getIdentificativoPortaDefault(new IDSoggetto(errore.getTipoDestinatario(), errore.getDestinatario())));
  858.            
  859.             // Controllo presenza più di un header eGov
  860.             if(this.existsMoreHeaderEGov()){
  861.                 errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.FORMATO_NON_CORRETTO,
  862.                         "Più di un header e-Gov presente",
  863.                         this.protocolFactory));
  864.                 this.bustaErroreHeaderIntestazione = errore;
  865.                 throw new Exception("Più di un header e-Gov presente");
  866.             }
  867.            
  868.             // Prefix eGov
  869.             String xmlns = headerElementEGov.getPrefix();
  870.             if(xmlns == null){
  871.                 xmlns = "";
  872.             }else if(!xmlns.equals("")){
  873.                 xmlns = xmlns + ":";
  874.             }
  875.            
  876.             // Controllo presenza elementi obbligatori che contraddistingono un header eGov: Intestazione
  877.             //if(headerElementEGov.getNodeName().equals(xmlns+"Intestazione") == false){
  878.             if(SoapUtils.matchLocalName(messageFactory, headerElementEGov, "Intestazione", xmlns, SPCoopCostanti.NAMESPACE_EGOV) == false ){
  879.                 this.bustaErroreHeaderIntestazione = errore;
  880.                 this.bustaErroreHeaderIntestazione.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.FORMATO_NON_CORRETTO,
  881.                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_NON_CORRETTO_POSIZIONE.toString(),this.protocolFactory));
  882.                 throw new Exception("Header eGov senza header intestazione");
  883.             }

  884.             // Controllo elementi che contraddistingono un header eGov : Intestazione Messaggio
  885.             List<Node> list = SoapUtils.getNotEmptyChildNodes(messageFactory, headerElementEGov);
  886.             if(list==null || list.size() == 0){
  887.                 this.bustaErroreHeaderIntestazione = errore;
  888.                 this.bustaErroreHeaderIntestazione.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO,
  889.                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_INTESTAZIONE_MESSAGGIO.toString(),this.protocolFactory));
  890.                 throw new Exception("Header eGov con header intestazione senza elementi interni tra cui IntestazioneMessaggio");
  891.             }
  892.             Node intestazioneMsg = list.get(0);
  893.             //if( (intestazioneMsg==null) ||  (!(intestazioneMsg.getNodeName().equals(xmlns+"IntestazioneMessaggio")))  ) {
  894.             if( (intestazioneMsg==null) ||   (!SoapUtils.matchLocalName(messageFactory, intestazioneMsg, "IntestazioneMessaggio", xmlns, SPCoopCostanti.NAMESPACE_EGOV)) ) {
  895.                 this.bustaErroreHeaderIntestazione = errore;
  896.                 this.bustaErroreHeaderIntestazione.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO,
  897.                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_INTESTAZIONE_MESSAGGIO.toString(),this.protocolFactory));
  898.                 throw new Exception("Header eGov con header intestazione che possiede first child ["+(intestazioneMsg!=null ? intestazioneMsg.getNodeName() : "null")+"] diverso da IntestazioneMessaggio");
  899.             }
  900.            
  901.             List<Node> intestMsgChild = SoapUtils.getNotEmptyChildNodes(messageFactory, intestazioneMsg);
  902.            
  903.             // Controllo elementi principali
  904.             Node mittente = null;
  905.             Node destinatario = null;
  906.             Node messaggio = null;
  907.             for(int i=0;i<intestMsgChild.size();i++){
  908.                 Node child = intestMsgChild.get(i);
  909.                 if(child==null){
  910.                     this.log.info("Elemento null");
  911.                 }else if(child.getNodeName()==null){
  912.                     this.log.info("Elemento child null");
  913.                 }
  914.                 if(child!=null && child.getNodeName()!=null){
  915.                     //if( (mittente==null) && ((child.getNodeName().equals(xmlns+"Mittente")))){
  916.                     if( (mittente==null) && (SoapUtils.matchLocalName(messageFactory, child, "Mittente", xmlns, SPCoopCostanti.NAMESPACE_EGOV))){
  917.                         mittente = child;
  918.                     }
  919.                     //else if( (destinatario==null) && ((child.getNodeName().equals(xmlns+"Destinatario")))){
  920.                     else if( (destinatario==null) && (SoapUtils.matchLocalName(messageFactory, child, "Destinatario", xmlns, SPCoopCostanti.NAMESPACE_EGOV))){
  921.                         destinatario = child;
  922.                     }
  923.                     //else if( (messaggio==null) && ((child.getNodeName().equals(xmlns+"Messaggio")))){
  924.                     else if( (messaggio==null) && (SoapUtils.matchLocalName(messageFactory, child, "Messaggio", xmlns, SPCoopCostanti.NAMESPACE_EGOV))){
  925.                         messaggio = child;
  926.                     }
  927.                 }
  928.             }
  929.            
  930.             boolean eccezioneStrutturaMittente = false;
  931.             boolean eccezioneStrutturaDestinatario = false;
  932.             boolean eccezioneStrutturaMessaggio = false;
  933.            
  934.             // controllo mittente
  935.             if(mittente==null){
  936.                 errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.MITTENTE_NON_PRESENTE,
  937.                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE.toString(),this.protocolFactory));
  938.                 eccezioneStrutturaMittente = true;
  939.             }else{
  940.                 List<Node> headerMittente = SoapUtils.getNotEmptyChildNodes(messageFactory, mittente); // identificativoParte mitt
  941.                 if( (headerMittente==null) || (headerMittente.size() == 0) ){
  942.                     errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.MITTENTE_NON_PRESENTE,
  943.                             SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  944.                     eccezioneStrutturaMittente = true;
  945.                 } else {
  946.                     for(int i=0; i<headerMittente.size(); i++){
  947.                         Node idParteMittente = headerMittente.get(i);
  948.                         //if( !(idParteMittente.getNodeName().equals(xmlns+"IdentificativoParte"))  ){
  949.                         if( !(SoapUtils.matchLocalName(messageFactory, idParteMittente, "IdentificativoParte", xmlns, SPCoopCostanti.NAMESPACE_EGOV))  ){
  950.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.MITTENTE_NON_PRESENTE,
  951.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  952.                             eccezioneStrutturaMittente = true;
  953.                             break;
  954.                         }
  955.                         List<Node> valueIDParteMitt = SoapUtils.getNotEmptyChildNodes(messageFactory, idParteMittente);
  956.                         if( (valueIDParteMitt==null) || (valueIDParteMitt.size() == 0) || (valueIDParteMitt.size() > 1) ){
  957.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.MITTENTE_NON_VALORIZZATO,
  958.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  959.                             eccezioneStrutturaMittente = false;
  960.                             break;
  961.                         }
  962.                         String mittenteValue = null;
  963.                         try{
  964.                             mittenteValue = valueIDParteMitt.get(0).getNodeValue();
  965.                             if(mittenteValue==null)
  966.                                 throw new Exception("mittente is null");
  967.                             //log.info("Value identificativo parte ["+valueIDParteMitt.item(0).getNodeValue()+"]");
  968.                         } catch(Exception e) {
  969.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.MITTENTE_NON_VALORIZZATO,
  970.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  971.                             eccezioneStrutturaMittente = false;
  972.                             break;
  973.                         }
  974.                         String tipoMittente = null;
  975.                         Node hrefFindMitt = null;
  976.                         if(this.readQualifiedAttribute){
  977.                             hrefFindMitt = SoapUtils.getQualifiedAttributeNode(messageFactory, idParteMittente, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  978.                         }else{
  979.                             hrefFindMitt = SoapUtils.getAttributeNode(messageFactory, idParteMittente, "tipo");
  980.                         }
  981.                         if(hrefFindMitt!=null){
  982.                             try{
  983.                                 tipoMittente = hrefFindMitt.getNodeValue();
  984.                                 if(tipoMittente == null)
  985.                                     throw new Exception("tipo non definito");
  986.                                 //log.info("Value identificativo parte ["+hrefFindMitt.getNodeValue()+"]");
  987.                             } catch(Exception e) {
  988.                                 errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.TIPO_MITTENTE_NON_VALIDO,
  989.                                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_TIPO.toString(),this.protocolFactory));
  990.                                 eccezioneStrutturaMittente = true;
  991.                                 break;
  992.                             }
  993.                         }else{
  994.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.TIPO_MITTENTE_NON_PRESENTE,
  995.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_TIPO.toString(),this.protocolFactory));
  996.                             eccezioneStrutturaMittente = true;
  997.                             break;
  998.                         }  
  999.                         if(i==0){
  1000.                             if(tipoMittente!=null) {
  1001.                                 try {
  1002.                                     errore.setTipoMittente(this.traduttore.toRegistryOrganizationType(tipoMittente));
  1003.                                 }catch(Exception e) {
  1004.                                     errore.setTipoMittente(tipoMittente); // senza traduzione
  1005.                                 }
  1006.                             }
  1007.                             errore.setMittente(mittenteValue);
  1008.                         }else{
  1009.                             //errore.addEccezione(Eccezione.getEccezioneValidazione(Costanti.ECCEZIONE_MITTENTE_SCONOSCIUTO,
  1010.                             //      Costanti.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE+":"+tipoMittente+"/"+mittenteValue+" (busta con più di un mittente non gestita)" ));
  1011.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.MITTENTE_PRESENTE_PIU_VOLTE,
  1012.                                             SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  1013.                             eccezioneStrutturaMittente = false;
  1014.                         }
  1015.                     }
  1016.                 }
  1017.             }
  1018.            
  1019.             // controllo destinatario
  1020.             if(destinatario==null){
  1021.                 errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.DESTINATARIO_NON_PRESENTE,
  1022.                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE.toString(),this.protocolFactory));
  1023.                 eccezioneStrutturaDestinatario = true;
  1024.             }else{
  1025.                 List<Node> headerDestinatario = SoapUtils.getNotEmptyChildNodes(messageFactory, destinatario); // identificativoParte dest
  1026.                 if( (headerDestinatario==null) || (headerDestinatario.size() == 0) ){
  1027.                     errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.DESTINATARIO_NON_PRESENTE,
  1028.                             SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  1029.                     eccezioneStrutturaDestinatario = true;
  1030.                 } else {
  1031.                     for(int i=0; i<headerDestinatario.size(); i++){
  1032.                         Node idParteDestinatario = headerDestinatario.get(i);
  1033.                         //if( !(idParteDestinatario.getNodeName().equals(xmlns+"IdentificativoParte"))  ){
  1034.                         if( !(SoapUtils.matchLocalName(messageFactory, idParteDestinatario, "IdentificativoParte", xmlns, SPCoopCostanti.NAMESPACE_EGOV))  ){
  1035.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.DESTINATARIO_NON_VALIDO,
  1036.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  1037.                             eccezioneStrutturaDestinatario = true;
  1038.                             break;
  1039.                         }
  1040.                         List<Node> valueIDParteDest = SoapUtils.getNotEmptyChildNodes(messageFactory, idParteDestinatario);
  1041.                         if( (valueIDParteDest==null) || (valueIDParteDest.size() == 0) || (valueIDParteDest.size() > 1) ){
  1042.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.DESTINATARIO_NON_VALIDO,
  1043.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  1044.                             eccezioneStrutturaDestinatario = false;
  1045.                             break;
  1046.                         }
  1047.                         String destinatarioValue = null;
  1048.                         try{
  1049.                             destinatarioValue = valueIDParteDest.get(0).getNodeValue();
  1050.                             if(destinatarioValue==null)
  1051.                                 throw new Exception("destinatario is null");
  1052.                             //log.info("Value identificativo parte ["+valueIDParteDest.item(0).getNodeValue()+"]");
  1053.                         } catch(Exception e) {
  1054.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.DESTINATARIO_NON_VALORIZZATO,
  1055.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  1056.                             eccezioneStrutturaDestinatario = false;
  1057.                             break;
  1058.                         }
  1059.                         String tipoDestinatario = null;
  1060.                         Node hrefFindDest = null;
  1061.                         if(this.readQualifiedAttribute){
  1062.                             hrefFindDest = SoapUtils.getQualifiedAttributeNode(messageFactory, idParteDestinatario, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  1063.                         }else{
  1064.                             hrefFindDest = SoapUtils.getAttributeNode(messageFactory, idParteDestinatario, "tipo");
  1065.                         }
  1066.                         if(hrefFindDest!=null){
  1067.                             try{
  1068.                                 tipoDestinatario = hrefFindDest.getNodeValue();
  1069.                                 if(tipoDestinatario == null)
  1070.                                     throw new Exception("tipo non definito");
  1071.                                 //log.info("Value identificativo parte ["+hrefFindDest.getNodeValue()+"]");
  1072.                             } catch(Exception e) {
  1073.                                 errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.TIPO_DESTINATARIO_NON_VALIDO,
  1074.                                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_TIPO.toString(),this.protocolFactory));
  1075.                                 eccezioneStrutturaDestinatario = true;
  1076.                                 break;
  1077.                             }
  1078.                         }else{
  1079.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.TIPO_DESTINATARIO_NON_PRESENTE,
  1080.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_TIPO.toString(),this.protocolFactory));
  1081.                             eccezioneStrutturaDestinatario = true;
  1082.                             break;
  1083.                         }  
  1084.                         if(i==0){
  1085.                             if(tipoDestinatario!=null) {
  1086.                                 try {
  1087.                                     errore.setTipoDestinatario(this.traduttore.toRegistryOrganizationType(tipoDestinatario));
  1088.                                 }catch(Exception e) {
  1089.                                     errore.setTipoDestinatario(tipoDestinatario); // senza traduzione
  1090.                                 }
  1091.                             }
  1092.                             errore.setDestinatario(destinatarioValue);
  1093.                         }else{
  1094.                             //errore.addEccezione(Eccezione.getEccezioneValidazione(Costanti.ECCEZIONE_DESTINATARIO_SCONOSCIUTO,
  1095.                             //      Costanti.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE+":"+tipoDestinatario+"/"+destinatarioValue+" (busta con più di un destinatario non gestita)" ));
  1096.                             errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.DESTINATARIO_PRESENTE_PIU_VOLTE,
  1097.                                     SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE.toString(),this.protocolFactory));
  1098.                             eccezioneStrutturaDestinatario = false;
  1099.                         }
  1100.                     }
  1101.                 }
  1102.             }
  1103.            
  1104.             // controllo messaggio
  1105.             if(messaggio==null){
  1106.                 errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO,
  1107.                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_FORMATO_INTESTAZIONE_NON_CORRETTO_POSIZIONE_MESSAGGIO.toString(),this.protocolFactory));
  1108.                 eccezioneStrutturaMessaggio = true;
  1109.             }else{
  1110.                 List<Node> contenutoMsg = SoapUtils.getNotEmptyChildNodes(messageFactory, messaggio);
  1111.                 if( (contenutoMsg.size() <= 0)){
  1112.                     errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_PRESENTE,
  1113.                             SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString(),this.protocolFactory));
  1114.                     eccezioneStrutturaMessaggio = true;
  1115.                    
  1116.                 }else{
  1117.                     String identificatore = null;
  1118.                     boolean identificatoreTrovato = false;
  1119.                     for(int j =0; j<contenutoMsg.size();j++){
  1120.                         Node childMsg = contenutoMsg.get(j);
  1121.                         //if((childMsg.getNodeName().equals(xmlns+"Identificatore"))){
  1122.                         if(SoapUtils.matchLocalName(messageFactory, childMsg, "Identificatore", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  1123.                             identificatoreTrovato = true;
  1124.                             if (SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).size() != 1){
  1125.                                 errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_VALORIZZATO,
  1126.                                         SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString(),this.protocolFactory));
  1127.                             }else{
  1128.                                 try{
  1129.                                     identificatore = SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).get(0).getNodeValue();
  1130.                                 } catch(Exception e) {
  1131.                                     // ignore
  1132.                                 }
  1133.                             }
  1134.                             break;
  1135.                         }
  1136.                     }
  1137.                     if(identificatoreTrovato==false){
  1138.                         errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_PRESENTE,
  1139.                                 SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString(),this.protocolFactory));
  1140.                         eccezioneStrutturaMessaggio = true;
  1141.                     }else if(identificatore==null){
  1142.                         errore.addEccezione(Eccezione.getEccezioneValidazione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_PRESENTE,
  1143.                                 SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString(),this.protocolFactory));
  1144.                         eccezioneStrutturaMessaggio = false;
  1145.                     }else{
  1146.                         errore.setID(identificatore);
  1147.                     }
  1148.                 }
  1149.             }
  1150.            
  1151.                
  1152.            
  1153.             // report
  1154.             if(errore.sizeListaEccezioni()>0){
  1155.                
  1156.                 if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false &&
  1157.                         ((eccezioneStrutturaMittente) || (eccezioneStrutturaDestinatario) || (eccezioneStrutturaMessaggio))
  1158.                     ){
  1159.                     Eccezione ec = errore.getEccezione(0);
  1160.                     throw new StrutturaBustaException("Header egov con struttura errata, "+ec.getDescrizione(this.protocolFactory),ec.getDescrizione(this.protocolFactory).replaceAll("/", ""));
  1161.                 }  
  1162.                
  1163.                 // Leggo eventuali altri valori presenti
  1164.                 Node servizio = null;
  1165.                 Node azione = null;
  1166.                 Node profiloCollaborazione = null;
  1167.                 Node collaborazione = null;
  1168.                 Node profiloTrasmissione = null;
  1169.                 Node sequenza = null;
  1170.                 for(int i=0;i<intestMsgChild.size();i++){
  1171.                     Node child = intestMsgChild.get(i);
  1172.                     //if( (mittente==null) && ((child.getNodeName().equals(xmlns+"Mittente")))){
  1173.                     if( (mittente==null) && ((SoapUtils.matchLocalName(messageFactory, child, "Mittente", xmlns, SPCoopCostanti.NAMESPACE_EGOV)))){
  1174.                         mittente = child;
  1175.                     }
  1176.                     //else if( (destinatario==null) && ((child.getNodeName().equals(xmlns+"Destinatario")))){
  1177.                     else if( (destinatario==null) && ((SoapUtils.matchLocalName(messageFactory, child, "Destinatario", xmlns, SPCoopCostanti.NAMESPACE_EGOV)))){
  1178.                         destinatario = child;
  1179.                     }
  1180.                     //else if( (servizio==null) && ((child.getNodeName().equals(xmlns+"Servizio")))){
  1181.                     else if( (servizio==null) && ((SoapUtils.matchLocalName(messageFactory, child, "Servizio", xmlns, SPCoopCostanti.NAMESPACE_EGOV)))){
  1182.                         servizio = child;
  1183.                     }
  1184.                     //else if( (azione==null) && ((child.getNodeName().equals(xmlns+"Azione")))){
  1185.                     else if( (azione==null) && ((SoapUtils.matchLocalName(messageFactory, child, "Azione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)))){
  1186.                         azione = child;
  1187.                     }
  1188.                     //else if( (profiloCollaborazione==null) && ((child.getNodeName().equals(xmlns+"ProfiloCollaborazione")))){
  1189.                     else if( (profiloCollaborazione==null) && ((SoapUtils.matchLocalName(messageFactory, child, "ProfiloCollaborazione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)))){
  1190.                         profiloCollaborazione = child;
  1191.                     }
  1192.                     //else if( (collaborazione==null) && ((child.getNodeName().equals(xmlns+"Collaborazione")))){
  1193.                     else if( (collaborazione==null) && ((SoapUtils.matchLocalName(messageFactory, child, "Collaborazione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)))){
  1194.                         collaborazione = child;
  1195.                     }
  1196.                     //else if( (profiloTrasmissione==null) && ((child.getNodeName().equals(xmlns+"ProfiloTrasmissione")))){
  1197.                     else if( (profiloTrasmissione==null) && ((SoapUtils.matchLocalName(messageFactory, child, "ProfiloTrasmissione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)))){
  1198.                         profiloTrasmissione = child;
  1199.                     }
  1200.                     //else if( (sequenza==null) && ((child.getNodeName().equals(xmlns+"Sequenza")))){
  1201.                     else if( (sequenza==null) && ((SoapUtils.matchLocalName(messageFactory, child, "Sequenza", xmlns, SPCoopCostanti.NAMESPACE_EGOV)))){
  1202.                         sequenza = child;
  1203.                     }
  1204.                 }
  1205.                
  1206.                 // Mittente
  1207.                 if(mittente!=null){
  1208.                     try{
  1209.                         List<Node> headerMittente = SoapUtils.getNotEmptyChildNodes(messageFactory, mittente);
  1210.                         Node idParteMittente = headerMittente.get(0);
  1211.                         errore.setMittente(SoapUtils.getNotEmptyChildNodes(messageFactory, idParteMittente).get(0).getNodeValue());
  1212.                     }catch(Exception e){
  1213.                         // ignore
  1214.                     }
  1215.                     try{
  1216.                         List<Node> headerMittente = SoapUtils.getNotEmptyChildNodes(messageFactory, mittente);
  1217.                         Node idParteMittente = headerMittente.get(0);
  1218.                         Node hrefFindMitt = null;
  1219.                         if(this.readQualifiedAttribute){
  1220.                             hrefFindMitt = SoapUtils.getQualifiedAttributeNode(messageFactory, idParteMittente, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  1221.                         }else{
  1222.                             hrefFindMitt = SoapUtils.getAttributeNode(messageFactory, idParteMittente, "tipo");
  1223.                         }
  1224.                         String itValue = hrefFindMitt.getNodeValue();
  1225.                         if(itValue!=null) {
  1226.                             try {
  1227.                                 errore.setTipoMittente(this.traduttore.toRegistryOrganizationType(itValue));
  1228.                             }catch(Exception e) {
  1229.                                 errore.setTipoMittente(itValue); // senza traduzione
  1230.                             }
  1231.                         }
  1232.                     }catch(Exception e){
  1233.                         // ignore
  1234.                     }
  1235.                     try{
  1236.                         List<Node> headerMittente = SoapUtils.getNotEmptyChildNodes(messageFactory, mittente);
  1237.                         Node idParteMittente = headerMittente.get(0);
  1238.                         Node hrefFindMitt = null;
  1239.                         if(this.readQualifiedAttribute){
  1240.                             hrefFindMitt = SoapUtils.getQualifiedAttributeNode(messageFactory, idParteMittente, "indirizzoTelematico", SPCoopCostanti.NAMESPACE_EGOV);
  1241.                         }else{
  1242.                             hrefFindMitt = SoapUtils.getAttributeNode(messageFactory, idParteMittente, "indirizzoTelematico");
  1243.                         }
  1244.                         String itValue = hrefFindMitt.getNodeValue();
  1245.                         errore.setIndirizzoMittente(itValue);
  1246.                     }catch(Exception e){
  1247.                         // ignore
  1248.                     }
  1249.                 }
  1250.                
  1251.                 // Destinatario
  1252.                 if(destinatario!=null){
  1253.                     try{
  1254.                         List<Node> headerDest = SoapUtils.getNotEmptyChildNodes(messageFactory, destinatario);
  1255.                         Node idParteDest = headerDest.get(0);
  1256.                         errore.setDestinatario(SoapUtils.getNotEmptyChildNodes(messageFactory, idParteDest).get(0).getNodeValue());
  1257.                     }catch(Exception e){
  1258.                         // ignore
  1259.                     }
  1260.                     try{
  1261.                         List<Node> headerDest = SoapUtils.getNotEmptyChildNodes(messageFactory, destinatario);
  1262.                         Node idParteDest = headerDest.get(0);
  1263.                         Node hrefFindDest = null;
  1264.                         if(this.readQualifiedAttribute){
  1265.                             hrefFindDest = SoapUtils.getQualifiedAttributeNode(messageFactory, idParteDest, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  1266.                         }else{
  1267.                             hrefFindDest = SoapUtils.getAttributeNode(messageFactory, idParteDest, "tipo");
  1268.                         }
  1269.                         String itValue = hrefFindDest.getNodeValue();
  1270.                         if(itValue!=null) {
  1271.                             try {
  1272.                                 errore.setTipoDestinatario(this.traduttore.toRegistryOrganizationType(itValue));
  1273.                             }catch(Exception e) {
  1274.                                 errore.setTipoDestinatario(itValue); // senza traduzione
  1275.                             }
  1276.                         }
  1277.                     }catch(Exception e){
  1278.                         // ignore
  1279.                     }
  1280.                     try{
  1281.                         List<Node> headerDest = SoapUtils.getNotEmptyChildNodes(messageFactory, destinatario);
  1282.                         Node idParteDest = headerDest.get(0);
  1283.                         Node hrefFindDest = null;
  1284.                         if(this.readQualifiedAttribute){
  1285.                             hrefFindDest = SoapUtils.getQualifiedAttributeNode(messageFactory, idParteDest, "indirizzoTelematico", SPCoopCostanti.NAMESPACE_EGOV);
  1286.                         }else{
  1287.                             hrefFindDest = SoapUtils.getAttributeNode(messageFactory, idParteDest, "indirizzoTelematico");
  1288.                         }
  1289.                         String itValue = hrefFindDest.getNodeValue();
  1290.                         errore.setIndirizzoDestinatario(itValue);
  1291.                     }catch(Exception e){
  1292.                         // ignore
  1293.                     }
  1294.                 }
  1295.                
  1296.                 // Servizio
  1297.                 if(servizio!=null){
  1298.                     try{
  1299.                         errore.setServizio(SoapUtils.getNotEmptyChildNodes(messageFactory, servizio).get(0).getNodeValue());
  1300.                     }catch(Exception e){
  1301.                         // ignore
  1302.                     }
  1303.                     try{
  1304.                         Node hrefFind = null;
  1305.                         if(this.readQualifiedAttribute){
  1306.                             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, servizio, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  1307.                         }else{
  1308.                             hrefFind = SoapUtils.getAttributeNode(messageFactory, servizio, "tipo");
  1309.                         }
  1310.                         String value = hrefFind.getNodeValue();
  1311.                         if(value!=null) {
  1312.                             try {
  1313.                                 errore.setTipoServizio(this.traduttore.toRegistryServiceType(value));
  1314.                             }catch(Exception e) {
  1315.                                 errore.setTipoServizio(value); // senza traduzione
  1316.                             }
  1317.                         }
  1318.                     }catch(Exception e){
  1319.                         // ignore
  1320.                     }
  1321.                 }
  1322.                
  1323.                 // Azione
  1324.                 if(azione!=null){
  1325.                     try{
  1326.                         errore.setAzione(SoapUtils.getNotEmptyChildNodes(messageFactory, azione).get(0).getNodeValue());
  1327.                     }catch(Exception e){
  1328.                         // ignore
  1329.                     }
  1330.                 }
  1331.                
  1332.                 // ProfiloDiCollaborazione
  1333.                 if(profiloCollaborazione!=null){
  1334.                     try{
  1335.                         String profilovalue = SoapUtils.getNotEmptyChildNodes(messageFactory, profiloCollaborazione).get(0).getNodeValue();
  1336.                         errore.setProfiloDiCollaborazione(toProfilo(profilovalue), profilovalue);
  1337.                     }catch(Exception e){
  1338.                         // ignore
  1339.                     }
  1340.                     try{
  1341.                         Node hrefFind = null;
  1342.                         if(this.readQualifiedAttribute){
  1343.                             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, profiloCollaborazione, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  1344.                         }else{
  1345.                             hrefFind = SoapUtils.getAttributeNode(messageFactory, profiloCollaborazione, "tipo");
  1346.                         }
  1347.                         String value = hrefFind.getNodeValue();
  1348.                         if(value!=null) {
  1349.                             try {
  1350.                                 errore.setTipoServizioCorrelato(this.traduttore.toRegistryServiceType(value));
  1351.                             }catch(Exception e) {
  1352.                                 errore.setTipoServizioCorrelato(value); // senza traduzione
  1353.                             }
  1354.                         }
  1355.                     }catch(Exception e){
  1356.                         // ignore
  1357.                     }
  1358.                     try{
  1359.                         Node hrefFind = null;
  1360.                         if(this.readQualifiedAttribute){
  1361.                             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, profiloCollaborazione, "servizioCorrelato", SPCoopCostanti.NAMESPACE_EGOV);
  1362.                         }else{
  1363.                             hrefFind = SoapUtils.getAttributeNode(messageFactory, profiloCollaborazione, "servizioCorrelato");
  1364.                         }
  1365.                         errore.setServizioCorrelato(hrefFind.getNodeValue());
  1366.                     }catch(Exception e){
  1367.                         // ignore
  1368.                     }
  1369.                 }
  1370.                
  1371.                 // Collaborazione
  1372.                 if(collaborazione!=null){
  1373.                     try{
  1374.                         errore.setCollaborazione(SoapUtils.getNotEmptyChildNodes(messageFactory, collaborazione).get(0).getNodeValue());
  1375.                     }catch(Exception e){
  1376.                         // ignore
  1377.                     }
  1378.                 }
  1379.                
  1380.                 // Messaggio
  1381.                 if(messaggio!=null){
  1382.                     try{
  1383.                         List<Node> contenutoMsg = SoapUtils.getNotEmptyChildNodes(messageFactory, messaggio);
  1384.                         for(int j =0; j<contenutoMsg.size();j++){
  1385.                             Node childMsg = contenutoMsg.get(j);
  1386.                             //if((childMsg.getNodeName().equals(xmlns+"RiferimentoMessaggio"))){
  1387.                             if(SoapUtils.matchLocalName(messageFactory, childMsg, "RiferimentoMessaggio", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  1388.                                 try{
  1389.                                     errore.setRiferimentoMessaggio(SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).get(0).getNodeValue());
  1390.                                 }catch(Exception e){
  1391.                                     // ignore
  1392.                                 }
  1393.                             }
  1394.                             //else if((childMsg.getNodeName().equals(xmlns+"Scadenza"))){
  1395.                             else if(SoapUtils.matchLocalName(messageFactory, childMsg, "Scadenza", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  1396.                                 try{
  1397.                                     String scadenza = SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).get(0).getNodeValue();
  1398.                                     Date scadenzaDate = validazioneData(scadenza);
  1399.                                     errore.setScadenza(scadenzaDate);
  1400.                                 }catch(Exception e){
  1401.                                     // ignore
  1402.                                 }
  1403.                             }
  1404.                             //else if((childMsg.getNodeName().equals(xmlns+"OraRegistrazione"))){
  1405.                             else if(SoapUtils.matchLocalName(messageFactory, childMsg, "OraRegistrazione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  1406.                                 try{
  1407.                                     String oraRegistrazione = SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).get(0).getNodeValue();
  1408.                                     Date oraDate = validazioneData(oraRegistrazione);
  1409.                                     errore.setOraRegistrazione(oraDate);
  1410.                                 }catch(Exception e){
  1411.                                     // ignore
  1412.                                 }
  1413.                                 try{
  1414.                                     Node hrefFind = null;
  1415.                                     if(this.readQualifiedAttribute){
  1416.                                         hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, childMsg, "tempo", SPCoopCostanti.NAMESPACE_EGOV);
  1417.                                     }else{
  1418.                                         hrefFind = SoapUtils.getAttributeNode(messageFactory, childMsg, "tempo");
  1419.                                     }
  1420.                                     String tipoOraRegistrazioneValue = hrefFind.getNodeValue();
  1421.                                     errore.setTipoOraRegistrazione(toTipoOra(tipoOraRegistrazioneValue), tipoOraRegistrazioneValue);
  1422.                                 }catch(Exception e){
  1423.                                     // ignore
  1424.                                 }
  1425.                             }
  1426.                         }
  1427.                     }catch(Exception e){
  1428.                         // ignore
  1429.                     }
  1430.                 }
  1431.                
  1432.                 // Profilo Trasmissione
  1433.                 if(profiloTrasmissione!=null){
  1434.                     try{
  1435.                         Node hrefFind = null;
  1436.                         if(this.readQualifiedAttribute){
  1437.                             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, profiloTrasmissione, "confermaRicezione", SPCoopCostanti.NAMESPACE_EGOV);
  1438.                         }else{
  1439.                             hrefFind = SoapUtils.getAttributeNode(messageFactory, profiloTrasmissione, "confermaRicezione");
  1440.                         }
  1441.                         if(hrefFind.getNodeValue().equals("true"))
  1442.                             errore.setConfermaRicezione(true);
  1443.                         else
  1444.                             errore.setConfermaRicezione(false);
  1445.                     }catch(Exception e){
  1446.                         // ignore
  1447.                     }
  1448.                     try{
  1449.                         Node hrefFind = null;
  1450.                         if(this.readQualifiedAttribute){
  1451.                             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, profiloTrasmissione, "inoltro", SPCoopCostanti.NAMESPACE_EGOV);
  1452.                         }else{
  1453.                             hrefFind = SoapUtils.getAttributeNode(messageFactory, profiloTrasmissione, "inoltro");
  1454.                         }
  1455.                         String inoltro = hrefFind.getNodeValue();
  1456.                         errore.setInoltro(toInoltro(inoltro), inoltro);
  1457.                     }catch(Exception e){
  1458.                         // ignore
  1459.                     }
  1460.                 }
  1461.                
  1462.                 // Sequenza
  1463.                 if(sequenza!=null){
  1464.                     try{
  1465.                         Node hrefFind = null;
  1466.                         if(this.readQualifiedAttribute){
  1467.                             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, sequenza, "numeroProgressivo", SPCoopCostanti.NAMESPACE_EGOV);
  1468.                         }else{
  1469.                             hrefFind = SoapUtils.getAttributeNode(messageFactory, sequenza, "numeroProgressivo");
  1470.                         }
  1471.                         Long test = Long.valueOf(hrefFind.getNodeValue());
  1472.                         errore.setSequenza(test.longValue());
  1473.                     }catch(Exception e){
  1474.                         // ignore
  1475.                     }
  1476.                 }
  1477.                
  1478.                 this.bustaErroreHeaderIntestazione = errore;
  1479.                 throw new Exception("Header eGov senza alcuni elementi principali: presenza mittente["+(mittente!=null)+"] destinatario["+(destinatario!=null)+"] messaggio["+(messaggio!=null)+"] eccezioni-riscontrate: ["+errore.toStringListaEccezioni(this.getProtocolFactory())+"]");
  1480.             }
  1481.            
  1482.             return new SPCoopBustaRawContent(headerElementEGov);
  1483.            
  1484.         }catch(StrutturaBustaException e){
  1485.             throw e;
  1486.         }catch(Exception e){
  1487.             throw new ProtocolException("Lettura non riuscita: "+e.getMessage(),e);
  1488.         }
  1489.     }


  1490.     /**
  1491.      * Controlla che esista una busta SPCoop nell'header
  1492.      *
  1493.      * @return true se l'header esiste, false altrimenti
  1494.      */
  1495.     public boolean existsHeaderEGov(OpenSPCoop2SoapMessage msg){
  1496.         this.msg = msg;
  1497.         try{
  1498.             if(this.headerEGov!=null){
  1499.                 return true;
  1500.             }else{
  1501.                 if(msg==null){
  1502.                     return false;
  1503.                 }
  1504.                 if(this.headerSOAP==null)
  1505.                     this.headerSOAP = this.msg.getSOAPHeader();
  1506.                 if(this.headerSOAP == null){
  1507.                     return false;
  1508.                 }
  1509.                
  1510.                 // cerco la busta per l'actor
  1511.                 java.util.Iterator<?> it = this.headerSOAP.examineAllHeaderElements();
  1512.                 SOAPHeaderElement headerElementEGov = null;
  1513.                 while( it.hasNext()  ){

  1514.                     // Test Header Element
  1515.                     SOAPHeaderElement headerElement = (SOAPHeaderElement) it.next();

  1516.                     //Controllo Actor
  1517.                     if( SPCoopCostanti.ACTOR_EGOV.equals(headerElement.getActor()) == false  ){
  1518.                         continue;
  1519.                     }
  1520.                     headerElementEGov = headerElement;
  1521.                 }
  1522.                
  1523.                 if(headerElementEGov==null){
  1524.                     // cerco la busta per il namespace
  1525.                     it = this.headerSOAP.examineAllHeaderElements();
  1526.                     while( it.hasNext()  ){

  1527.                         // Test Header Element
  1528.                         SOAPHeaderElement headerElement = (SOAPHeaderElement) it.next();

  1529.                         //Controllo Namespace
  1530.                         if( SPCoopCostanti.NAMESPACE_EGOV.equals(headerElement.getNamespaceURI()) == false  ){
  1531.                             continue;
  1532.                         }
  1533.                         headerElementEGov = headerElement;
  1534.                     }
  1535.                 }
  1536.                
  1537.                 return headerElementEGov!=null;
  1538.             }
  1539.            

  1540.         }catch(Exception e){
  1541.             this.log.error("existsHeaderEGov error: "+e.getMessage(), e);
  1542.             return false;
  1543.         }
  1544.     }
  1545.    
  1546.     /**
  1547.      * Controlla che esista più di una busta SPCoop nell'header
  1548.      *
  1549.      * @return true se l'header esiste, false altrimenti
  1550.      */
  1551.     public boolean existsMoreHeaderEGov(){
  1552.         try{
  1553.             if(this.headerSOAP==null)
  1554.                 this.headerSOAP = this.msg.getSOAPHeader();
  1555.             if(this.headerSOAP == null){
  1556.                 return false;
  1557.             }
  1558.                
  1559.             boolean headerGiaTrovato = false;
  1560.            
  1561.             // cerco la busta per l'actor
  1562.             java.util.Iterator<?> it = this.headerSOAP.examineAllHeaderElements();
  1563.             while( it.hasNext()  ){
  1564.                
  1565.                 // Test Header Element
  1566.                 SOAPHeaderElement headerElement = (SOAPHeaderElement) it.next();

  1567.                 //Controllo Actor
  1568.                 if( SPCoopCostanti.ACTOR_EGOV.equals(headerElement.getActor()) == false  ){
  1569.                     continue;
  1570.                 }
  1571.                 if(headerGiaTrovato)
  1572.                     return true;
  1573.                 else
  1574.                     headerGiaTrovato = true;
  1575.             }
  1576.                
  1577.             if(headerGiaTrovato==false){
  1578.                 // cerco la busta per il namespace
  1579.                 it = this.headerSOAP.examineAllHeaderElements();
  1580.                 while( it.hasNext()  ){

  1581.                     // Test Header Element
  1582.                     SOAPHeaderElement headerElement = (SOAPHeaderElement) it.next();

  1583.                     //Controllo Namespace
  1584.                     if( SPCoopCostanti.NAMESPACE_EGOV.equals(headerElement.getNamespaceURI()) == false  ){
  1585.                         continue;
  1586.                     }
  1587.                    
  1588.                     if(headerGiaTrovato)
  1589.                         return true;
  1590.                     else
  1591.                         headerGiaTrovato = true;
  1592.                 }
  1593.                
  1594.             }
  1595.            
  1596.             return false;
  1597.            

  1598.         }catch(Exception e){
  1599.             this.log.error("existsMoreHeaderEGov error: "+e.getMessage());
  1600.             return false;
  1601.         }
  1602.     }


  1603.     /**
  1604.      * Metodo che ritorna il prefissso eGov
  1605.      *
  1606.      * @return Prefisso
  1607.      *
  1608.      */
  1609.     public String getPrefix(){

  1610.         // Prefix eGov
  1611.         String xmlns = this.headerEGov.getElement().getPrefix();
  1612.         if(xmlns == null){
  1613.             xmlns = "";
  1614.         }
  1615.         if(!xmlns.equals(""))
  1616.             xmlns = xmlns + ":";
  1617.         return xmlns;
  1618.     }



  1619.     /**
  1620.      * Metodo che si occupa di validare l'elemento 'Mittente' <var>child</var> secondo specifica eGov.
  1621.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  1622.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  1623.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto :
  1624.      *    {@link Eccezione}, e viene inserito in errors.
  1625.      *
  1626.      * @param child nodo su cui effettuare la validazione.
  1627.      * @throws ProtocolException
  1628.      *
  1629.      */
  1630.     private void validazioneMittente(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws ProtocolException{

  1631.         //log.info("Validazione Mittente...");

  1632.         List<Node> headerMittente = SoapUtils.getNotEmptyChildNodes(messageFactory, child);
  1633.         Node idParte = headerMittente.get(0);
  1634.         //log.info("esamino ["+idParte.getNodeName()+"]");
  1635.         List<Node> valueIDParte = SoapUtils.getNotEmptyChildNodes(messageFactory, idParte);
  1636.         String value =  valueIDParte.get(0).getNodeValue();
  1637.         //log.info("Value identificativo parte Mittente ["+value+"]");
  1638.         Node hrefFind = null;
  1639.         if(this.readQualifiedAttribute){
  1640.             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, idParte, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  1641.         }else{
  1642.             hrefFind = SoapUtils.getAttributeNode(messageFactory, idParte, "tipo");
  1643.         }
  1644.         String tipo = hrefFind.getNodeValue();
  1645.         //log.info("Tipo identificativo parte Mittente ["+tipo+"]");
  1646.        
  1647.         // Controllo tipo
  1648.         try {
  1649.             this.busta.setTipoMittente(this.traduttore.toRegistryOrganizationType(tipo));
  1650.         }catch(Exception e) {
  1651.             this.busta.setTipoMittente(tipo); // senza traduzione
  1652.        
  1653.             this.log.warn(e.getMessage(),e);
  1654.             Eccezione ecc = new Eccezione();
  1655.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1656.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_MITTENTE_NON_VALIDO);
  1657.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1658.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_TIPO.toString());
  1659.             this.erroriValidazione.add(ecc);
  1660.         }      
  1661.         this.busta.setMittente(value);
  1662.         String indTelematico = null;
  1663.         // indirizzo Telematico
  1664.         try{
  1665.             Node hrefFindT = null;
  1666.             if(this.readQualifiedAttribute){
  1667.                 hrefFindT = SoapUtils.getQualifiedAttributeNode(messageFactory, idParte, "indirizzoTelematico", SPCoopCostanti.NAMESPACE_EGOV);
  1668.             }else{
  1669.                 hrefFindT = SoapUtils.getAttributeNode(messageFactory, idParte, "indirizzoTelematico");
  1670.             }
  1671.             if(hrefFindT != null)
  1672.                 indTelematico = hrefFindT.getNodeValue();
  1673.             //log.info("IndirizzoTelematicoMittente ["+indTelematico+"]");
  1674.         } catch(Exception e) {
  1675.             Eccezione ecc = new Eccezione();
  1676.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1677.             ecc.setCodiceEccezione(CodiceErroreCooperazione.INDIRIZZO_MITTENTE_NON_PRESENTE );
  1678.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1679.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  1680.             this.erroriValidazione.add(ecc);
  1681.         }
  1682.         if(indTelematico != null && (indTelematico.equals("")==false)){
  1683.             URL urlCheck = null;
  1684.             try{    
  1685.                 urlCheck = new URL( indTelematico );
  1686.                 this.busta.setIndirizzoMittente(urlCheck.toString());
  1687.             } catch(Exception e) {
  1688.                 this.busta.setIndirizzoMittente(indTelematico); // comunque lo imposto!
  1689.                 Eccezione ecc = new Eccezione();
  1690.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1691.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INDIRIZZO_MITTENTE_NON_VALIDO);
  1692.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  1693.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MITTENTE_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  1694.                 this.erroriValidazione.add(ecc);
  1695.             }
  1696.         }  
  1697.        

  1698.     }

  1699.     /**
  1700.      * Metodo che si occupa di validare l'elemento 'Destinatario' <var>child</var> secondo specifica eGov.
  1701.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  1702.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  1703.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  1704.      *    {@link Eccezione}, e viene inserito in errors.
  1705.      *
  1706.      * @param child nodo su cui effettuare la validazione
  1707.      * @throws ProtocolException
  1708.      *
  1709.      */
  1710.     private void validazioneDestinatario(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws ProtocolException{

  1711.         //log.info("Validazione Destinatario...");

  1712.         List<Node> headerDestinatario = SoapUtils.getNotEmptyChildNodes(messageFactory, child);
  1713.         Node idParte = headerDestinatario.get(0);
  1714.         //log.info("esamino ["+idParte.getNodeName()+"]");
  1715.         List<Node> valueIDParte = SoapUtils.getNotEmptyChildNodes(messageFactory, idParte);
  1716.         String value =  valueIDParte.get(0).getNodeValue();
  1717.         //log.info("Value identificativo parte Destinatario ["+value+"]");
  1718.         Node hrefFind = null;
  1719.         if(this.readQualifiedAttribute){
  1720.             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, idParte, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  1721.         }else{
  1722.             hrefFind = SoapUtils.getAttributeNode(messageFactory, idParte, "tipo");
  1723.         }
  1724.         String tipo = hrefFind.getNodeValue();
  1725.         //log.info("Tipo identificativo parte Destinatario ["+tipo+"]");
  1726.        
  1727.         // Controllo tipo
  1728.         try {
  1729.             this.busta.setTipoDestinatario(this.traduttore.toRegistryOrganizationType(tipo));
  1730.         }catch(Exception e) {
  1731.             this.busta.setTipoDestinatario(tipo); // senza traduzione
  1732.            
  1733.             this.log.warn(e.getMessage(),e);
  1734.             Eccezione ecc = new Eccezione();
  1735.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1736.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_DESTINATARIO_SCONOSCIUTO );
  1737.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1738.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_TIPO.toString());
  1739.             this.erroriValidazione.add(ecc);
  1740.         }
  1741.         this.busta.setDestinatario(value);

  1742.         String indTelematico = null;
  1743.         // indirizzo Telematico
  1744.         try{
  1745.             Node hrefFindT = null;
  1746.             if(this.readQualifiedAttribute){
  1747.                 hrefFindT = SoapUtils.getQualifiedAttributeNode(messageFactory, idParte, "indirizzoTelematico", SPCoopCostanti.NAMESPACE_EGOV);
  1748.             }else{
  1749.                 hrefFindT = SoapUtils.getAttributeNode(messageFactory, idParte, "indirizzoTelematico");
  1750.             }
  1751.             if(hrefFindT != null)
  1752.                 indTelematico = hrefFindT.getNodeValue();
  1753.             //log.info("IndirizzoTelematicoMittente ["+indTelematico+"]");
  1754.         } catch(Exception e) {
  1755.             Eccezione ecc = new Eccezione();
  1756.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1757.             ecc.setCodiceEccezione(CodiceErroreCooperazione.INDIRIZZO_DESTINATARIO_NON_PRESENTE );
  1758.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1759.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  1760.             this.erroriValidazione.add(ecc);
  1761.         }
  1762.         if(indTelematico != null && (indTelematico.equals("")==false)){
  1763.             URL urlcheck = null;
  1764.             try{    
  1765.                 urlcheck = new URL( indTelematico );
  1766.                 this.busta.setIndirizzoDestinatario(urlcheck.toString());
  1767.             } catch(Exception e) {
  1768.                 this.busta.setIndirizzoDestinatario(indTelematico); // comunque lo imposto!
  1769.                 Eccezione ecc = new Eccezione();
  1770.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1771.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INDIRIZZO_DESTINATARIO_NON_VALIDO );
  1772.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  1773.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_DESTINATARIO_SCONOSCIUTO_POSIZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  1774.                 this.erroriValidazione.add(ecc);
  1775.             }
  1776.         }  
  1777.        


  1778.     }


  1779.     /**
  1780.      * Metodo che si occupa di validare l'elemento 'ProfiloCollaborazione' <var>child</var> secondo specifica eGov.
  1781.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  1782.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  1783.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  1784.      *    {@link Eccezione}, e viene inserito in errors.
  1785.      *
  1786.      * @param child nodo su cui effettuare la validazione
  1787.      * @throws ProtocolException
  1788.      *
  1789.      */
  1790.     private void validazioneProfiloCollaborazione(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws ProtocolException{

  1791.         //log.info("Validazione Profilo di Collaborazione...");
  1792.         String profilo = null;

  1793.         List<Node> valueProfiloDiCollaborazione = SoapUtils.getNotEmptyChildNodes(messageFactory, child);
  1794.         if( valueProfiloDiCollaborazione.size() == 0 || valueProfiloDiCollaborazione.size() > 1  ){
  1795.             Eccezione ecc = new Eccezione();
  1796.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1797.             ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_COLLABORAZIONE_NON_VALIDO);
  1798.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1799.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE.toString());
  1800.             this.erroriValidazione.add(ecc);
  1801.         }else {
  1802.             try{
  1803.                 profilo = valueProfiloDiCollaborazione.get(0).getNodeValue();
  1804.                 //log.info("Value Profilo di Collaborazione ["+valueProfiloDiCollaborazione.item(0).getNodeValue()+"]");
  1805.                 if( (profilo.equals(SPCoopCostanti.PROFILO_COLLABORAZIONE_ONEWAY) == false) &&
  1806.                         (profilo.equals(SPCoopCostanti.PROFILO_COLLABORAZIONE_SINCRONO) == false) &&
  1807.                         (profilo.equals(SPCoopCostanti.PROFILO_COLLABORAZIONE_ASINCRONO_SIMMETRICO) == false) &&
  1808.                         (profilo.equals(SPCoopCostanti.PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO) == false)){
  1809.                     Eccezione ecc = new Eccezione();
  1810.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1811.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_COLLABORAZIONE_SCONOSCIUTO);
  1812.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  1813.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE.toString());
  1814.                     this.erroriValidazione.add(ecc);
  1815.                 }
  1816.                 this.busta.setProfiloDiCollaborazione(toProfilo(profilo), profilo);
  1817.             } catch(Exception e) {
  1818.                 Eccezione ecc = new Eccezione();
  1819.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1820.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_COLLABORAZIONE_NON_VALIDO);
  1821.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  1822.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE.toString());
  1823.                 this.erroriValidazione.add(ecc);
  1824.             }      
  1825.         }

  1826.         // Controllo servizioCorrelato e Tipo
  1827.         String tipo = null;
  1828.         try{
  1829.             Node hrefFind = null;
  1830.             if(this.readQualifiedAttribute){
  1831.                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, child, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  1832.             }else{
  1833.                 hrefFind = SoapUtils.getAttributeNode(messageFactory, child, "tipo");
  1834.             }
  1835.             if(hrefFind != null)
  1836.                 tipo = hrefFind.getNodeValue();
  1837.             //log.info("Tipo Servizio Correlato ["+tipo+"]");
  1838.         } catch(Exception e) {
  1839.             Eccezione ecc = new Eccezione();
  1840.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1841.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_CORRELATO_NON_VALIDO );
  1842.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1843.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_TIPO_SERVIZIO_CORRELATO.toString());
  1844.             this.erroriValidazione.add(ecc);
  1845.         }
  1846.         boolean tipoServizioCorrelatoValido = true;
  1847.         if(tipo != null){
  1848.             // Controllo tipo
  1849.             try {
  1850.                 this.busta.setTipoServizioCorrelato(this.traduttore.toRegistryServiceType(tipo));
  1851.             }catch(Exception e) {
  1852.                 tipoServizioCorrelatoValido = false;
  1853.                 this.busta.setTipoServizioCorrelato(tipo); // senza traduzione
  1854.                
  1855.                 this.log.warn(e.getMessage(),e);
  1856.                 Eccezione ecc = new Eccezione();
  1857.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1858.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_CORRELATO_SCONOSCIUTO );
  1859.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  1860.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_TIPO_SERVIZIO_CORRELATO.toString());
  1861.                 this.erroriValidazione.add(ecc);
  1862.             }
  1863.            
  1864.             /* OLD CODICE          
  1865.             if(!tipo.equals(Costanti.SERVIZIO_CORRELATO_SPC) &&
  1866.                     !tipo.equals(Costanti.SERVIZIO_CORRELATO_TEST) &&
  1867.                     !tipo.equals(Costanti.SERVIZIO_CORRELATO_URL) &&
  1868.                     !tipo.equals(Costanti.SERVIZIO_CORRELATO_WSDL) &&
  1869.                     !tipo.equals(Costanti.SERVIZIO_CORRELATO_LDAP) &&
  1870.                     !tipo.equals(Costanti.SERVIZIO_CORRELATO_UDDI) &&
  1871.                     !tipo.equals(Costanti.SERVIZIO_CORRELATO_XML_REGISTRY) ){
  1872.                 Eccezione ecc = new Eccezione();
  1873.                 ecc.setContestoCodifica(Costanti.CONTESTO_CODIFICA_ECCEZIONE_VALIDAZIONE);
  1874.                 ecc.setCodiceEccezione(Costanti.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO );
  1875.                 ecc.setRilevanza(LivelloRilevanza.GRAVE);
  1876.                 ecc.setDescrizione(Costanti.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_TIPO_SERVIZIO_CORRELATO);
  1877.                 this.erroriValidazione.add(ecc);
  1878.             }  
  1879.             */
  1880.         }


  1881.         String servizioCorrelato = null;
  1882.         try{
  1883.             Node hrefFind = null;
  1884.             if(this.readQualifiedAttribute){
  1885.                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, child, "servizioCorrelato", SPCoopCostanti.NAMESPACE_EGOV);
  1886.             }else{
  1887.                 hrefFind = SoapUtils.getAttributeNode(messageFactory, child, "servizioCorrelato");
  1888.             }
  1889.             if(hrefFind != null)
  1890.                 servizioCorrelato = hrefFind.getNodeValue();
  1891.             //log.info("Servizio Correlato ["+servizioCorrelato+"]");
  1892.         } catch(Exception e) {
  1893.             Eccezione ecc = new Eccezione();
  1894.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1895.             ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_CORRELATO_NON_VALIDO );
  1896.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1897.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_SERVIZIO_CORRELATO.toString());
  1898.             this.erroriValidazione.add(ecc);
  1899.         }
  1900.         this.busta.setServizioCorrelato(servizioCorrelato);


  1901.         // MessaggioSingoloOneWay e Sincrono
  1902.         if (   servizioCorrelato != null  &&
  1903.                 (  SPCoopCostanti.PROFILO_COLLABORAZIONE_ONEWAY.equals(profilo) == true ||
  1904.                         SPCoopCostanti.PROFILO_COLLABORAZIONE_SINCRONO.equals(profilo) == true    )) {
  1905.             Eccezione ecc = new Eccezione();
  1906.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1907.             ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_CORRELATO_NON_VALIDO);
  1908.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1909.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_SERVIZIO_CORRELATO.toString());
  1910.             this.erroriValidazione.add(ecc);
  1911.         }
  1912.         if ( tipoServizioCorrelatoValido && (tipo!=null) &&  
  1913.                 (  SPCoopCostanti.PROFILO_COLLABORAZIONE_ONEWAY.equals(profilo) == true ||
  1914.                         SPCoopCostanti.PROFILO_COLLABORAZIONE_SINCRONO.equals(profilo) == true    )) {
  1915.             Eccezione ecc = new Eccezione();
  1916.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1917.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_CORRELATO_NON_VALIDO);
  1918.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1919.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_COLLABORAZIONE_SCONOSCIUTO_POSIZIONE_TIPO_SERVIZIO_CORRELATO.toString());
  1920.             this.erroriValidazione.add(ecc);
  1921.         }

  1922.     }

  1923.     /**
  1924.      * Metodo che si occupa di validare l'elemento 'Collaborazione' <var>child</var> secondo specifica eGov.
  1925.      * <p>
  1926.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  1927.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  1928.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  1929.      *    {@link Eccezione}, e viene inserito in errors.
  1930.      *
  1931.      * @param child nodo su cui effettuare la validazione
  1932.      * @throws ProtocolException
  1933.      *
  1934.      */
  1935.     private void validazioneCollaborazione(OpenSPCoop2MessageFactory messageFactory, Node child) throws ProtocolException{

  1936.         //log.info("Validazione Collaborazione...");
  1937.         if ( SoapUtils.getNotEmptyChildNodes(messageFactory, child).size() != 1 ){
  1938.             Eccezione ecc = new Eccezione();
  1939.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1940.             ecc.setCodiceEccezione(CodiceErroreCooperazione.COLLABORAZIONE_NON_VALIDA);
  1941.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1942.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_COLLABORAZIONE_SCONOSCIUTA_POSIZIONE.toString());
  1943.             this.erroriValidazione.add(ecc);
  1944.             return;
  1945.         }
  1946.         String coll = null;
  1947.         try{
  1948.             coll = SoapUtils.getNotEmptyChildNodes(messageFactory, child).get(0).getNodeValue();
  1949.         } catch(Exception e) {
  1950.             Eccezione ecc = new Eccezione();
  1951.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1952.             ecc.setCodiceEccezione(CodiceErroreCooperazione.COLLABORAZIONE_NON_VALORIZZATA);
  1953.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1954.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_COLLABORAZIONE_SCONOSCIUTA_POSIZIONE.toString());
  1955.             this.erroriValidazione.add(ecc);
  1956.         }
  1957.         //log.info("Collaborazione["+coll+"]");
  1958.         this.busta.setCollaborazione(coll);
  1959.     }

  1960.     /**
  1961.      * Metodo che si occupa di validare l'elemento 'Servizio' <var>child</var> secondo specifica eGov.
  1962.      * <p>
  1963.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  1964.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  1965.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  1966.      *    {@link Eccezione}, e viene inserito in errors.
  1967.      *
  1968.      * @param child nodo su cui effettuare la validazione
  1969.      * @throws ProtocolException
  1970.      *
  1971.      */
  1972.     private void validazioneServizio(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws StrutturaBustaException, ProtocolException{

  1973.         //log.info("Validazione servizio...");
  1974.         if (SoapUtils.getNotEmptyChildNodes(messageFactory, child).size() != 1){
  1975.             Eccezione ecc = new Eccezione();
  1976.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1977.             ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_NON_VALIDO);
  1978.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1979.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE.toString());
  1980.             this.erroriValidazione.add(ecc);
  1981.             return;
  1982.         }

  1983.         String serv = null;
  1984.         try{
  1985.             serv = SoapUtils.getNotEmptyChildNodes(messageFactory, child).get(0).getNodeValue();
  1986.         } catch(Exception e) {
  1987.             Eccezione ecc = new Eccezione();
  1988.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  1989.             ecc.setCodiceEccezione(CodiceErroreCooperazione.SERVIZIO_NON_VALORIZZATO);
  1990.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  1991.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE.toString());
  1992.             this.erroriValidazione.add(ecc);
  1993.         }

  1994.         //log.info("Servizio["+serv+"]");
  1995.         this.busta.setServizio(serv);

  1996.         // Tipo
  1997.         String tipo = null;
  1998.         try{
  1999.             Node hrefFind = null;
  2000.             if(this.readQualifiedAttribute){
  2001.                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, child, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  2002.             }else{
  2003.                 hrefFind = SoapUtils.getAttributeNode(messageFactory, child, "tipo");
  2004.             }
  2005.             if(hrefFind != null)
  2006.                 tipo = hrefFind.getNodeValue();
  2007.             //log.info("Servizio_tipo ["+tipo+"]");
  2008.            
  2009.             if (tipo == null){
  2010.                 if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2011.                     throw new StrutturaBustaException("Header egov con elemento Servizio senza tipo","Servizio");
  2012.                 } else {
  2013.                     Eccezione ecc = new Eccezione();
  2014.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2015.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_NON_PRESENTE );
  2016.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  2017.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE_TIPO.toString());
  2018.                     this.erroriValidazione.add(ecc);
  2019.                 }
  2020.             }else{
  2021.            
  2022.                 // Controllo tipo
  2023.                 try {
  2024.                     this.busta.setTipoServizio(this.traduttore.toRegistryServiceType(tipo));
  2025.                 }catch(Exception e) {
  2026.                     this.busta.setTipoServizio(tipo); // senza traduzione
  2027.                    
  2028.                     this.log.warn(e.getMessage(),e);
  2029.                     Eccezione ecc = new Eccezione();
  2030.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2031.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_SCONOSCIUTO );
  2032.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  2033.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE_TIPO.toString());
  2034.                     this.erroriValidazione.add(ecc);
  2035.                 }
  2036.                
  2037.             }
  2038.            
  2039.         }catch(StrutturaBustaException e){
  2040.             throw e;
  2041.         } catch(Exception e) {
  2042.             Eccezione ecc = new Eccezione();
  2043.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2044.             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_SERVIZIO_NON_VALIDO );
  2045.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2046.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SERVIZIO_SCONOSCIUTO_POSIZIONE_TIPO.toString());
  2047.             this.erroriValidazione.add(ecc);
  2048.         }

  2049.     }

  2050.     /**
  2051.      * Metodo che si occupa di validare l'elemento 'Azione' <var>child</var> secondo specifica eGov.
  2052.      * <p>
  2053.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  2054.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  2055.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  2056.      *    {@link Eccezione}, e viene inserito in errors.
  2057.      *
  2058.      * @param child nodo su cui effettuare la validazione
  2059.      * @throws ProtocolException
  2060.      *
  2061.      */
  2062.     private void validazioneAzione(OpenSPCoop2MessageFactory messageFactory, Node child) throws ProtocolException{

  2063.         //log.info("Validazione azione...");

  2064.         if (SoapUtils.getNotEmptyChildNodes(messageFactory, child).size() != 1){
  2065.             Eccezione ecc = new Eccezione();
  2066.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2067.             ecc.setCodiceEccezione(CodiceErroreCooperazione.AZIONE_NON_VALIDA);
  2068.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2069.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_AZIONE_SCONOSCIUTA_POSIZIONE.toString());
  2070.             this.erroriValidazione.add(ecc);
  2071.             return;
  2072.         }

  2073.         String azione = null;
  2074.         try{
  2075.             azione = SoapUtils.getNotEmptyChildNodes(messageFactory, child).get(0).getNodeValue();
  2076.         } catch(Exception e) {
  2077.             Eccezione ecc = new Eccezione();
  2078.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2079.             ecc.setCodiceEccezione(CodiceErroreCooperazione.AZIONE_NON_VALORIZZATA);
  2080.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2081.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_AZIONE_SCONOSCIUTA_POSIZIONE.toString());
  2082.             this.erroriValidazione.add(ecc);
  2083.         }

  2084.         //log.info("Azione["+azione+"]");
  2085.         this.busta.setAzione(azione);
  2086.     }

  2087.     /**
  2088.      * Metodo che si occupa di validare l'elemento 'Messaggio' <var>child</var> secondo specifica eGov.
  2089.      * <p>
  2090.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  2091.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  2092.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  2093.      *    {@link Eccezione}, e viene inserito in errors.
  2094.      *
  2095.      * @param child nodo su cui effettuare la validazione
  2096.      * @throws ProtocolException
  2097.      *
  2098.      */
  2099.     private void validazioneMessaggio(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws StrutturaBustaException, ProtocolException{

  2100.         // Prefix eGov
  2101.         String xmlns = getPrefix();

  2102.         //log.info("Validazione Messaggio...");

  2103.         List<Node> contenutoMsg = SoapUtils.getNotEmptyChildNodes(messageFactory, child);
  2104.         if( (contenutoMsg.size() == 0) || (contenutoMsg.size() > 4)){
  2105.             Eccezione ecc = new Eccezione();
  2106.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2107.             ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  2108.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2109.             ecc.setDescrizione("IntestazioneMessaggio/Messaggio childsize:"+contenutoMsg.size());
  2110.             this.erroriValidazione.add(ecc);
  2111.         }

  2112.         boolean presenzaID = false;
  2113.         boolean presenzaOra = false;
  2114.         boolean presenzaScadenza = false;
  2115.         boolean presenzaRifMessaggio = false;
  2116.        
  2117.         for(int j =0; j<contenutoMsg.size();j++){
  2118.             Node childMsg = contenutoMsg.get(j);

  2119.             //if((childMsg.getNodeName().equals(xmlns+"Identificatore"))){
  2120.             if(SoapUtils.matchLocalName(messageFactory, childMsg, "Identificatore", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  2121.                
  2122.                
  2123.                 if(presenzaID){
  2124.                     if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2125.                         throw new StrutturaBustaException("Header egov con più di un elemento Identificatore","MessaggioIdentificatore");
  2126.                     }else{
  2127.                         Eccezione ecc = new Eccezione();
  2128.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2129.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_PRESENTE_PIU_VOLTE);
  2130.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2131.                         if(this.segnalazioneElementoPresentePiuVolte)
  2132.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  2133.                         else
  2134.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2135.                         this.erroriValidazione.add(ecc);
  2136.                         continue;
  2137.                     }
  2138.                 }else{
  2139.                
  2140.                     //log.info("Validazione identificatore...");
  2141.                     presenzaID = true;
  2142.    
  2143.                     if (SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).size() != 1){
  2144.                         Eccezione ecc = new Eccezione();
  2145.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2146.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_VALORIZZATO);
  2147.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2148.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2149.                         this.erroriValidazione.add(ecc);
  2150.                         continue;
  2151.                     }
  2152.                     String id = null;
  2153.                     try{
  2154.                         id = SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).get(0).getNodeValue();
  2155.                     } catch(Exception e) {
  2156.                         Eccezione ecc = new Eccezione();
  2157.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2158.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_VALORIZZATO);
  2159.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2160.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2161.                         this.erroriValidazione.add(ecc);
  2162.                     }
  2163.    
  2164.                     if(id==null){
  2165.                         Eccezione ecc = new Eccezione();
  2166.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2167.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_VALORIZZATO);
  2168.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2169.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2170.                         this.erroriValidazione.add(ecc);
  2171.                     }
  2172.    
  2173.                     //log.info("identificatore["+id+"]");
  2174.                     this.busta.setID(id);
  2175.                 }

  2176.             //}else if((childMsg.getNodeName().equals(xmlns+"OraRegistrazione"))){
  2177.             }else if(SoapUtils.matchLocalName(messageFactory, childMsg, "OraRegistrazione", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  2178.                
  2179.                 if(presenzaOra){
  2180.                     if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2181.                         throw new StrutturaBustaException("Header egov con più di un elemento OraRegistrazione","MessaggioOraRegistrazione");
  2182.                     }else{
  2183.                         Eccezione ecc = new Eccezione();
  2184.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2185.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.ORA_REGISTRAZIONE_PRESENTE_PIU_VOLTE);
  2186.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2187.                         if(this.segnalazioneElementoPresentePiuVolte)
  2188.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  2189.                         else
  2190.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE.toString());
  2191.                         this.erroriValidazione.add(ecc);
  2192.                         continue;
  2193.                     }
  2194.                 }else{
  2195.                
  2196.                     //log.info("Validazione Ora Registrazione...");
  2197.                     presenzaOra = true;
  2198.    
  2199.                     if (SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).size() != 1){
  2200.                         Eccezione ecc = new Eccezione();
  2201.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2202.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.ORA_REGISTRAZIONE_NON_PRESENTE);
  2203.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2204.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE.toString());
  2205.                         this.erroriValidazione.add(ecc);
  2206.                         continue;
  2207.                     }
  2208.                     String ora = null;
  2209.                     try{
  2210.                         ora = SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).get(0).getNodeValue();
  2211.                     } catch(Exception e) {
  2212.                         Eccezione ecc = new Eccezione();
  2213.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2214.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.ORA_REGISTRAZIONE_NON_VALORIZZATA);
  2215.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2216.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE.toString());
  2217.                         this.erroriValidazione.add(ecc);
  2218.                         continue;
  2219.                     }
  2220.                     Date oraDate = null;  
  2221.                     if(ora != null){
  2222.                         oraDate = validazioneData(ora);
  2223.                     }
  2224.                     if( (ora==null) || (oraDate == null)){
  2225.                         Eccezione ecc = new Eccezione();
  2226.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2227.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.ORA_REGISTRAZIONE_NON_VALORIZZATA);
  2228.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2229.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE.toString());
  2230.                         this.erroriValidazione.add(ecc);
  2231.                     }
  2232.    
  2233.                     //log.info("OraRegistrazione["+oraDate+"]");
  2234.                     this.busta.setOraRegistrazione(oraDate);
  2235.    
  2236.                     // tempo ...
  2237.                     String tipoOra = null;
  2238.                     try{
  2239.                         Node hrefFind = null;
  2240.                         if(this.readQualifiedAttribute){
  2241.                             hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, childMsg, "tempo", SPCoopCostanti.NAMESPACE_EGOV);
  2242.                         }else{
  2243.                             hrefFind = SoapUtils.getAttributeNode(messageFactory, childMsg, "tempo");
  2244.                         }
  2245.                         tipoOra = hrefFind.getNodeValue();
  2246.                     } catch(Exception e) {
  2247.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2248.                             throw new StrutturaBustaException("Header egov senza elemento OraRegistrazione tempo","OraRegistrazioneTempo");
  2249.                         } else {
  2250.                             Eccezione ecc = new Eccezione();
  2251.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2252.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_ORA_REGISTRAZIONE_NON_VALIDA);
  2253.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2254.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE_TEMPO.toString());
  2255.                             this.erroriValidazione.add(ecc);
  2256.                         }
  2257.                     }
  2258.                     if(tipoOra!=null){
  2259.                         if(!tipoOra.equals(SPCoopCostanti.TIPO_TEMPO_LOCALE) && !tipoOra.equals(SPCoopCostanti.TIPO_TEMPO_SPC)){
  2260.                             Eccezione ecc = new Eccezione();
  2261.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2262.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TIPO_ORA_REGISTRAZIONE_SCONOSCIUTA);
  2263.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2264.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE_TEMPO.toString());
  2265.                             this.erroriValidazione.add(ecc);
  2266.                         }
  2267.                     }
  2268.                     this.busta.setTipoOraRegistrazione(toTipoOra(tipoOra), tipoOra);
  2269.                 }

  2270.             //}else if((childMsg.getNodeName().equals(xmlns+"RiferimentoMessaggio"))){
  2271.             }else if(SoapUtils.matchLocalName(messageFactory, childMsg, "RiferimentoMessaggio", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  2272.                 //log.info("Validazione RiferimentoMessaggio...");

  2273.                 if(presenzaRifMessaggio){
  2274.                     if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2275.                         throw new StrutturaBustaException("Header egov con più di un elemento RiferimentoMessaggio","MessaggioRiferimentoMessaggio");
  2276.                     }else{
  2277.                         Eccezione ecc = new Eccezione();
  2278.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2279.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.RIFERIMENTO_MESSAGGIO_PRESENTE_PIU_VOLTE);
  2280.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2281.                         if(this.segnalazioneElementoPresentePiuVolte)
  2282.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_RIFERIMENTO_MESSAGGIO_NON_DEFINITO_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  2283.                         else
  2284.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_RIFERIMENTO_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2285.                         this.erroriValidazione.add(ecc);
  2286.                         continue;
  2287.                     }
  2288.                 }else{
  2289.                
  2290.                     presenzaRifMessaggio = true;
  2291.                    
  2292.                     if (SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).size() != 1){
  2293.                         Eccezione ecc = new Eccezione();
  2294.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2295.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.RIFERIMENTO_MESSAGGIO_NON_VALORIZZATO);
  2296.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2297.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_RIFERIMENTO_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2298.                         this.erroriValidazione.add(ecc);
  2299.                         continue;
  2300.                     }
  2301.                     String rifID = null;
  2302.                     try{
  2303.                         rifID = SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).get(0).getNodeValue();
  2304.                     } catch(Exception e) {
  2305.                         Eccezione ecc = new Eccezione();
  2306.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2307.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.RIFERIMENTO_MESSAGGIO_NON_VALORIZZATO);
  2308.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2309.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_RIFERIMENTO_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2310.                         this.erroriValidazione.add(ecc);
  2311.                     }
  2312.    
  2313.                     if(rifID==null){
  2314.                         Eccezione ecc = new Eccezione();
  2315.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2316.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.RIFERIMENTO_MESSAGGIO_NON_VALORIZZATO);
  2317.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2318.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_RIFERIMENTO_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2319.                         this.erroriValidazione.add(ecc);
  2320.                     }
  2321.    
  2322.                     //log.info("RiferimentoMessaggio["+rifID+"]");
  2323.                     this.busta.setRiferimentoMessaggio(rifID);
  2324.                 }

  2325.             //}else if((childMsg.getNodeName().equals(xmlns+"Scadenza"))){
  2326.             }else if(SoapUtils.matchLocalName(messageFactory, childMsg, "Scadenza", xmlns, SPCoopCostanti.NAMESPACE_EGOV)){
  2327.                 //log.info("Validazione Scadenza...");

  2328.                 if(presenzaScadenza){
  2329.                     if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2330.                         throw new StrutturaBustaException("Header egov con più di un elemento Scadenza","MessaggioScadenza");
  2331.                     }else{
  2332.                         Eccezione ecc = new Eccezione();
  2333.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2334.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.SCADENZA_PRESENTE_PIU_VOLTE);
  2335.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2336.                         if(this.segnalazioneElementoPresentePiuVolte)
  2337.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SCADENZA_NON_VALIDA_POSIZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  2338.                         else
  2339.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SCADENZA_NON_VALIDA_POSIZIONE.toString());
  2340.                         this.erroriValidazione.add(ecc);
  2341.                         continue;
  2342.                     }
  2343.                 }else{
  2344.                    
  2345.                     presenzaScadenza = true;
  2346.                    
  2347.                     if (SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).size() != 1){
  2348.                         Eccezione ecc = new Eccezione();
  2349.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2350.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.SCADENZA_NON_PRESENTE);
  2351.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2352.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SCADENZA_NON_VALIDA_POSIZIONE.toString());
  2353.                         this.erroriValidazione.add(ecc);
  2354.                         continue;
  2355.                     }
  2356.                     String scadenza = null;
  2357.                     try{
  2358.                         scadenza = SoapUtils.getNotEmptyChildNodes(messageFactory, childMsg).get(0).getNodeValue();
  2359.                     } catch(Exception e) {
  2360.                         Eccezione ecc = new Eccezione();
  2361.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2362.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.SCADENZA_NON_VALIDA);
  2363.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2364.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SCADENZA_NON_VALIDA_POSIZIONE.toString());
  2365.                         this.erroriValidazione.add(ecc);
  2366.                         continue;
  2367.                     }
  2368.                     Date scadenzaDate = null;
  2369.                     if(scadenza != null){
  2370.                         scadenzaDate = validazioneData(scadenza);
  2371.                     }
  2372.                     if( (scadenza==null) || (scadenzaDate == null)){
  2373.                         Eccezione ecc = new Eccezione();
  2374.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2375.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.SCADENZA_NON_VALORIZZATA);
  2376.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2377.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SCADENZA_NON_VALIDA_POSIZIONE.toString());
  2378.                         this.erroriValidazione.add(ecc);
  2379.                         continue;
  2380.                     }
  2381.                     if( dataScaduta(scadenza) == true){
  2382.                         this.messaggioScaduto = true;
  2383.                         Eccezione ecc = new Eccezione();
  2384.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2385.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.MESSAGGIO_SCADUTO);
  2386.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2387.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SCADENZA_NON_VALIDA_POSIZIONE.toString());
  2388.                         this.erroriValidazione.add(ecc);
  2389.                     }
  2390.    
  2391.                     //log.info("Scadenza["+scadenzaDate+"]");
  2392.                     this.busta.setScadenza(scadenzaDate);
  2393.                 }

  2394.             }else{
  2395.                 Eccezione ecc = new Eccezione();
  2396.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2397.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_INTESTAZIONE_NON_CORRETTO);
  2398.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2399.                 ecc.setDescrizione("IntestazioneMessaggio/Messaggio/child["+childMsg.getNodeName()+"]");
  2400.                 this.erroriValidazione.add(ecc);
  2401.             }
  2402.         }

  2403.         if(presenzaID == false){
  2404.             Eccezione ecc = new Eccezione();
  2405.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2406.             ecc.setCodiceEccezione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_PRESENTE);
  2407.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2408.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_DEFINITO_POSIZIONE.toString());
  2409.             this.erroriValidazione.add(ecc);
  2410.         }
  2411.         if(presenzaOra == false){
  2412.             Eccezione ecc = new Eccezione();
  2413.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2414.             ecc.setCodiceEccezione(CodiceErroreCooperazione.ORA_REGISTRAZIONE_NON_PRESENTE);
  2415.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2416.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE.toString());
  2417.             this.erroriValidazione.add(ecc);
  2418.         }
  2419.     }



  2420.     /**
  2421.      * Metodo che si occupa di validare l'elemento 'ProfiloTrasmissione' <var>child</var> secondo specifica eGov.
  2422.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  2423.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  2424.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  2425.      *    {@link Eccezione}, e viene inserito in errors.
  2426.      *
  2427.      * @param child nodo su cui effettuare la validazione
  2428.      * @throws ProtocolException
  2429.      *
  2430.      */
  2431.     private void validazioneProfiloTrasmissione(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws ProtocolException{

  2432.         //log.info("Validazione profilo Trasmissione...");

  2433.         if (SoapUtils.getNotEmptyChildNodes(messageFactory, child).size() != 0){
  2434.             Eccezione ecc = new Eccezione();
  2435.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2436.             ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_TRASMISSIONE_NON_VALIDO);
  2437.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2438.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_TRASMISSIONE_NON_VALIDO_POSIZIONE+" child size:"+SoapUtils.getNotEmptyChildNodes(messageFactory,child).size());
  2439.             this.erroriValidazione.add(ecc);
  2440.         }
  2441.         String inoltro = null;
  2442.         String confermaRicezione = null;
  2443.         try{
  2444.             Node hrefFind = null;
  2445.             if(this.readQualifiedAttribute){
  2446.                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, child, "inoltro", SPCoopCostanti.NAMESPACE_EGOV);
  2447.             }else{
  2448.                 hrefFind = SoapUtils.getAttributeNode(messageFactory, child, "inoltro");
  2449.             }
  2450.             inoltro = hrefFind.getNodeValue();
  2451.             //log.info("Inoltro ["+inoltro+"]");
  2452.         } catch(Exception e) {
  2453.             // ignore
  2454.         }
  2455.         try{
  2456.             Node hrefFind = null;
  2457.             if(this.readQualifiedAttribute){
  2458.                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, child, "confermaRicezione", SPCoopCostanti.NAMESPACE_EGOV);
  2459.             }else{
  2460.                 hrefFind = SoapUtils.getAttributeNode(messageFactory, child, "confermaRicezione");
  2461.             }
  2462.             confermaRicezione = hrefFind.getNodeValue();
  2463.             //log.info("confermaRicezione ["+confermaRicezione+"]");
  2464.         } catch(Exception e) {
  2465.             // ignore
  2466.         }

  2467.         // Inoltro...
  2468.         if(inoltro == null ){
  2469.             // Default: EGOV_IT_PIUDIUNAVOLTA
  2470.             inoltro = SPCoopCostanti.PROFILO_TRASMISSIONE_CON_DUPLICATI;
  2471.         } else {
  2472.             if( (inoltro.equals(SPCoopCostanti.PROFILO_TRASMISSIONE_SENZA_DUPLICATI) == false ) &&
  2473.                     (inoltro.equals(SPCoopCostanti.PROFILO_TRASMISSIONE_CON_DUPLICATI) == false )  ){
  2474.                 Eccezione ecc = new Eccezione();
  2475.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2476.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_TRASMISSIONE_FILTRO_DUPLICATI_SCONOSCIUTO);
  2477.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2478.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_TRASMISSIONE_NON_VALIDO_POSIZIONE_INOLTRO.toString());
  2479.                 this.erroriValidazione.add(ecc);
  2480.             }
  2481.         }

  2482.         // ConfermaRicezione...
  2483.         if(confermaRicezione == null ){
  2484.             // Default: false
  2485.             confermaRicezione = "false";
  2486.         }else{
  2487.             if( (confermaRicezione.equals("true") == false ) &&
  2488.                     (confermaRicezione.equals("false") == false )  ){
  2489.                 Eccezione ecc = new Eccezione();
  2490.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2491.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.PROFILO_TRASMISSIONE_CONFERMA_RICEZIONE_SCONOSCIUTO);
  2492.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2493.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_PROFILO_TRASMISSIONE_NON_VALIDO_POSIZIONE_CONFERMA_RICEZIONE.toString());
  2494.                 this.erroriValidazione.add(ecc);
  2495.             }
  2496.         }

  2497.         // set
  2498.         this.busta.setInoltro(toInoltro(inoltro), inoltro);
  2499.         if(confermaRicezione.equals("true"))
  2500.             this.busta.setConfermaRicezione(true);
  2501.         else
  2502.             this.busta.setConfermaRicezione(false);

  2503.     }

  2504.     /**
  2505.      * Metodo che si occupa di validare l'elemento 'Sequenza' <var>child</var> secondo specifica eGov.
  2506.      * <p>
  2507.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  2508.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  2509.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  2510.      *    {@link Eccezione}, e viene inserito in errors.
  2511.      *
  2512.      * @param child nodo su cui effettuare la validazione
  2513.      * @throws ProtocolException
  2514.      *
  2515.      */
  2516.     private void validazioneSequenza(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws StrutturaBustaException, ProtocolException{

  2517.         //log.info("Validazione sequenza...");

  2518.         if (SoapUtils.getNotEmptyChildNodes(messageFactory, child).size() != 0){
  2519.             Eccezione ecc = new Eccezione();
  2520.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2521.             ecc.setCodiceEccezione(CodiceErroreCooperazione.CONSEGNA_IN_ORDINE_NON_VALIDA);
  2522.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2523.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SEQUENZA_NON_VALIDA_POSIZIONE.toString());
  2524.             this.erroriValidazione.add(ecc);
  2525.         }
  2526.         String seq = null;
  2527.         try{
  2528.             Node hrefFind = null;
  2529.             if(this.readQualifiedAttribute){
  2530.                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, child, "numeroProgressivo", SPCoopCostanti.NAMESPACE_EGOV);
  2531.             }else{
  2532.                 hrefFind = SoapUtils.getAttributeNode(messageFactory, child, "numeroProgressivo");
  2533.             }
  2534.             seq = hrefFind.getNodeValue();
  2535.             //log.info("Sequenza ["+seq+"]");
  2536.         } catch(Exception e) {
  2537.             // ignore
  2538.         }

  2539.         if(seq == null ){
  2540.             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2541.                 throw new StrutturaBustaException("Header egov senza elemento Sequenza numeroProgressivo","SequenzaNumeroProgressivo");
  2542.             } else {
  2543.                 Eccezione ecc = new Eccezione();
  2544.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2545.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.CONSEGNA_IN_ORDINE_NON_VALORIZZATA);
  2546.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2547.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SEQUENZA_NON_VALIDA_POSIZIONE_NUMERO_PROGRESSIVO.toString());
  2548.                 this.erroriValidazione.add(ecc);
  2549.                 return;
  2550.             }
  2551.         }

  2552.         try{
  2553.             Long test = Long.valueOf(seq);
  2554.             this.busta.setSequenza(test.longValue());
  2555.         } catch(Exception e) {
  2556.             Eccezione ecc = new Eccezione();
  2557.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2558.             ecc.setCodiceEccezione(CodiceErroreCooperazione.CONSEGNA_IN_ORDINE_NON_VALIDA);
  2559.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2560.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_SEQUENZA_NON_VALIDA_POSIZIONE_NUMERO_PROGRESSIVO.toString());
  2561.             this.erroriValidazione.add(ecc);
  2562.         }


  2563.     }

  2564.     /**
  2565.      * Metodo che si occupa di validare la lista Riscontri <var>child</var> secondo specifica eGov.
  2566.      * <p>
  2567.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  2568.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  2569.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  2570.      *    {@link Eccezione}, e viene inserito in errors.
  2571.      *
  2572.      * @param child nodo su cui effettuare la validazione
  2573.      * @throws ProtocolException
  2574.      *
  2575.      */
  2576.     private void validazioneListaRiscontri(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws StrutturaBustaException, ProtocolException{

  2577.         //log.info("Validazione Lista Riscontri...");
  2578.         List<Node> riscontri = SoapUtils.getNotEmptyChildNodes(messageFactory, child);

  2579.         if(riscontri.size() <= 0 ){        
  2580.             Eccezione ecc = new Eccezione();
  2581.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2582.             ecc.setCodiceEccezione(CodiceErroreCooperazione.LISTA_RISCONTRI_NON_VALORIZZATA);
  2583.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2584.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO.toString());
  2585.             this.erroriValidazione.add(ecc);
  2586.             return;
  2587.         }
  2588.        
  2589.         for(int i=0; i<riscontri.size();i++){

  2590.             boolean errorFind = false;

  2591.             Node riscontro = riscontri.get(i);
  2592.             //log.info("esamino["+child.getNodeName()+"]");
  2593.             //if(!(riscontro.getNodeName().equals(xmlns+"Riscontro"))){
  2594.             if(!(SoapUtils.matchLocalName(messageFactory, riscontro, "Riscontro", prefix, SPCoopCostanti.NAMESPACE_EGOV))){
  2595.                 Eccezione ecc = new Eccezione();
  2596.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2597.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_NON_VALIDO);
  2598.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2599.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE+"/childNode["+riscontro.getNodeName()+"]");
  2600.                 this.erroriValidazione.add(ecc);
  2601.                 continue;
  2602.             }

  2603.             List<Node> childsRiscontro = SoapUtils.getNotEmptyChildNodes(messageFactory, riscontro);
  2604.             /*if(childsRiscontro.getLength() != 2){        
  2605.                 Eccezione ecc = new Eccezione();
  2606.                 ecc.setContestoCodifica(Costanti.CONTESTO_CODIFICA_ECCEZIONE_VALIDAZIONE);
  2607.                 ecc.setCodiceEccezione(Costanti.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA);
  2608.                 ecc.setRilevanza(LivelloRilevanza.GRAVE);
  2609.                 ecc.setDescrizione(Costanti.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO+" child size:"+childsRiscontro.getLength());
  2610.                 this.erroriValidazione.add(ecc);
  2611.                 continue;
  2612.             }*/

  2613.             boolean presenzaIdentificatore = false;
  2614.             boolean presenzaOraRegistrazione = false;
  2615.            
  2616.             String id = null;
  2617.             boolean findID = false;
  2618.             String ora = null;
  2619.             Date oraDate = null;
  2620.             boolean findOra = false;
  2621.             String tipoOra = null;
  2622.             boolean findTipoOra = false;
  2623.             for(int j=0; j<childsRiscontro.size();j++){
  2624.                 Node elem = childsRiscontro.get(j);
  2625.                 //if(elem.getNodeName().equals(xmlns+"Identificatore")){
  2626.                 if(SoapUtils.matchLocalName(messageFactory, elem, "Identificatore", prefix, SPCoopCostanti.NAMESPACE_EGOV)){
  2627.                    
  2628.                     if(presenzaIdentificatore){
  2629.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2630.                             throw new StrutturaBustaException("Header egov con più di un elemento RiscontroIdentificatore","RiscontroIdentificatore");
  2631.                         }else{
  2632.                             Eccezione ecc = new Eccezione();
  2633.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2634.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_IDENTIFICATIVO_MESSAGGIO_PRESENTE_PIU_VOLTE);
  2635.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2636.                             if(this.segnalazioneElementoPresentePiuVolte)
  2637.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_IDENTIFICATORE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  2638.                             else
  2639.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_IDENTIFICATORE.toString());
  2640.                             this.erroriValidazione.add(ecc);
  2641.                             continue;
  2642.                         }
  2643.                     }else{
  2644.                    
  2645.                         presenzaIdentificatore = true;
  2646.                    
  2647.                         try{
  2648.                             id = SoapUtils.getNotEmptyChildNodes(messageFactory, elem).get(0).getNodeValue();
  2649.                             findID = true;
  2650.                         } catch(Exception e) {
  2651.                             Eccezione ecc = new Eccezione();
  2652.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2653.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_IDENTIFICATIVO_MESSAGGIO_NON_VALIDO);
  2654.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2655.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_IDENTIFICATORE.toString());
  2656.                             this.erroriValidazione.add(ecc);
  2657.                             errorFind = true;
  2658.                         }
  2659.                     }
  2660.                 //}else if(elem.getNodeName().equals(xmlns+"OraRegistrazione")){
  2661.                 }else if(SoapUtils.matchLocalName(messageFactory, elem, "OraRegistrazione", prefix, SPCoopCostanti.NAMESPACE_EGOV)){
  2662.                     if(presenzaOraRegistrazione){
  2663.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2664.                             throw new StrutturaBustaException("Header egov con più di un elemento RiscontroOraRegistrazione","RiscontroOraRegistrazione");
  2665.                         }else{
  2666.                             Eccezione ecc = new Eccezione();
  2667.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2668.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_ORA_REGISTRAZIONE_PRESENTE_PIU_VOLTE);
  2669.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2670.                             if(this.segnalazioneElementoPresentePiuVolte)
  2671.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  2672.                             else
  2673.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE.toString());
  2674.                             this.erroriValidazione.add(ecc);
  2675.                             continue;
  2676.                         }
  2677.                     }else{
  2678.                         presenzaOraRegistrazione = true;
  2679.                    
  2680.                         try{
  2681.                             ora = SoapUtils.getNotEmptyChildNodes(messageFactory, elem).get(0).getNodeValue();
  2682.                             findOra = true;
  2683.                         } catch(Exception e) {
  2684.                             Eccezione ecc = new Eccezione();
  2685.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2686.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_ORA_REGISTRAZIONE_NON_VALIDA);
  2687.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2688.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE.toString());
  2689.                             this.erroriValidazione.add(ecc);
  2690.                             errorFind = true;
  2691.                         }
  2692.                         oraDate = null;
  2693.                         if(ora!=null){
  2694.                             oraDate = validazioneData(ora);
  2695.                         }
  2696.                         if( (ora == null) || (oraDate==null)){
  2697.                             Eccezione ecc = new Eccezione();
  2698.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2699.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_ORA_REGISTRAZIONE_NON_VALIDA);
  2700.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2701.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE.toString());
  2702.                             this.erroriValidazione.add(ecc);
  2703.                             errorFind = true;
  2704.                         }
  2705.    
  2706.                         // tempo ...
  2707.                         try{
  2708.                             Node hrefFind = null;
  2709.                             if(this.readQualifiedAttribute){
  2710.                                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, elem, "tempo", SPCoopCostanti.NAMESPACE_EGOV);
  2711.                             }else{
  2712.                                 hrefFind = SoapUtils.getAttributeNode(messageFactory, elem, "tempo");
  2713.                             }
  2714.                             tipoOra = hrefFind.getNodeValue();
  2715.                             findTipoOra = true;
  2716.                         } catch(Exception e) {
  2717.                             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2718.                                 throw new StrutturaBustaException("Header egov senza RiscontroOraRegistrazioneTempo","RiscontroOraRegistrazioneTempo");
  2719.                             }else{
  2720.                                 Eccezione ecc = new Eccezione();
  2721.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2722.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_TIPO_ORA_REGISTRAZIONE_NON_VALIDO);
  2723.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2724.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE_TEMPO.toString());
  2725.                                 this.erroriValidazione.add(ecc);
  2726.                                 errorFind = true;
  2727.                             }
  2728.                         }
  2729.                         if(tipoOra!=null){
  2730.                             if(!tipoOra.equals(SPCoopCostanti.TIPO_TEMPO_LOCALE) && !tipoOra.equals(SPCoopCostanti.TIPO_TEMPO_SPC)){
  2731.                                 Eccezione ecc = new Eccezione();
  2732.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2733.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_TIPO_ORA_REGISTRAZIONE_SCONOSCIUTO);
  2734.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2735.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE_TEMPO.toString());
  2736.                                 this.erroriValidazione.add(ecc);
  2737.                                 errorFind = true;
  2738.                             }
  2739.                         }
  2740.                     }
  2741.                 }else {
  2742.                     Eccezione ecc = new Eccezione();
  2743.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2744.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.LISTA_RISCONTRI_NON_VALIDA);
  2745.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  2746.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO+"/child["+elem.getNodeName()+"]");
  2747.                     this.erroriValidazione.add(ecc);
  2748.                     errorFind = true;
  2749.                 }
  2750.             }

  2751.             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2752.                 if(presenzaIdentificatore == false){
  2753.                     throw new StrutturaBustaException("Header egov senza RiscontroIdentificatore","RiscontroIdentificatore");
  2754.                 }
  2755.                 if(presenzaOraRegistrazione == false){
  2756.                     throw new StrutturaBustaException("Header egov senza RiscontroOraRegistrazione","RiscontroOraRegistrazione");
  2757.                 }
  2758.             }
  2759.            
  2760.             if(errorFind==false){
  2761.                 if(findID != true){
  2762.                     Eccezione ecc = new Eccezione();
  2763.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2764.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_IDENTIFICATIVO_MESSAGGIO_NON_PRESENTE);
  2765.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  2766.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_IDENTIFICATORE.toString());
  2767.                     this.erroriValidazione.add(ecc);
  2768.                 }
  2769.                 if(findOra != true){
  2770.                     Eccezione ecc = new Eccezione();
  2771.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2772.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_ORA_REGISTRAZIONE_NON_PRESENTE);
  2773.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  2774.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE.toString());
  2775.                     this.erroriValidazione.add(ecc);
  2776.                 }else{
  2777.                     if(findTipoOra != true){
  2778.                         Eccezione ecc = new Eccezione();
  2779.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2780.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_TIPO_ORA_REGISTRAZIONE_NON_PRESENTE);
  2781.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  2782.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE_TEMPO.toString());
  2783.                         this.erroriValidazione.add(ecc);
  2784.                     }
  2785.                 }
  2786.             }
  2787.            

  2788.             //if(id!=null && ora!=null && tipoOra !=null) {
  2789.             if(id!=null || ora!=null || tipoOra !=null) {
  2790.                 Riscontro r = new Riscontro();
  2791.                 r.setID(id);        
  2792.                 //log.info("ORA REC["+oraDate+"]");
  2793.                 r.setOraRegistrazione(oraDate);
  2794.                 r.setTipoOraRegistrazioneValue(tipoOra);
  2795.                 r.setTipoOraRegistrazione(this.traduttore.toTipoOraRegistrazione(tipoOra));
  2796.                 this.busta.addRiscontro(r);
  2797.             }
  2798.         }

  2799.     }


  2800.     /**
  2801.      * Metodo che si occupa di validare la lista Trasmissioni <var>child</var> secondo specifica eGov.
  2802.      * <p>
  2803.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  2804.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  2805.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  2806.      *    {@link Eccezione}, e viene inserito in errors.
  2807.      *
  2808.      * @param child nodo su cui effettuare la validazione
  2809.      * @throws ProtocolException
  2810.      *
  2811.      */
  2812.     private void validazioneListaTrasmissioni(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws StrutturaBustaException, ProtocolException{
  2813.        
  2814.         //  log.info("Validazione Lista Trasmissioni...");
  2815.         List<Node> trasmissioni = SoapUtils.getNotEmptyChildNodes(messageFactory, child);

  2816.         if(trasmissioni.size()<=0){
  2817.             Eccezione ecc = new Eccezione();
  2818.             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2819.             ecc.setCodiceEccezione(CodiceErroreCooperazione.LISTA_TRASMISSIONI_NON_VALORIZZATA);
  2820.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2821.             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE.toString());
  2822.             this.erroriValidazione.add(ecc);
  2823.             return;
  2824.         }
  2825.        
  2826.         for(int i=0; i<trasmissioni.size();i++){

  2827.             boolean errorFind = false;

  2828.             Node trasmissione = trasmissioni.get(i);
  2829.             //log.info("esamino["+child.getNodeName()+"]");
  2830.             //if(!(trasmissione.getNodeName().equals(xmlns+"Trasmissione"))){
  2831.             if(!(SoapUtils.matchLocalName(messageFactory, trasmissione, "Trasmissione", prefix, SPCoopCostanti.NAMESPACE_EGOV))){
  2832.                 Eccezione ecc = new Eccezione();
  2833.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2834.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_NON_PRESENTE);
  2835.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2836.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE+"/child["+trasmissione.getNodeName()+"]");
  2837.                 this.erroriValidazione.add(ecc);
  2838.                 continue;
  2839.             }
  2840.             List<Node> childsTrasmissione = SoapUtils.getNotEmptyChildNodes(messageFactory, trasmissione);
  2841.             /*if(childsTrasmissione.getLength() != 3){        
  2842.                 Eccezione ecc = new Eccezione();
  2843.                 ecc.setContestoCodifica(Costanti.CONTESTO_CODIFICA_ECCEZIONE_VALIDAZIONE);
  2844.                 ecc.setCodiceEccezione(Costanti.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA);
  2845.                 ecc.setRilevanza(LivelloRilevanza.GRAVE);
  2846.                 ecc.setDescrizione(Costanti.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE+" child size:"+childsTrasmissione.getLength());
  2847.                 this.erroriValidazione.add(ecc);
  2848.                 continue;
  2849.             }*/

  2850.             boolean presenzaOrigine = false;
  2851.             boolean presenzaDestinazione = false;
  2852.             boolean presenzaOraRegistrazione = false;
  2853.            
  2854.             String origine = null;
  2855.             String tipoOrigine = null;
  2856.             String indTelematicoOrigine = null;
  2857.             boolean findOrigine = false;
  2858.             boolean findTipoOrigine = false;
  2859.             String destinazione = null;
  2860.             String tipoDestinazione = null;
  2861.             String indTelematicoDestinazione = null;
  2862.             boolean findDestinazione = false;
  2863.             boolean findTipoDestinazione = false;
  2864.             String ora = null;
  2865.             Date oraDate = null;
  2866.             boolean findOra = false;
  2867.             String tipoOra = null;
  2868.             boolean findTipoOra = false;
  2869.             for(int j=0; j<childsTrasmissione.size();j++){
  2870.                 Node elem = childsTrasmissione.get(j);

  2871.                 //if(elem.getNodeName().equals(xmlns+"Origine")){
  2872.                 if(SoapUtils.matchLocalName(messageFactory, elem, "Origine", prefix, SPCoopCostanti.NAMESPACE_EGOV)){
  2873.                    
  2874.                     if(presenzaOrigine){
  2875.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2876.                             throw new StrutturaBustaException("Header egov con più di un elemento TrasmissioneOrigine","TrasmissioneOrigine");
  2877.                         }else{
  2878.                             Eccezione ecc = new Eccezione();
  2879.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2880.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORIGINE_PRESENTE_PIU_VOLTE);
  2881.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2882.                             if(this.segnalazioneElementoPresentePiuVolte)
  2883.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  2884.                             else
  2885.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE.toString());
  2886.                             this.erroriValidazione.add(ecc);
  2887.                             continue;
  2888.                         }
  2889.                     }else{
  2890.                    
  2891.                         presenzaOrigine = true;
  2892.                        
  2893.                         if(SoapUtils.getNotEmptyChildNodes(messageFactory, elem).size() != 1){
  2894.                             Eccezione ecc = new Eccezione();
  2895.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2896.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORIGINE_NON_PRESENTE);
  2897.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2898.                             if(SoapUtils.getNotEmptyChildNodes(messageFactory, elem).size() < 1){
  2899.                                 if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2900.                                     throw new StrutturaBustaException("Header egov senza TrasmissioneOrigine IdentificativoParte","TrasmissioneOrigineIdentificativoParte");
  2901.                                 }else{
  2902.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE.toString());
  2903.                                 }
  2904.                             }else{
  2905.                                 if(this.segnalazioneElementoPresentePiuVolte)
  2906.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  2907.                                 else
  2908.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE.toString());
  2909.                             }
  2910.                             this.erroriValidazione.add(ecc);
  2911.                             errorFind = true;
  2912.                             continue;
  2913.                         }
  2914.                         Node idParte = SoapUtils.getNotEmptyChildNodes(messageFactory, elem).get(0);
  2915.                         try{
  2916.                             List<Node> valueIDParte = SoapUtils.getNotEmptyChildNodes(messageFactory, idParte);
  2917.                             origine =  valueIDParte.get(0).getNodeValue();
  2918.                             findOrigine = true;
  2919.                         } catch(Exception e) {
  2920.                             Eccezione ecc = new Eccezione();
  2921.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2922.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORIGINE_NON_VALIDA);
  2923.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2924.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE.toString());
  2925.                             this.erroriValidazione.add(ecc);
  2926.                             errorFind = true;
  2927.                         }
  2928.                         try{
  2929.                             Node hrefFind = null;
  2930.                             if(this.readQualifiedAttribute){
  2931.                                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, idParte, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  2932.                             }else{
  2933.                                 hrefFind = SoapUtils.getAttributeNode(messageFactory, idParte, "tipo");
  2934.                             }
  2935.                             tipoOrigine = hrefFind.getNodeValue();
  2936.                            
  2937.                             // Controllo tipo
  2938.                             if(tipoOrigine==null){
  2939.                                 if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  2940.                                     if(findTipoOrigine==false){
  2941.                                         throw new StrutturaBustaException("Header egov senza TrasmissioneOrigine IdentificativoParteTipo","TrasmissioneOrigineIdentificativoParteTipo");
  2942.                                     }
  2943.                                 }else{
  2944.                                     throw new Exception("Tipo non definito");
  2945.                                 }
  2946.                             }
  2947.                             try {
  2948.                                 tipoOrigine = this.traduttore.toRegistryOrganizationType(tipoOrigine);
  2949.                             }catch(Exception e) {
  2950.                                 this.log.warn(e.getMessage(),e);
  2951.                                 throw new Exception("Tipo non valido");
  2952.                             }
  2953.                            
  2954.                             findTipoOrigine = true;
  2955.                         } catch (StrutturaBustaException se){
  2956.                             throw se;
  2957.                         } catch(Exception e) {
  2958.                             Eccezione ecc = new Eccezione();
  2959.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2960.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_ORIGINE_NON_VALIDA);
  2961.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2962.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE_TIPO.toString());
  2963.                             this.erroriValidazione.add(ecc);
  2964.                             errorFind = true;
  2965.                         }
  2966.    
  2967.                         // indirizzo Telematico
  2968.                         try{
  2969.                             Node hrefFindT = null;
  2970.                             if(this.readQualifiedAttribute){
  2971.                                 hrefFindT = SoapUtils.getQualifiedAttributeNode(messageFactory, idParte, "indirizzoTelematico", SPCoopCostanti.NAMESPACE_EGOV);
  2972.                             }else{
  2973.                                 hrefFindT = SoapUtils.getAttributeNode(messageFactory, idParte, "indirizzoTelematico");
  2974.                             }
  2975.                             if(hrefFindT != null)
  2976.                                 indTelematicoOrigine = hrefFindT.getNodeValue();
  2977.                             //log.info("IndirizzoTelematicoOrigine ["+indTelematico+"]");
  2978.                         } catch(Exception e) {
  2979.                             Eccezione ecc = new Eccezione();
  2980.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2981.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_INDIRIZZO_ORIGINE_NON_VALIDA);
  2982.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  2983.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  2984.                             this.erroriValidazione.add(ecc);
  2985.                             errorFind = true;
  2986.                         }
  2987.                         if(errorFind==false && indTelematicoOrigine != null && (indTelematicoOrigine.equals("")==false)){
  2988.                             URL urlcheck = null;
  2989.                             try{    
  2990.                                 urlcheck = new URL( indTelematicoOrigine );
  2991.                                 indTelematicoOrigine = urlcheck.toString();
  2992.                             } catch(Exception e) {
  2993.                                 Eccezione ecc = new Eccezione();
  2994.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  2995.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_INDIRIZZO_ORIGINE_NON_VALIDA);
  2996.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  2997.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  2998.                                 this.erroriValidazione.add(ecc);
  2999.                                 errorFind = true;
  3000.                             }
  3001.                         }
  3002.                     }

  3003.                 //}else if(elem.getNodeName().equals(xmlns+"Destinazione")){
  3004.                 }else if(SoapUtils.matchLocalName(messageFactory, elem, "Destinazione", prefix, SPCoopCostanti.NAMESPACE_EGOV)){

  3005.                     if(presenzaDestinazione){
  3006.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  3007.                             throw new StrutturaBustaException("Header egov con più di un elemento TrasmissioneDestinazione","TrasmissioneDestinazione");
  3008.                         }else{
  3009.                             Eccezione ecc = new Eccezione();
  3010.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3011.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_DESTINAZIONE_PRESENTE_PIU_VOLTE);
  3012.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3013.                             if(this.segnalazioneElementoPresentePiuVolte)
  3014.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  3015.                             else
  3016.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE.toString());
  3017.                             this.erroriValidazione.add(ecc);
  3018.                             continue;
  3019.                         }
  3020.                     }else{
  3021.                    
  3022.                         presenzaDestinazione = true;
  3023.                    
  3024.                         if(SoapUtils.getNotEmptyChildNodes(messageFactory, elem).size() != 1){
  3025.                             Eccezione ecc = new Eccezione();
  3026.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3027.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_DESTINAZIONE_NON_VALIDA);
  3028.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3029.                             if(SoapUtils.getNotEmptyChildNodes(messageFactory, elem).size() < 1){
  3030.                                 if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  3031.                                     throw new StrutturaBustaException("Header egov senza TrasmissioneDestinazione IdentificativoParte","TrasmissioneDestinazioneIdentificativoParte");
  3032.                                 }else{
  3033.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE.toString());
  3034.                                 }
  3035.                             }else{
  3036.                                 if(this.segnalazioneElementoPresentePiuVolte)
  3037.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  3038.                                 else
  3039.                                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE.toString());
  3040.                             }
  3041.                             this.erroriValidazione.add(ecc);
  3042.                             errorFind = true;
  3043.                             continue;
  3044.                         }
  3045.                         Node idParte = SoapUtils.getNotEmptyChildNodes(messageFactory, elem).get(0);
  3046.                         try{
  3047.                             List<Node> valueIDParte = SoapUtils.getNotEmptyChildNodes(messageFactory, idParte);
  3048.                             destinazione =  valueIDParte.get(0).getNodeValue();
  3049.                             findDestinazione = true;
  3050.                         } catch(Exception e) {
  3051.                             Eccezione ecc = new Eccezione();
  3052.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3053.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_DESTINAZIONE_NON_VALIDA);
  3054.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3055.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE.toString());
  3056.                             this.erroriValidazione.add(ecc);
  3057.                             errorFind = true;
  3058.                         }
  3059.                         try{
  3060.                             Node hrefFind = null;
  3061.                             if(this.readQualifiedAttribute){
  3062.                                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, idParte, "tipo", SPCoopCostanti.NAMESPACE_EGOV);
  3063.                             }else{
  3064.                                 hrefFind = SoapUtils.getAttributeNode(messageFactory, idParte, "tipo");
  3065.                             }
  3066.                             tipoDestinazione = hrefFind.getNodeValue();
  3067.                            
  3068.                             // Controllo tipo
  3069.                             if(tipoDestinazione==null){
  3070.                                 if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  3071.                                     if(findTipoOrigine==false){
  3072.                                         throw new StrutturaBustaException("Header egov senza TrasmissioneDestinazione IdentificativoParteTipo","TrasmissioneDestinazioneIdentificativoParteTipo");
  3073.                                     }
  3074.                                 }else{
  3075.                                     throw new Exception("Tipo non definito");
  3076.                                 }
  3077.                             }
  3078.                             try {
  3079.                                 tipoDestinazione = this.traduttore.toRegistryOrganizationType(tipoDestinazione);
  3080.                             }catch(Exception e) {
  3081.                                 this.log.warn(e.getMessage(),e);
  3082.                                 throw new Exception("Tipo non valido");
  3083.                             }
  3084.                            
  3085.                             findTipoDestinazione = true;
  3086.                         } catch (StrutturaBustaException se){
  3087.                             throw se;
  3088.                         } catch(Exception e) {
  3089.                             Eccezione ecc = new Eccezione();
  3090.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3091.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_DESTINAZIONE_NON_VALIDA);
  3092.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3093.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE_TIPO.toString());
  3094.                             this.erroriValidazione.add(ecc);
  3095.                             errorFind = true;
  3096.                         }
  3097.    
  3098.                         // indirizzo Telematico
  3099.                         try{
  3100.                             Node hrefFindT = null;
  3101.                             if(this.readQualifiedAttribute){
  3102.                                 hrefFindT = SoapUtils.getQualifiedAttributeNode(messageFactory, idParte, "indirizzoTelematico", SPCoopCostanti.NAMESPACE_EGOV);
  3103.                             }else{
  3104.                                 hrefFindT = SoapUtils.getAttributeNode(messageFactory, idParte, "indirizzoTelematico");
  3105.                             }
  3106.                             if(hrefFindT != null)
  3107.                                 indTelematicoDestinazione = hrefFindT.getNodeValue();
  3108.                             //log.info("IndirizzoTelematicoDestinazione ["+indTelematico+"]");
  3109.                         } catch(Exception e) {
  3110.                             Eccezione ecc = new Eccezione();
  3111.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3112.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_INDIRIZZO_DESTINAZIONE_NON_VALIDA);
  3113.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3114.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  3115.                             this.erroriValidazione.add(ecc);
  3116.                             errorFind = true;
  3117.                         }
  3118.                         if(errorFind==false && indTelematicoDestinazione != null && (indTelematicoDestinazione.equals("")==false)){
  3119.                             URL urlcheck = null;
  3120.                             try{    
  3121.                                 urlcheck = new URL( indTelematicoDestinazione );
  3122.                                 indTelematicoDestinazione = urlcheck.toString();
  3123.                             } catch(Exception e) {
  3124.                                 Eccezione ecc = new Eccezione();
  3125.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3126.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_INDIRIZZO_DESTINAZIONE_NON_VALIDA);
  3127.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3128.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE_IND_TELEMATICO.toString());
  3129.                                 this.erroriValidazione.add(ecc);
  3130.                                 errorFind = true;
  3131.                             }
  3132.                         }
  3133.                     }

  3134.                 //}else if(elem.getNodeName().equals(xmlns+"OraRegistrazione")){
  3135.                 }else if(SoapUtils.matchLocalName(messageFactory, elem, "OraRegistrazione", prefix, SPCoopCostanti.NAMESPACE_EGOV)){

  3136.                     if(presenzaOraRegistrazione){
  3137.                         if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  3138.                             throw new StrutturaBustaException("Header egov con più di un elemento TrasmissioneOraRegistrazione","TrasmissioneOraRegistrazione");
  3139.                         }else{
  3140.                             Eccezione ecc = new Eccezione();
  3141.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3142.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORA_REGISTRAZIONE_PRESENTE_PIU_VOLTE);
  3143.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3144.                             if(this.segnalazioneElementoPresentePiuVolte)
  3145.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE+" "+CostantiProtocollo.ECCEZIONE_ELEMENTO_PRESENTE_PIU_VOLTE);
  3146.                             else
  3147.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE.toString());
  3148.                             this.erroriValidazione.add(ecc);
  3149.                             continue;
  3150.                         }
  3151.                     }else{
  3152.                    
  3153.                         presenzaOraRegistrazione = true;
  3154.                    
  3155.                         // ora ...
  3156.                         try{
  3157.                             ora = SoapUtils.getNotEmptyChildNodes(messageFactory, elem).get(0).getNodeValue();
  3158.                             findOra = true;
  3159.                         } catch(Exception e) {
  3160.                             Eccezione ecc = new Eccezione();
  3161.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3162.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORA_REGISTRAZIONE_NON_VALIDA);
  3163.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3164.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE.toString());
  3165.                             this.erroriValidazione.add(ecc);
  3166.                             errorFind = true;
  3167.                         }
  3168.                         oraDate = null;
  3169.                         if(ora != null)
  3170.                             oraDate = validazioneData(ora);
  3171.                         if( (ora == null) || (oraDate == null)){
  3172.                             Eccezione ecc = new Eccezione();
  3173.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3174.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORA_REGISTRAZIONE_NON_VALIDA);
  3175.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3176.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE.toString());
  3177.                             this.erroriValidazione.add(ecc);
  3178.                             errorFind = true;
  3179.                         }
  3180.    
  3181.                         // tempo ...
  3182.                         try{
  3183.                             Node hrefFind = null;
  3184.                             if(this.readQualifiedAttribute){
  3185.                                 hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, elem, "tempo", SPCoopCostanti.NAMESPACE_EGOV);
  3186.                             }else{
  3187.                                 hrefFind = SoapUtils.getAttributeNode(messageFactory, elem, "tempo");
  3188.                             }
  3189.                             tipoOra = hrefFind.getNodeValue();
  3190.                             findTipoOra = true;
  3191.                         } catch(Exception e) {
  3192.                             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  3193.                                 if(findTipoOrigine==false){
  3194.                                     throw new StrutturaBustaException("Header egov senza Trasmissione OraRegistrazioneTempo","TrasmissioneOraRegistrazioneTempo");
  3195.                                 }
  3196.                             }else{
  3197.                                 Eccezione ecc = new Eccezione();
  3198.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3199.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_ORA_REGISTRAZIONE_NON_VALIDA);
  3200.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3201.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE_TEMPO.toString());
  3202.                                 this.erroriValidazione.add(ecc);
  3203.                                 errorFind = true;
  3204.                             }
  3205.                         }
  3206.                         if(tipoOra!=null){
  3207.                             if(!tipoOra.equals(SPCoopCostanti.TIPO_TEMPO_LOCALE) && !tipoOra.equals(SPCoopCostanti.TIPO_TEMPO_SPC)){
  3208.                                 Eccezione ecc = new Eccezione();
  3209.                                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3210.                                 ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_ORA_REGISTRAZIONE_SCONOSCIUTA);
  3211.                                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3212.                                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE_TEMPO.toString());
  3213.                                 this.erroriValidazione.add(ecc);
  3214.                                 errorFind = true;
  3215.                             }
  3216.                         }
  3217.                     }
  3218.                 }else {
  3219.                     Eccezione ecc = new Eccezione();
  3220.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3221.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.LISTA_TRASMISSIONI_NON_VALIDA);
  3222.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3223.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE+"/child["+elem.getNodeName()+"]");
  3224.                     this.erroriValidazione.add(ecc);
  3225.                     errorFind = true;
  3226.                 }

  3227.             }
  3228.            
  3229.            
  3230.             // Check elementi principali
  3231.             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  3232.                 if(presenzaOrigine==false){
  3233.                     throw new StrutturaBustaException("Header egov senza TrasmissioneOrigine","TrasmissioneOrigine");
  3234.                 }
  3235.                 if(presenzaDestinazione==false){
  3236.                     throw new StrutturaBustaException("Header egov senza TrasmissioneDestinazione","TrasmissioneDestinazione");
  3237.                 }
  3238.                 if(presenzaOraRegistrazione==false){
  3239.                     throw new StrutturaBustaException("Header egov senza TrasmissioneOraRegistrazione","TrasmissioneOraRegistrazione");
  3240.                 }
  3241.             }
  3242.            
  3243.             if(errorFind == false){
  3244.                 if(presenzaOrigine==false){
  3245.                     errorFind = true;
  3246.                     Eccezione ecc = new Eccezione();
  3247.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3248.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORIGINE_NON_PRESENTE);
  3249.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3250.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE.toString());
  3251.                     this.erroriValidazione.add(ecc);
  3252.                 }
  3253.                 if(presenzaDestinazione==false){
  3254.                     errorFind = true;
  3255.                     Eccezione ecc = new Eccezione();
  3256.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3257.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_DESTINAZIONE_NON_PRESENTE);
  3258.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3259.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE.toString());
  3260.                     this.erroriValidazione.add(ecc);
  3261.                 }
  3262.                 if(presenzaOraRegistrazione==false){
  3263.                     errorFind = true;
  3264.                     Eccezione ecc = new Eccezione();
  3265.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3266.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORA_REGISTRAZIONE_NON_PRESENTE);
  3267.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3268.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE.toString());
  3269.                     this.erroriValidazione.add(ecc);
  3270.                 }
  3271.             }
  3272.            
  3273.             if(errorFind == false){
  3274.                 if(findOrigine != true){
  3275.                     Eccezione ecc = new Eccezione();
  3276.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3277.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORIGINE_NON_PRESENTE);
  3278.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3279.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE.toString());
  3280.                     this.erroriValidazione.add(ecc);
  3281.                 }else{
  3282.                     if(findTipoOrigine != true){
  3283.                         Eccezione ecc = new Eccezione();
  3284.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3285.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_ORIGINE_NON_PRESENTE);
  3286.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  3287.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORIGINE_IDENTIFICATIVO_PARTE_TIPO.toString());
  3288.                         this.erroriValidazione.add(ecc);
  3289.                     }
  3290.                 }
  3291.                 if(findDestinazione != true){
  3292.                     Eccezione ecc = new Eccezione();
  3293.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3294.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_DESTINAZIONE_NON_PRESENTE);
  3295.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3296.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE.toString());
  3297.                     this.erroriValidazione.add(ecc);
  3298.                 }else{
  3299.                     if(findTipoDestinazione != true){
  3300.                         Eccezione ecc = new Eccezione();
  3301.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3302.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_DESTINAZIONE_NON_PRESENTE);
  3303.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  3304.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_DESTINAZIONE_IDENTIFICATIVO_PARTE_TIPO.toString());
  3305.                         this.erroriValidazione.add(ecc);
  3306.                     }
  3307.                 }
  3308.                 if(findOra != true){
  3309.                     Eccezione ecc = new Eccezione();
  3310.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3311.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORA_REGISTRAZIONE_NON_PRESENTE);
  3312.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3313.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE.toString());
  3314.                     this.erroriValidazione.add(ecc);
  3315.                 }else{
  3316.                     if(findTipoOra != true){
  3317.                         Eccezione ecc = new Eccezione();
  3318.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3319.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_TIPO_ORA_REGISTRAZIONE_NON_PRESENTE);
  3320.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  3321.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE_TEMPO.toString());
  3322.                         this.erroriValidazione.add(ecc);
  3323.                     }
  3324.                 }
  3325.             }
  3326.            
  3327.             //if(origine!=null && tipoOrigine!=null && tipoDestinazione!=null && destinazione!=null &&
  3328.             //      ora!=null && tipoOra != null) {
  3329.             if(origine!=null || tipoOrigine!=null || tipoDestinazione!=null || destinazione!=null ||
  3330.                     ora!=null || tipoOra != null) {
  3331.                 //log.info("add Trasmissione....");
  3332.                 Trasmissione tr = new Trasmissione();
  3333.                 tr.setOrigine(origine);
  3334.                 tr.setTipoOrigine(tipoOrigine);
  3335.                 tr.setIndirizzoOrigine(indTelematicoOrigine);
  3336.                 tr.setDestinazione(destinazione);
  3337.                 tr.setTipoDestinazione(tipoDestinazione);
  3338.                 tr.setIndirizzoDestinazione(indTelematicoDestinazione);
  3339.                 //log.info("ORA REC["+oraDate+"]");
  3340.                 tr.setOraRegistrazione(oraDate);
  3341.                 tr.setTempoValue(tipoOra);
  3342.                 tr.setTempo(this.traduttore.toTipoOraRegistrazione(tipoOra));
  3343.                 this.busta.addTrasmissione(tr);
  3344.             }
  3345.         }

  3346.     }

  3347.     /**
  3348.      * Metodo che si occupa di validare la lista Eccezioni <var>child</var> secondo specifica eGov.
  3349.      * <p>
  3350.      * Il metodo, oltre ad effettuare la validazione, si occupa anche di leggerne il contenuto e
  3351.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  3352.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  3353.      *    {@link Eccezione}, e viene inserito in un errorsEccezione.
  3354.      *
  3355.      * @param child nodo su cui effettuare la validazione
  3356.      * @throws ProtocolException
  3357.      *
  3358.      */
  3359.     private void validazioneListaEccezioni(OpenSPCoop2MessageFactory messageFactory, Node child,String prefix) throws StrutturaBustaException, ProtocolException{

  3360.         //log.info("Validazione Lista Eccezioni...");
  3361.         List<Node> eccezioni = SoapUtils.getNotEmptyChildNodes(messageFactory, child);

  3362.         for(int i=0; i<eccezioni.size();i++){

  3363.             boolean errorFind = false;

  3364.             Node eccezione = eccezioni.get(i);
  3365.             //log.info("esamino["+child.getNodeName()+"]");
  3366.             //if(!(eccezione.getNodeName().equals(xmlns+"Eccezione"))){
  3367.             if(!(SoapUtils.matchLocalName(messageFactory, eccezione, "Eccezione", prefix, SPCoopCostanti.NAMESPACE_EGOV))){
  3368.                 Eccezione ecc = new Eccezione();
  3369.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3370.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3371.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3372.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE+"/child["+eccezione.getNodeName()+"]");
  3373.                 this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3374.                 errorFind = true;
  3375.             }

  3376.             String contestoCodifica = null;
  3377.             String codiceEccezione = null;
  3378.             String rilevanza = null;
  3379.             String posizione = null;
  3380.            

  3381.             // ContestoCodifica
  3382.             boolean contestoCodificaError = false;
  3383.             try{
  3384.                 Node hrefFind = null;
  3385.                 if(this.readQualifiedAttribute){
  3386.                     hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, eccezione, "contestoCodifica", SPCoopCostanti.NAMESPACE_EGOV);
  3387.                 }else{
  3388.                     hrefFind = SoapUtils.getAttributeNode(messageFactory, eccezione, "contestoCodifica");
  3389.                 }
  3390.                 contestoCodifica = hrefFind.getNodeValue();
  3391.             } catch(Exception e) {
  3392.                 contestoCodificaError = true;
  3393.             }
  3394.             if(contestoCodifica == null)
  3395.                 contestoCodificaError = true;
  3396.             if(contestoCodificaError){
  3397.                 Eccezione ecc = new Eccezione();
  3398.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3399.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3400.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3401.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_CONTESTO_CODIFICA.toString());
  3402.                 this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3403.                 errorFind = true;
  3404.             }

  3405.             // codiceEccezione
  3406.             boolean codiceEccezioneError = false;
  3407.             try{
  3408.                 Node hrefFind = null;
  3409.                 if(this.readQualifiedAttribute){
  3410.                     hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, eccezione, "codiceEccezione", SPCoopCostanti.NAMESPACE_EGOV);
  3411.                 }else{
  3412.                     hrefFind = SoapUtils.getAttributeNode(messageFactory, eccezione, "codiceEccezione");
  3413.                 }
  3414.                 codiceEccezione = hrefFind.getNodeValue();
  3415.             } catch(Exception e) {
  3416.                 codiceEccezioneError = true;
  3417.             }
  3418.             if(validazioneCodiceEccezione(codiceEccezione) == false)
  3419.                 codiceEccezioneError = true;
  3420.             if(codiceEccezioneError){
  3421.                 Eccezione ecc = new Eccezione();
  3422.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3423.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3424.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3425.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_CODICE_ECCEZIONE.toString());
  3426.                 this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3427.                 errorFind = true;
  3428.             }

  3429.             // Rilevanza
  3430.             boolean rilevanzaError = false;
  3431.             try{
  3432.                 Node hrefFind = null;
  3433.                 if(this.readQualifiedAttribute){
  3434.                     hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, eccezione, "rilevanza", SPCoopCostanti.NAMESPACE_EGOV);
  3435.                 }else{
  3436.                     hrefFind = SoapUtils.getAttributeNode(messageFactory, eccezione, "rilevanza");
  3437.                 }
  3438.                 rilevanza = hrefFind.getNodeValue();
  3439.             } catch(Exception e) {
  3440.                 rilevanzaError = true;
  3441.             }
  3442.             LivelloRilevanza livRilevanza = validazioneRilevanza(rilevanza);
  3443.             if(livRilevanza.equals(LivelloRilevanza.UNKNOWN))
  3444.                 rilevanzaError = true;
  3445.             if(rilevanzaError){
  3446.                 Eccezione ecc = new Eccezione();
  3447.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3448.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3449.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3450.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_RILEVANZA.toString());
  3451.                 this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3452.                 errorFind = true;
  3453.             }

  3454.             // Posizione
  3455.             boolean posizioneError = false;
  3456.             try{
  3457.                 Node hrefFind = null;
  3458.                 if(this.readQualifiedAttribute){
  3459.                     hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, eccezione, "posizione", SPCoopCostanti.NAMESPACE_EGOV);
  3460.                 }else{
  3461.                     hrefFind = SoapUtils.getAttributeNode(messageFactory, eccezione, "posizione");
  3462.                 }
  3463.                 posizione = hrefFind.getNodeValue();
  3464.             } catch(Exception e) {
  3465.                 posizioneError = true;
  3466.             }
  3467.             if(posizione == null)
  3468.                 posizioneError = true;
  3469.             if(posizioneError){
  3470.                 Eccezione ecc = new Eccezione();
  3471.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3472.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3473.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3474.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_POSIZIONE.toString());
  3475.                 this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3476.                 errorFind = true;
  3477.             }

  3478.             if(this.spcoopProperties.isGenerazioneBustaErrore_strutturaMalformataHeaderProtocollo()==false){
  3479.                 if(contestoCodifica == null){
  3480.                     throw new StrutturaBustaException("Header egov senza Eccezione contestoCodifica","EccezioneContestoCodifica");
  3481.                 }
  3482.                 if(codiceEccezione == null){
  3483.                     throw new StrutturaBustaException("Header egov senza Eccezione codiceEccezione","EccezioneCodiceEccezione");
  3484.                 }
  3485.                 if(rilevanza == null){
  3486.                     throw new StrutturaBustaException("Header egov senza Eccezione rilevanza","EccezioneRilevanza");
  3487.                 }
  3488.                 if(posizione == null){
  3489.                     throw new StrutturaBustaException("Header egov senza Eccezione posizione","EccezionePosizione");
  3490.                 }
  3491.             }
  3492.            
  3493.             // Check finale
  3494.             if(errorFind == false){
  3495.                 if(contestoCodifica == null){
  3496.                     Eccezione ecc = new Eccezione();
  3497.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3498.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3499.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3500.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_CONTESTO_CODIFICA.toString());
  3501.                     this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3502.                 }
  3503.                 if(codiceEccezione == null){
  3504.                     Eccezione ecc = new Eccezione();
  3505.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3506.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3507.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3508.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_CODICE_ECCEZIONE.toString());
  3509.                     this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3510.                 }
  3511.                 if(rilevanza == null){
  3512.                     Eccezione ecc = new Eccezione();
  3513.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3514.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3515.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3516.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_RILEVANZA.toString());
  3517.                     this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3518.                 }
  3519.                 if(posizione == null){
  3520.                     Eccezione ecc = new Eccezione();
  3521.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3522.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.INTESTAZIONE_NON_CORRETTA);
  3523.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3524.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_POSIZIONE.toString());
  3525.                     this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3526.                 }
  3527.             }
  3528.            
  3529.             if(contestoCodifica!=null && codiceEccezione!=null && rilevanza !=null && posizione!=null) {
  3530.                 Eccezione eccLetta = new Eccezione();
  3531.                
  3532.                 eccLetta.setContestoCodificaValue(contestoCodifica);
  3533.                 eccLetta.setContestoCodifica(this.traduttore.toContestoCodificaEccezione(contestoCodifica));
  3534.                
  3535.                 eccLetta.setCodiceEccezioneValue(codiceEccezione);
  3536.                 eccLetta.setCodiceEccezione(this.traduttore.toCodiceErroreCooperazione(codiceEccezione));
  3537.                                
  3538.                 eccLetta.setRilevanza(livRilevanza);
  3539.                 eccLetta.setRilevanzaValue(rilevanza);
  3540.                
  3541.                 eccLetta.setDescrizione(posizione);
  3542.                
  3543.                 this.busta.addEccezione(eccLetta);
  3544.             }
  3545.         }

  3546.     }

  3547.     /**
  3548.      * Metodo che si occupa di validare un codice di rilevanza associato ad una Eccezione.
  3549.      *
  3550.      * @param codice Codice della rilevanza da validare.
  3551.      * @return true se il codice e' valido, false altrimenti
  3552.      * @throws ProtocolException
  3553.      *
  3554.      */
  3555.     private LivelloRilevanza validazioneRilevanza(String codice) throws ProtocolException{
  3556.         return this.traduttore.toLivelloRilevanza(codice);
  3557.     }

  3558.     /**
  3559.      * Metodo che si occupa di validare un codice di errore associato ad una Eccezione.
  3560.      *
  3561.      * @param codice Codice dell'eccezione da validare.
  3562.      * @return true se il codice e' valido, false altrimenti
  3563.      *
  3564.      */

  3565.     public boolean validazioneCodiceEccezione(CodiceErroreCooperazione codice){
  3566.         String v = this.traduttore.toString(codice);
  3567.         return v!=null;
  3568.     }
  3569.    
  3570.     public boolean validazioneCodiceEccezione(String codicetxt) throws ProtocolException{
  3571.         CodiceErroreCooperazione codice = CodiceErroreCooperazione.toCodiceErroreCooperazione(this.protocolFactory, codicetxt);
  3572.         return validazioneCodiceEccezione(codice);
  3573.     }


  3574.     public void validazioneFaultEGov(OpenSPCoop2Message msg){

  3575.         try{
  3576.             SOAPBody body = msg.castAsSoap().getSOAPBody();
  3577.            
  3578.             //Traduttore trasl = this.protocolFactory.createTraduttore();

  3579.             //log.info("VALIDAZIONE FAULT");
  3580.             if(body.hasFault() == false){
  3581.                 Eccezione ecc = new Eccezione();
  3582.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3583.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO);
  3584.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3585.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_SOAP_FAULT.toString());
  3586.                 this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3587.             } else {
  3588.                 SOAPFault fault = body.getFault();
  3589.                 boolean valoriOK = true;

  3590.                 // Controllo sul Fault
  3591.                 String faultS = fault.getFaultString();
  3592.                 if(faultS!=null)
  3593.                     faultS = faultS.trim();
  3594.                 if( !(SPCoopCostanti.FAULT_STRING_PROCESSAMENTO.equals(faultS)) &&
  3595.                         !(SPCoopCostanti.FAULT_STRING_VALIDAZIONE.equals(faultS))  ){
  3596.                     Eccezione ecc = new Eccezione();
  3597.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3598.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO);
  3599.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3600.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_SOAP_FAULT_STRING.toString());
  3601.                     this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3602.                     valoriOK = false;
  3603.                 }
  3604.                 Name codeS = fault.getFaultCodeAsName();
  3605.                
  3606.                 if(
  3607.                         (codeS == null)
  3608.                         ||
  3609.                         !(
  3610.                                 ("Client".equals(codeS.getLocalName()) || "Server".equals(codeS.getLocalName()) ) &&
  3611.                                 Costanti.SOAP_ENVELOPE_NAMESPACE.equalsIgnoreCase(codeS.getURI())
  3612.                         )
  3613.                 )
  3614.                 {
  3615.                     Eccezione ecc = new Eccezione();
  3616.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3617.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO);
  3618.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3619.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_SOAP_FAULT_CODE.toString());
  3620.                     this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3621.                     valoriOK = false;
  3622.                 }
  3623.                 if(valoriOK){
  3624.                     if ("Client".equals(codeS.getLocalName()) ){
  3625.                         boolean detailPresente = false;
  3626.                         Detail d = fault.getDetail();
  3627.                         if(d!=null){
  3628.                             if(d.getDetailEntries().hasNext())
  3629.                                 detailPresente = true;
  3630.                         }  
  3631.                         // Con soap:Client, non ci deveno essere Detail, e ci deve essere FAULT_STRING_VALIDAZIONE_SPCOOP!
  3632.                         if ( !(SPCoopCostanti.FAULT_STRING_VALIDAZIONE.equals(faultS)) ) {
  3633.                             Eccezione ecc = new Eccezione();
  3634.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3635.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO);
  3636.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3637.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_SOAP_FAULT_STRING.toString());
  3638.                             this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3639.                         }
  3640.                         if (detailPresente) {
  3641.                             Eccezione ecc = new Eccezione();
  3642.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3643.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO);
  3644.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3645.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_SOAP_FAULT_DETAILS_PRESENTI.toString());
  3646.                             this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3647.                         }
  3648.                     }
  3649.                     if ("Server".equals(codeS.getLocalName()) ){
  3650.                         // Con soap:Server, ci deve essere FAULT_STRING_PROCESSAMENTO_SPCOOP!
  3651.                         if ( !(SPCoopCostanti.FAULT_STRING_PROCESSAMENTO.equals(faultS)) ) {
  3652.                             Eccezione ecc = new Eccezione();
  3653.                             ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3654.                             ecc.setCodiceEccezione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO);
  3655.                             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3656.                             ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_ECCEZIONI_NON_VALIDA_POSIZIONE_SOAP_FAULT_STRING.toString());
  3657.                             this.errorsTrovatiSullaListaEccezioni.add(ecc);
  3658.                         }
  3659.                     }
  3660.                 }
  3661.             }
  3662.         }catch(Exception e){
  3663.             this.log.error("Errore durante la validazione del SoapFault",e);
  3664.             Eccezione ecc = new Eccezione();
  3665.             ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  3666.             ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  3667.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  3668.             ecc.setDescrizione("Validazione SoapFault: errore di processamento");
  3669.             this.erroriProcessamento.add(ecc);
  3670.             return;
  3671.         }
  3672.     }



  3673.     public void validazioneManifestAttachmentsEGov(OpenSPCoop2Message msgParam,ProprietaManifestAttachments proprietaManifestAttachments){
  3674.         //log.info("VALIDAZIONE MANIFEST");
  3675.         SOAPBody soapBody = null;
  3676.         try{
  3677.             OpenSPCoop2SoapMessage msg = msgParam.castAsSoap();
  3678.             OpenSPCoop2MessageFactory messageFactory = msg.getFactory();
  3679.            
  3680.             java.util.List<String> contentID = new java.util.ArrayList<>();
  3681.             java.util.List<String> contentLocation = new java.util.ArrayList<>();
  3682.             java.util.Iterator<?> it = msg.getAttachments();
  3683.            
  3684.             while(it.hasNext()){
  3685.                 AttachmentPart ap = (AttachmentPart) it.next();
  3686.                 contentID.add(ap.getContentId());
  3687.                 contentLocation.add(ap.getContentLocation());
  3688.                 //log.info("Attachments con ID["+ap.getContentId()+"] e Location["+ap.getContentLocation()+"]");
  3689.             }



  3690.             boolean isRichiesta = false;
  3691.             boolean isRisposta = false;

  3692.             soapBody = msg.getSOAPBody();
  3693.             List<Node> soapBodyList = SoapUtils.getNotEmptyChildNodes(messageFactory, soapBody);
  3694.             if(soapBodyList.size()!=1){
  3695.                 // Il body deve possedere esattamente un elemento
  3696.                 Eccezione ecc = new Eccezione();
  3697.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3698.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3699.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3700.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE+" child size:"+soapBodyList.size());
  3701.                 this.erroriValidazione.add(ecc);
  3702.                 return;
  3703.             }

  3704.             //log.info("Validazione Descrizione...");
  3705.             Node descrizione = soapBodyList.get(0);
  3706.             String prefixManifest = descrizione.getPrefix();
  3707.             if(prefixManifest== null)
  3708.                 prefixManifest = "";
  3709.             if("".equals(prefixManifest)==false)
  3710.                 prefixManifest = prefixManifest + ":";
  3711.             //log.info("esamino["+descrizione.getNodeName()+"]");
  3712.             //if(!(descrizione.getNodeName().equals(prefixManifest+"Descrizione"))){
  3713.             if(!(SoapUtils.matchLocalName(messageFactory, descrizione, "Descrizione", prefixManifest, SPCoopCostanti.NAMESPACE_EGOV))){    
  3714.                 // Elemento Descrizione non esistente
  3715.                 Eccezione ecc = new Eccezione();
  3716.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3717.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3718.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3719.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE.toString());
  3720.                 this.erroriValidazione.add(ecc);
  3721.                 return;
  3722.             }
  3723.             if(SPCoopCostanti.NAMESPACE_EGOV.equals(descrizione.getNamespaceURI())==false){
  3724.                 // Elemento Descrizione non esistente
  3725.                 Eccezione ecc = new Eccezione();
  3726.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3727.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3728.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3729.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_NAMESPACE.toString());
  3730.                 this.erroriValidazione.add(ecc);
  3731.                 return;
  3732.             }




  3733.             List<Node> descrizioneMessaggi = SoapUtils.getNotEmptyChildNodes(messageFactory, descrizione);
  3734.             if(descrizioneMessaggi.size()<=0){
  3735.                 //  Elemento DescrizioneMessaggio non esistente
  3736.                 Eccezione ecc = new Eccezione();
  3737.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3738.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3739.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  3740.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE+" child size:"+descrizioneMessaggi.size());
  3741.                 this.erroriValidazione.add(ecc);
  3742.                 return;
  3743.             }
  3744.             for(int i=0; i<descrizioneMessaggi.size();i++){

  3745.                 //log.info("Validazione DescrizioneMessaggio...");
  3746.                 Node descrizioneMessaggio = descrizioneMessaggi.get(i);
  3747.                 //log.info("esamino["+descrizioneMessaggio.getNodeName()+"]");
  3748.                 //if(!(descrizioneMessaggio.getNodeName().equals(prefixManifest+SPCoopCostanti.LOCAL_NAME_MANIFEST_EGOV_DESCRIZIONE_MESSAGGIO))){
  3749.                 if(!(SoapUtils.matchLocalName(messageFactory, descrizioneMessaggio, SPCoopCostanti.LOCAL_NAME_MANIFEST_EGOV_DESCRIZIONE_MESSAGGIO, prefixManifest, SPCoopCostanti.NAMESPACE_EGOV))){
  3750.                     //  Elemento DescrizioneMessaggio non esistente
  3751.                     Eccezione ecc = new Eccezione();
  3752.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3753.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3754.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3755.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE+"/child["+descrizioneMessaggio.getNodeName()+"]");
  3756.                     this.erroriValidazione.add(ecc);
  3757.                     continue;
  3758.                 }

  3759.                 //log.info("Validazione Riferimento...");
  3760.                 List<Node> riferimentoList = SoapUtils.getNotEmptyChildNodes(messageFactory, descrizioneMessaggio);
  3761.                 if(riferimentoList.size()!=1){
  3762.                     //  Elemento Riferimento non esistente
  3763.                     Eccezione ecc = new Eccezione();
  3764.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3765.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3766.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3767.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO +" child size:"+riferimentoList.size());
  3768.                     this.erroriValidazione.add(ecc);
  3769.                     continue;
  3770.                 }
  3771.                 Node riferimento = riferimentoList.get(0);
  3772.                 //log.info("esamino["+riferimento.getNodeName()+"]");
  3773.                 //if(!(riferimento.getNodeName().equals(prefixManifest+"Riferimento"))){
  3774.                 if(!(SoapUtils.matchLocalName(messageFactory, riferimento, "Riferimento", prefixManifest, SPCoopCostanti.NAMESPACE_EGOV))){
  3775.                     //  Elemento Riferimento non esistente
  3776.                     Eccezione ecc = new Eccezione();
  3777.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3778.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI_RIFERIMENTO_NON_PRESENTE);
  3779.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3780.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO+"/child["+riferimento.getNodeName()+"]");
  3781.                     this.erroriValidazione.add(ecc);
  3782.                     continue;
  3783.                 }

  3784.                 // href
  3785.                 String href = null;
  3786.                 boolean hrefError = false;
  3787.                 try{
  3788.                     Node hrefFind = null;
  3789.                     if(this.readQualifiedAttribute){
  3790.                         hrefFind = SoapUtils.getQualifiedAttributeNode(messageFactory, riferimento, "href", SPCoopCostanti.NAMESPACE_EGOV);
  3791.                     }else{
  3792.                         hrefFind = SoapUtils.getAttributeNode(messageFactory, riferimento, "href");
  3793.                     }
  3794.                     href = hrefFind.getNodeValue();
  3795.                 } catch(Exception e) {
  3796.                     hrefError = true;
  3797.                 }
  3798.                 if(href == null)
  3799.                     hrefError = true;
  3800.                 if(hrefError){
  3801.                     //  Elemento Riferimento non esistente
  3802.                     Eccezione ecc = new Eccezione();
  3803.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3804.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI_RIFERIMENTO_NON_VALIDO);
  3805.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3806.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_HREF.toString());
  3807.                     this.erroriValidazione.add(ecc);
  3808.                     continue;
  3809.                 }
  3810.                 // VALIDAZIONE HREF
  3811.                
  3812.                
  3813.                
  3814.                 boolean findHRef = false;
  3815.                 for(int k=0; k<contentID.size(); k++){
  3816.                     if(href.equals(contentID.get(k)) ||
  3817.                             href.equals("cid:"+contentID.get(k)) ||
  3818.                             href.equals(contentLocation.get(k)) ){
  3819.                         contentID.remove(k);
  3820.                         contentLocation.remove(k);
  3821.                         findHRef = true;
  3822.                         break;
  3823.                     }
  3824.                     else{
  3825.                         // verifico se per caso l'href fornito non contiene i '<' e '>'.
  3826.                         // per retrocompatibilità provo ad aggiungergli io
  3827.                         String hrefNew = new String(href);
  3828.                         String cidPref = "";
  3829.                         if(hrefNew.startsWith("cid:")){
  3830.                             hrefNew = hrefNew.substring("cid:".length());
  3831.                             cidPref = "cid:";
  3832.                         }
  3833.                         if(hrefNew.startsWith("<")==false){
  3834.                             hrefNew = "<"+hrefNew;
  3835.                         }
  3836.                         if(hrefNew.endsWith(">")==false){
  3837.                             hrefNew = hrefNew + ">";
  3838.                         }
  3839.                         hrefNew = cidPref + hrefNew;
  3840.                         if(hrefNew.equals(href)==false){
  3841.                             if(hrefNew.equals(contentID.get(k)) ||
  3842.                                     hrefNew.equals("cid:"+contentID.get(k)) ){
  3843.                                 contentID.remove(k);
  3844.                                 contentLocation.remove(k);
  3845.                                 findHRef = true;
  3846.                                 break;
  3847.                             }
  3848.                         }
  3849.                     }
  3850.                 }
  3851.                 if(findHRef == false){
  3852.                     //  RiferimentoAttachment non esistente
  3853.                     Eccezione ecc = new Eccezione();
  3854.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3855.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATO_NON_PRESENTE);
  3856.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3857.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_HREF+"["+href+"]");
  3858.                     this.erroriValidazione.add(ecc);
  3859.                 }


  3860.                 // role
  3861.                 String role = null;
  3862.                 boolean roleError = false;
  3863.                 try{
  3864.                     Node roleFind = null;
  3865.                     if(this.readQualifiedAttribute){
  3866.                         roleFind = SoapUtils.getQualifiedAttributeNode(messageFactory, riferimento, "role", SPCoopCostanti.NAMESPACE_EGOV);
  3867.                     }else{
  3868.                         roleFind = SoapUtils.getAttributeNode(messageFactory, riferimento, "role");
  3869.                     }
  3870.                     role = roleFind.getNodeValue();
  3871.                 } catch(Exception e) {
  3872.                     roleError = true;
  3873.                 }
  3874.                 if(role == null)
  3875.                     roleError = true;
  3876.                 if(roleError){
  3877.                     //  Elemento Riferimento non esistente
  3878.                     Eccezione ecc = new Eccezione();
  3879.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3880.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3881.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3882.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_ROLE.toString());
  3883.                     this.erroriValidazione.add(ecc);
  3884.                     continue;
  3885.                 }

  3886.                 // CHECK Semantica Ruolo
  3887.                 if(this.spcoopProperties.getRoleRichiestaManifest().equalsIgnoreCase(role) ||
  3888.                         this.spcoopProperties.getRoleRispostaManifest().equalsIgnoreCase(role)  ){
  3889.                     if(isRichiesta || isRisposta){
  3890.                         //  Doppio elemento 'Richiesta/Risposta'
  3891.                         Eccezione ecc = new Eccezione();
  3892.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3893.                         // uso il riferiemnto non valido per farlo tradurre con codice 118 e quindi farlo gestire bene ad InoltroBuste, per non far gestire il manifest in fase di sbustamento
  3894.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI_RIFERIMENTO_NON_VALIDO);
  3895.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  3896.                         // (Manifest degli attachments) Esistono più di una descrizione di messaggio
  3897.                         // con 'role' discriminante ('"+Costanti.ATTACHMENTS_MANIFEST_RICHIESTA+"'/'"+Costanti.ATTACHMENTS_MANIFEST_RISPOSTA+"').
  3898.                         String posizioneErrore = SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_ROLE_PRINCIPALE_DUPLICATO.toString();
  3899.                         posizioneErrore = posizioneErrore.replace(SPCoopCostanti.MANIFEST_KEY_ROLE_RICHIESTA, this.spcoopProperties.getRoleRichiestaManifest());
  3900.                         posizioneErrore = posizioneErrore.replace(SPCoopCostanti.MANIFEST_KEY_ROLE_RISPOSTA, this.spcoopProperties.getRoleRispostaManifest());
  3901.                         ecc.setDescrizione(posizioneErrore);
  3902.                         this.erroriValidazione.add(ecc);
  3903.                         continue;
  3904.                     }
  3905.                     if(this.spcoopProperties.getRoleRichiestaManifest().equalsIgnoreCase(role))
  3906.                         isRichiesta = true;
  3907.                     else
  3908.                         isRisposta = true;
  3909.                 }


  3910.                 // id
  3911.                 String id = null;
  3912.                 boolean idError = false;
  3913.                 try{
  3914.                     // Deve essere sempre preso come qualificato.
  3915.                     Node idFind = SoapUtils.getQualifiedAttributeNode(messageFactory, riferimento, "id", SPCoopCostanti.NAMESPACE_EGOV);
  3916.                     id = idFind.getNodeValue();
  3917.                 } catch(Exception e) {
  3918.                     idError = true;
  3919.                 }
  3920.                 if(id == null)
  3921.                     idError = true;
  3922.                 if(idError){
  3923.                     //  Elemento Riferimento non esistente
  3924.                     Eccezione ecc = new Eccezione();
  3925.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3926.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3927.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3928.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_ID.toString());
  3929.                     this.erroriValidazione.add(ecc);
  3930.                     continue;
  3931.                 }


  3932.                 // check elementi Schema e Titolo
  3933.                 List<Node> elementiRiferimento = SoapUtils.getNotEmptyChildNodes(messageFactory, riferimento);
  3934.                 if(elementiRiferimento.size()!=2){
  3935.                     //  Elemento Schema non esistente
  3936.                     Eccezione ecc = new Eccezione();
  3937.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3938.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3939.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3940.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO+" child size:"+elementiRiferimento.size());
  3941.                     this.erroriValidazione.add(ecc);
  3942.                     continue;
  3943.                 }

  3944.                 Node child = elementiRiferimento.get(0);
  3945.                 Node schema = null;
  3946.                 Node titolo = null;
  3947.                 //if(child.getNodeName().equals(prefixManifest+"Schema")){
  3948.                 if(SoapUtils.matchLocalName(messageFactory, child, "Schema", prefixManifest, SPCoopCostanti.NAMESPACE_EGOV)){
  3949.                     schema = child;
  3950.                     titolo = elementiRiferimento.get(1);                
  3951.                 //}else if(child.getNodeName().equals(prefixManifest+"Titolo")){
  3952.                 }else if(SoapUtils.matchLocalName(messageFactory, child, "Titolo", prefixManifest, SPCoopCostanti.NAMESPACE_EGOV)){
  3953.                     titolo = child;
  3954.                     schema = elementiRiferimento.get(1);
  3955.                 }else{
  3956.                     Eccezione ecc = new Eccezione();
  3957.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3958.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3959.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3960.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO+"/child["+child.getNodeName()+"]");
  3961.                     this.erroriValidazione.add(ecc);
  3962.                     continue;
  3963.                 }


  3964.                 //log.info("Validazione Schema...");            
  3965.                 //log.info("esamino["+schema.getNodeName()+"]");
  3966.                 //if(!(schema.getNodeName().equals(prefixManifest+"Schema"))){
  3967.                 if(!(SoapUtils.matchLocalName(messageFactory, schema, "Schema", prefixManifest, SPCoopCostanti.NAMESPACE_EGOV))){
  3968.                     //  Elemento Riferimento non esistente
  3969.                     Eccezione ecc = new Eccezione();
  3970.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3971.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3972.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3973.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_SCHEMA.toString());
  3974.                     this.erroriValidazione.add(ecc);
  3975.                     continue;
  3976.                 }

  3977.                 // posizione
  3978.                 String posizione = null;
  3979.                 boolean posizioneError = false;
  3980.                 try{
  3981.                     Node posizioneFind = null;
  3982.                     if(this.readQualifiedAttribute){
  3983.                         posizioneFind = SoapUtils.getQualifiedAttributeNode(messageFactory, schema, "posizione", SPCoopCostanti.NAMESPACE_EGOV);
  3984.                     }else{
  3985.                         posizioneFind = SoapUtils.getAttributeNode(messageFactory, schema, "posizione");
  3986.                     }
  3987.                     posizione = posizioneFind.getNodeValue();
  3988.                 } catch(Exception e) {
  3989.                     posizioneError = true;
  3990.                 }
  3991.                 if(posizione == null)
  3992.                     posizioneError = true;
  3993.                 if(posizioneError){
  3994.                     //  Elemento Riferimento non esistente
  3995.                     Eccezione ecc = new Eccezione();
  3996.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  3997.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  3998.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  3999.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_SCHEMA_POSIZIONE.toString());
  4000.                     this.erroriValidazione.add(ecc);
  4001.                     continue;
  4002.                 }



  4003.                 //log.info("Validazione Titolo...");
  4004.                 //log.info("esamino["+titolo.getNodeName()+"]");
  4005.                 //if(!(titolo.getNodeName().equals(prefixManifest+"Titolo"))){
  4006.                 if(!(SoapUtils.matchLocalName(messageFactory, titolo, "Titolo", prefixManifest, SPCoopCostanti.NAMESPACE_EGOV))){
  4007.                     //  Elemento Riferimento non esistente
  4008.                     Eccezione ecc = new Eccezione();
  4009.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  4010.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  4011.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  4012.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_TITOLO.toString());
  4013.                     this.erroriValidazione.add(ecc);
  4014.                     continue;
  4015.                 }

  4016.                 // Lingua
  4017.                 String Lingua = null;
  4018.                 try{
  4019.                     Node LinguaFind = null;
  4020.                     if(this.readQualifiedAttribute){
  4021.                         LinguaFind = SoapUtils.getQualifiedAttributeNode(messageFactory, titolo, "Lingua", SPCoopCostanti.NAMESPACE_EGOV);
  4022.                     }else{
  4023.                         LinguaFind = SoapUtils.getAttributeNode(messageFactory, titolo, "Lingua");
  4024.                     }
  4025.                     Lingua = LinguaFind.getNodeValue();
  4026.                 } catch(Exception e) {
  4027.                     // ignore
  4028.                 }
  4029.                 if(Lingua == null)
  4030.                     Lingua = "it"; // default is it

  4031.                 String valoreTitolo = null;
  4032.                 try{
  4033.                     valoreTitolo = SoapUtils.getNotEmptyChildNodes(messageFactory, titolo).get(0).getNodeValue();
  4034.                     if(valoreTitolo == null)
  4035.                         throw new Exception("valore non presente");
  4036.                 } catch(Exception e) {
  4037.                     //  Elemento Titolo con scorretto valore
  4038.                     Eccezione ecc = new Eccezione();
  4039.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  4040.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI);
  4041.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  4042.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_TITOLO.toString());
  4043.                     this.erroriValidazione.add(ecc);
  4044.                     continue;
  4045.                 }
  4046.             }

  4047.             // Validazione role Richiesta/Risposta
  4048.             if( isRichiesta==false && isRisposta ==false){
  4049.                 Eccezione ecc = new Eccezione();
  4050.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  4051.                 // uso il riferiemnto non valido per farlo tradurre con codice 118 e quindi farlo gestire bene ad InoltroBuste, per non far gestire il manifest in fase di sbustamento
  4052.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATI_RIFERIMENTO_NON_VALIDO);
  4053.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  4054.                 String posizioneErrore = SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_ROLE_PRINCIPALE_ASSENTE.toString();
  4055.                 posizioneErrore = posizioneErrore.replace(SPCoopCostanti.MANIFEST_KEY_ROLE_RICHIESTA, this.spcoopProperties.getRoleRichiestaManifest());
  4056.                 posizioneErrore = posizioneErrore.replace(SPCoopCostanti.MANIFEST_KEY_ROLE_RISPOSTA, this.spcoopProperties.getRoleRispostaManifest());
  4057.                 ecc.setDescrizione(posizioneErrore);
  4058.                 this.erroriValidazione.add(ecc);
  4059.                 return;
  4060.             }


  4061.             // Validazione href
  4062.             while(contentID.size()>0){
  4063.                 //  RiferimentoAttachment non definito in manifest
  4064.                 Eccezione ecc = new Eccezione();
  4065.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  4066.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ALLEGATO_NON_DEFINITO_MANIFEST);
  4067.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  4068.                 String href = contentID.remove(0);
  4069.                 if(href==null)
  4070.                     href = contentLocation.remove(0);
  4071.                 else
  4072.                     contentLocation.remove(0);
  4073.                 // (Manifest degli attachments) Allegato con id/location ["+href+"] non riferito attraverso opportuno elemento nel Manifest degli attachments.
  4074.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_MANIFEST_POSIZIONE_DESCRIZIONE_DESCRIZIONE_MESSAGGIO_RIFERIMENTO_HREF+"["+href+"] non presente");
  4075.                 this.erroriValidazione.add(ecc);
  4076.             }
  4077.             return;

  4078.         }catch(Exception e){
  4079.             this.log.error("Errore durante la validazione del Manifest degli attachments",e);
  4080.             Eccezione ecc = new Eccezione();
  4081.             ecc.setContestoCodifica(ContestoCodificaEccezione.PROCESSAMENTO);
  4082.             ecc.setCodiceEccezione(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO);
  4083.             ecc.setRilevanza(LivelloRilevanza.ERROR);
  4084.             ecc.setDescrizione("Manifest degli attachments: errore di processamento");
  4085.             this.erroriProcessamento.add(ecc);
  4086.             return;
  4087.         }
  4088.         finally{
  4089.             // *** GB ***
  4090.             soapBody = null;
  4091.             // *** GB ***
  4092.         }

  4093.     }




  4094.     /**
  4095.      * Metodo che si occupa di validare la data <var>aDate</var>
  4096.      * secondo la specifica eGov.
  4097.      * La Data deve essere formato da :
  4098.      * yyyy-MM-ddThh:mm:ss[.SSS]    (es. il 23/03/2005 alle 13:56:01 viene registrato come 2005-03-23T13:56:01)
  4099.      * In caso la validazione abbia successo, viene ritornato un oggetto Date inizializzato alla data <var>aDate</var>.
  4100.      *
  4101.      * @param aDate data eGov da validare
  4102.      * @return un oggetto Date inizializzato  alla <var>aDate</var>, se essa e' conforme alla specifica eGov, null altrimenti.
  4103.      *
  4104.      */
  4105.     private Date validazioneData(String aDate){

  4106.         try{

  4107.             String [] split = aDate.split("T");
  4108.             if(split == null)
  4109.                 return null;
  4110.             if(split.length != 2)
  4111.                 return null;

  4112.             // Check data yyyy-MM-dd
  4113.             String [] date = split[0].split("-");
  4114.             if(date == null)
  4115.                 return null;
  4116.             if(date.length != 3)
  4117.                 return null;
  4118.             if(date[0].length() != 4)
  4119.                 return null;
  4120.             try{
  4121.                 Integer test = Integer.valueOf(date[0]);
  4122.                 if(test.intValue()>2100)
  4123.                     return null;
  4124.             } catch(Exception e){
  4125.                 return null;
  4126.             }
  4127.             if(date[1].length() != 2)
  4128.                 return null;
  4129.             if(date[2].length() != 2)
  4130.                 return null;
  4131.             try{
  4132.                 Integer mese = Integer.valueOf(date[1]);
  4133.                 if(mese.intValue()>12 || mese.intValue() < 0)
  4134.                     return null;
  4135.                 Integer giorno = Integer.valueOf(date[2]);
  4136.                 if(giorno.intValue() < 0)
  4137.                     return null;
  4138.                 if(giorno.intValue()>29 && mese.intValue() == 2)
  4139.                     return null;
  4140.                 else if(giorno.intValue()>30 &&
  4141.                         (  (mese.intValue() == 4) ||
  4142.                                 (mese.intValue() == 6) ||
  4143.                                 (mese.intValue() == 9) ||
  4144.                                 (mese.intValue() == 11) ) )
  4145.                     return null;
  4146.                 else if(giorno.intValue()>31)
  4147.                     return null;
  4148.             } catch(Exception e){
  4149.                 return null;
  4150.             }

  4151.             // Check ora hh:mm:ss
  4152.             String [] ora = split[1].split(":");
  4153.             if(ora == null)
  4154.                 return null;
  4155.             if(ora.length < 3)
  4156.                 return null;

  4157.             // Check ora
  4158.             if(ora[0].length() != 2)
  4159.                 return null;
  4160.             try{
  4161.                 Integer test = Integer.valueOf(ora[0]);
  4162.                 if(test.intValue() > 23 || test.intValue() < 0)
  4163.                     return null;
  4164.             } catch(Exception e){
  4165.                 return null;
  4166.             }

  4167.             if(ora[1].length() != 2)
  4168.                 return null;
  4169.             try{
  4170.                 Integer test = Integer.valueOf(ora[1]);
  4171.                 if(test.intValue() > 59 || test.intValue() < 0)
  4172.                     return null;
  4173.             } catch(Exception e){
  4174.                 return null;
  4175.             }


  4176.             // Secondi...
  4177.             String secondi = null;
  4178.             if(ora[2].length() < 2)
  4179.                 return null;
  4180.             try{
  4181.                 secondi = "" + ora[2].charAt(0) + ora[2].charAt(1);
  4182.                 Integer test = Integer.valueOf(secondi);
  4183.                 if(test.intValue() > 59 || test.intValue() < 0)
  4184.                     return null;
  4185.             } catch(Exception e){
  4186.                 return null;
  4187.             }

  4188.             GregorianCalendar calendar = null;
  4189.             try{
  4190.                 calendar =
  4191.                     new GregorianCalendar( (Integer.valueOf(date[0])).intValue(),
  4192.                             ((Integer.valueOf(date[1])).intValue()-1), // il mese is 0-Based
  4193.                             (Integer.valueOf(date[2])).intValue(),
  4194.                             (Integer.valueOf(ora[0])).intValue(),
  4195.                             (Integer.valueOf(ora[1])).intValue(),
  4196.                             (Integer.valueOf(secondi)).intValue());
  4197.             } catch(Exception e){
  4198.                 return null;
  4199.             }

  4200.             long value = (calendar.getTime()).getTime(); //+ (1000 * 60 *60);
  4201.             return new Date(value);

  4202.         }catch(Exception error){
  4203.             return null;
  4204.         }
  4205.     }



  4206.     /**
  4207.      * Metodo che si occupa di verificare che la data <var>scadenza</var> descritta con un formato
  4208.      * conforme alla specifica eGov, non sia scaduta.
  4209.      * La Data deve essere formato da :
  4210.      * yyyy-MM-ddThh:mm:ss    (es. il 23/03/2005 alle 13:56:01 viene registrato come 2005-03-23T13:56:01)
  4211.      *
  4212.      * @param scadenza data eGov da controllare se e' scaduta o meno.
  4213.      * @return un boolean true se la data non e' scaduta. Altrimenti false.
  4214.      *
  4215.      */
  4216.     private boolean dataScaduta(String scadenza){
  4217.         Date now=DateManager.getDate();
  4218.         SimpleDateFormat dateformat = DateUtils.getDefaultDateTimeFormatter("yyyy MM dd HH mm ss");
  4219.         String nowFormat = dateformat.format(now);
  4220.         String scadenzaFormat = ((scadenza.replace('-',' ')).replace(':',' ')).replace('T',' ');
  4221.         String [] splitNow = nowFormat.split(" ");
  4222.         String [] splitScadenza = scadenzaFormat.split(" ");


  4223.         if (validazioneData(scadenza)  == null)
  4224.             return false;

  4225.         try{
  4226.             Integer testNowAnno = Integer.valueOf(splitNow[0]);
  4227.             Integer testScadenzaAnno = Integer.valueOf(splitScadenza[0]);
  4228.             Integer testNowMese = Integer.valueOf(splitNow[1]);
  4229.             Integer testScadenzaMese = Integer.valueOf(splitScadenza[1]);
  4230.             Integer testNowGiorno = Integer.valueOf(splitNow[2]);
  4231.             Integer testScadenzaGiorno = Integer.valueOf(splitScadenza[2]);
  4232.             Integer testNowOra = Integer.valueOf(splitNow[3]);
  4233.             Integer testScadenzaOra = Integer.valueOf(splitScadenza[3]);
  4234.             Integer testNowMinuti = Integer.valueOf(splitNow[4]);
  4235.             Integer testScadenzaMinuti = Integer.valueOf(splitScadenza[4]);
  4236.             Integer testNowSecondi = Integer.valueOf(splitNow[5]);
  4237.             Integer testScadenzaSecondi = Integer.valueOf(splitScadenza[5].charAt(0) + splitScadenza[5].charAt(1));
  4238.             if(testNowAnno.intValue() > testScadenzaAnno.intValue())
  4239.                 return true;
  4240.             else if ( (testNowAnno.intValue() == testScadenzaAnno.intValue()) &&
  4241.                     (testNowMese.intValue() > testScadenzaMese.intValue()) )
  4242.                 return true;
  4243.             else if ( (testNowAnno.intValue() == testScadenzaAnno.intValue()) &&
  4244.                     (testNowMese.intValue() == testScadenzaMese.intValue()) &&
  4245.                     (testNowGiorno.intValue() > testScadenzaGiorno.intValue()) )
  4246.                 return true;
  4247.             else if ( (testNowAnno.intValue() == testScadenzaAnno.intValue()) &&
  4248.                     (testNowMese.intValue() == testScadenzaMese.intValue()) &&
  4249.                     (testNowGiorno.intValue() == testScadenzaGiorno.intValue()) &&
  4250.                     (testNowOra.intValue() > testScadenzaOra.intValue()) )
  4251.                 return true;
  4252.             else if ( (testNowAnno.intValue() == testScadenzaAnno.intValue()) &&
  4253.                     (testNowMese.intValue() == testScadenzaMese.intValue()) &&
  4254.                     (testNowGiorno.intValue() == testScadenzaGiorno.intValue()) &&
  4255.                     (testNowOra.intValue() == testScadenzaOra.intValue()) &&
  4256.                     (testNowMinuti.intValue() > testScadenzaMinuti.intValue()) )
  4257.                 return true;
  4258.             else if ( (testNowAnno.intValue() == testScadenzaAnno.intValue()) &&
  4259.                     (testNowMese.intValue() == testScadenzaMese.intValue()) &&
  4260.                     (testNowGiorno.intValue() == testScadenzaGiorno.intValue()) &&
  4261.                     (testNowOra.intValue() == testScadenzaOra.intValue()) &&
  4262.                     (testNowMinuti.intValue() == testScadenzaMinuti.intValue()) &&
  4263.                     (testNowSecondi.intValue() > testScadenzaSecondi.intValue()) )
  4264.                 return true;

  4265.         } catch(Exception e){
  4266.             return true;
  4267.         }

  4268.         return false;
  4269.     }
  4270.    
  4271.        
  4272.     private void validazioneDatePresentiRispettoDateFuture() throws ProtocolException{
  4273.        
  4274.         int intervalloTolleranza = this.spcoopProperties.getIntervalloMinutiTolleranzaDateFuture();
  4275.        
  4276.         Date sistema = DateManager.getDate();
  4277.         Date dataFuturaMassimaAccettata = new Date(sistema.getTime()+(intervalloTolleranza*60*1000));
  4278.        
  4279.        
  4280.         // Ora Registrazione, altrimenti segnalero' il problema
  4281.         if(this.busta.getOraRegistrazione()!=null){
  4282.             if( this.busta.getOraRegistrazione().after(dataFuturaMassimaAccettata)){
  4283.                 this.log.error("Data portata nell'ora di registrazione ["+SPCoopUtils.getDate_eGovFormat(this.busta.getOraRegistrazione())+"] futura rispetto all'ora attuale di sistema ("+
  4284.                         SPCoopUtils.getDate_eGovFormat(sistema)+") e l'intervallo di tolleranza impostato a "+intervalloTolleranza+" minuti");
  4285.                 Eccezione ecc = new Eccezione();
  4286.                 ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  4287.                 ecc.setCodiceEccezione(CodiceErroreCooperazione.ORA_REGISTRAZIONE_NON_VALIDA);
  4288.                 ecc.setRilevanza(LivelloRilevanza.ERROR);
  4289.                 ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ORA_REGISTRAZIONE_NON_VALIDA_POSIZIONE.toString());
  4290.                 this.erroriValidazione.add(ecc);
  4291.             }
  4292.         }
  4293.        
  4294.         // Check su id egov
  4295.         // Se correttamente formato, altrimenti segnalero' il problema
  4296.         if(this.busta.getID()!=null){
  4297.             String [] split = this.busta.getID().split("_");
  4298.             if(split != null && split.length == 5){
  4299.                 Date dataIntoIDEgov = null;
  4300.                 try{
  4301.                     SimpleDateFormat dateformat = DateUtils.getSimpleDateFormatMinute();
  4302.                     dataIntoIDEgov = dateformat.parse(split[3]+"_"+split[4]);
  4303.                 }catch(Exception e){
  4304.                     // ignore
  4305.                 }
  4306.                 if(dataIntoIDEgov!=null){
  4307.                     //System.out.println("DATA IDEGOV BUSTA ["+dataIntoIDEgov.toString()
  4308.                     //      +"]   MINIMA ["+oraRegistrazioneMinimaAccettata.toString()+"]");
  4309.                     if( dataIntoIDEgov.after(dataFuturaMassimaAccettata)){
  4310.                         this.log.error("Data portata nell'identificativo egov ["+this.busta.getID()+"]["+SPCoopUtils.getDate_eGovFormat(dataIntoIDEgov)+"] futura rispetto all'ora attuale di sistema ("+
  4311.                                 SPCoopUtils.getDate_eGovFormat(sistema)+") e l'intervallo di tolleranza impostato a "+intervalloTolleranza+" minuti");
  4312.                         Eccezione ecc = new Eccezione();
  4313.                         ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  4314.                         ecc.setCodiceEccezione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_VALIDO);
  4315.                         ecc.setRilevanza(LivelloRilevanza.ERROR);
  4316.                         ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_ID_MESSAGGIO_NON_VALIDO_POSIZIONE.toString());
  4317.                         this.erroriValidazione.add(ecc);
  4318.                     }
  4319.                 }
  4320.             }
  4321.         }
  4322.        
  4323.         // Ora Registrazione nei riscontri, altrimenti segnalero' il problema
  4324.         for(int i=0; i<this.busta.sizeListaRiscontri(); i++){
  4325.             Riscontro riscontro = this.busta.getRiscontro(i);
  4326.             if(riscontro.getOraRegistrazione()!=null){
  4327.                 if( riscontro.getOraRegistrazione().after(dataFuturaMassimaAccettata)){
  4328.                     this.log.error("Data portata nell'ora di registrazione del riscontro con id ["+riscontro.getID()+"] ["+SPCoopUtils.getDate_eGovFormat(riscontro.getOraRegistrazione())
  4329.                             +"] futura rispetto all'ora attuale di sistema ("+
  4330.                             SPCoopUtils.getDate_eGovFormat(sistema)+") e l'intervallo di tolleranza impostato a "+intervalloTolleranza+" minuti");
  4331.                     Eccezione ecc = new Eccezione();
  4332.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  4333.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.RISCONTRO_ORA_REGISTRAZIONE_NON_VALIDA);
  4334.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  4335.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_RISCONTRI_NON_VALIDA_POSIZIONE_RISCONTRO_ORA_REGISTRAZIONE.toString());
  4336.                     this.erroriValidazione.add(ecc);
  4337.                 }
  4338.             }
  4339.         }
  4340.        
  4341.         // Ora Registrazione nelle trasmissioni, altrimenti segnalero' il problema
  4342.         for(int i=0; i<this.busta.sizeListaTrasmissioni(); i++){
  4343.             Trasmissione trasmissione = this.busta.getTrasmissione(i);
  4344.             if(trasmissione.getOraRegistrazione()!=null){
  4345.                 if( trasmissione.getOraRegistrazione().after(dataFuturaMassimaAccettata)){
  4346.                     this.log.error("Data portata nell'ora di registrazione di una trasmissione ["+SPCoopUtils.getDate_eGovFormat(trasmissione.getOraRegistrazione())
  4347.                             +"] futura rispetto all'ora attuale di sistema ("+
  4348.                             SPCoopUtils.getDate_eGovFormat(sistema)+") e l'intervallo di tolleranza impostato a "+intervalloTolleranza+" minuti");
  4349.                     Eccezione ecc = new Eccezione();
  4350.                     ecc.setContestoCodifica(ContestoCodificaEccezione.INTESTAZIONE);
  4351.                     ecc.setCodiceEccezione(CodiceErroreCooperazione.TRASMISSIONE_ORA_REGISTRAZIONE_NON_VALIDA);
  4352.                     ecc.setRilevanza(LivelloRilevanza.ERROR);
  4353.                     ecc.setDescrizione(SPCoopCostantiPosizioneEccezione.ECCEZIONE_LISTA_TRASMISSIONI_NON_VALIDA_POSIZIONE_TRASMISSIONE_ORA_REGISTRAZIONE.toString());
  4354.                     this.erroriValidazione.add(ecc);
  4355.                 }
  4356.             }
  4357.         }
  4358.     }


  4359.     @Override
  4360.     public ValidazioneSintatticaResult<SOAPHeaderElement> validaRichiesta(OpenSPCoop2Message msg,  Busta datiBustaLettiURLMappingProperties, ProprietaValidazioneErrori proprietaValidazioneErrori) throws ProtocolException{
  4361.         try{
  4362.             this.msg = msg.castAsSoap();
  4363.         }catch(Exception e){
  4364.             throw new ProtocolException(e.getMessage(),e);
  4365.         }
  4366.         boolean isValido = this.valida(false);
  4367.         ErroreCooperazione errore = null;
  4368.         if(this.msgErrore!=null && this.codiceErrore!=null){
  4369.             errore = new ErroreCooperazione(this.msgErrore, this.codiceErrore);
  4370.         }
  4371.         ValidazioneSintatticaResult<SOAPHeaderElement> result = new ValidazioneSintatticaResult<SOAPHeaderElement>(this.erroriValidazione, this.erroriProcessamento,
  4372.                 this.errorsTrovatiSullaListaEccezioni, this.busta, errore, this.bustaErroreHeaderIntestazione, this.headerEGov, isValido);
  4373.         return result;
  4374.     }
  4375.    
  4376.     @Override
  4377.     public ValidazioneSintatticaResult<SOAPHeaderElement> validaRisposta(OpenSPCoop2Message msg, Busta bustaRichiesta, ProprietaValidazioneErrori proprietaValidazioneErrori) throws ProtocolException{
  4378.         try{
  4379.             this.msg = msg.castAsSoap();
  4380.         }catch(Exception e){
  4381.             throw new ProtocolException(e.getMessage(),e);
  4382.         }
  4383.         boolean isValido = this.valida(false);
  4384.         ErroreCooperazione errore = null;
  4385.         if(this.msgErrore!=null && this.codiceErrore!=null){
  4386.             errore = new ErroreCooperazione(this.msgErrore, this.codiceErrore);
  4387.         }
  4388.         ValidazioneSintatticaResult<SOAPHeaderElement> result = new ValidazioneSintatticaResult<SOAPHeaderElement>(this.erroriValidazione, this.erroriProcessamento,
  4389.                 this.errorsTrovatiSullaListaEccezioni, this.busta, errore, this.bustaErroreHeaderIntestazione, this.headerEGov, isValido);
  4390.         return result;
  4391.     }
  4392.    
  4393.     @Override
  4394.     public boolean verifyProtocolPresence(TipoPdD tipoPdD, ProfiloDiCollaborazione profilo, RuoloMessaggio ruoloMessaggio,
  4395.             OpenSPCoop2Message msg) throws ProtocolException{
  4396.         if(msg==null){
  4397.             return false;
  4398.         }
  4399.         OpenSPCoop2SoapMessage soap = null;
  4400.         try{
  4401.             soap = msg.castAsSoap();
  4402.         }catch(Exception e){
  4403.             throw new ProtocolException(e.getMessage(),e);
  4404.         }
  4405.         return this.existsHeaderEGov(soap);
  4406.     }

  4407.     @Override
  4408.     public ValidazioneSintatticaResult<SOAPHeaderElement> validazioneManifestAttachments(
  4409.             OpenSPCoop2Message msg,
  4410.             ProprietaManifestAttachments proprietaManifestAttachments) {
  4411.         this.validazioneManifestAttachmentsEGov(msg, proprietaManifestAttachments);
  4412.         ErroreCooperazione errore = null;
  4413.         if(this.msgErrore!=null && this.codiceErrore!=null){
  4414.             errore = new ErroreCooperazione(this.msgErrore, this.codiceErrore);
  4415.         }
  4416.         ValidazioneSintatticaResult<SOAPHeaderElement> result = new ValidazioneSintatticaResult<SOAPHeaderElement>(this.erroriValidazione, this.erroriProcessamento,
  4417.                 this.errorsTrovatiSullaListaEccezioni, this.busta, errore, this.bustaErroreHeaderIntestazione, this.headerEGov, true);
  4418.         return result;
  4419.     }

  4420.     @Override
  4421.     public SPCoopBustaRawContent getBustaRawContent_senzaControlli(
  4422.             OpenSPCoop2Message msg) throws ProtocolException {
  4423.         try{
  4424.             this.msg = msg.castAsSoap();
  4425.         }catch(Exception e){
  4426.             throw new ProtocolException(e.getMessage(),e);
  4427.         }
  4428.         return this.getHeaderEGov_senzaControlli();
  4429.     }
  4430.    
  4431.     @Override
  4432.     public Busta getBusta_senzaControlli(OpenSPCoop2Message msg) throws ProtocolException{
  4433.         try{
  4434.             this.msg = msg.castAsSoap();
  4435.         }catch(Exception e){
  4436.             throw new ProtocolException(e.getMessage(),e);
  4437.         }
  4438.         if(this.valida(true)){
  4439.             return this.busta;
  4440.         }
  4441.         else{
  4442.             return this.bustaErroreHeaderIntestazione;
  4443.         }
  4444.     }

  4445.     @Override
  4446.     public ValidazioneSintatticaResult<SOAPHeaderElement> validazioneFault(OpenSPCoop2Message msg) {
  4447.         this.validazioneFaultEGov(msg);
  4448.         ErroreCooperazione errore = null;
  4449.         if(this.msgErrore!=null && this.codiceErrore!=null){
  4450.             errore = new ErroreCooperazione(this.msgErrore, this.codiceErrore);
  4451.         }
  4452.         ValidazioneSintatticaResult<SOAPHeaderElement> result = new ValidazioneSintatticaResult<SOAPHeaderElement>(this.erroriValidazione, this.erroriProcessamento,
  4453.                 this.errorsTrovatiSullaListaEccezioni, this.busta, errore, this.bustaErroreHeaderIntestazione, this.headerEGov, true);
  4454.         return result;
  4455.     }

  4456.    
  4457.     public ProfiloDiCollaborazione toProfilo(String profilo){
  4458.         if(SPCoopCostanti.PROFILO_COLLABORAZIONE_ONEWAY.equals(profilo))
  4459.             return ProfiloDiCollaborazione.ONEWAY;
  4460.         if(SPCoopCostanti.PROFILO_COLLABORAZIONE_SINCRONO.equals(profilo))
  4461.             return ProfiloDiCollaborazione.SINCRONO;
  4462.         if(SPCoopCostanti.PROFILO_COLLABORAZIONE_ASINCRONO_ASIMMETRICO.equals(profilo))
  4463.             return ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO;
  4464.         if(SPCoopCostanti.PROFILO_COLLABORAZIONE_ASINCRONO_SIMMETRICO.equals(profilo))
  4465.             return ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO;
  4466.         return ProfiloDiCollaborazione.UNKNOWN;
  4467.     }
  4468.     public TipoOraRegistrazione toTipoOra(String tipoora){
  4469.         if(SPCoopCostanti.TIPO_TEMPO_LOCALE.equals(tipoora))
  4470.             return TipoOraRegistrazione.LOCALE;
  4471.         if(SPCoopCostanti.TIPO_TEMPO_SPC.equals(tipoora))
  4472.             return TipoOraRegistrazione.SINCRONIZZATO;
  4473.         return TipoOraRegistrazione.UNKNOWN;
  4474.     }
  4475.     public Inoltro toInoltro(String inoltro){
  4476.         if(SPCoopCostanti.PROFILO_TRASMISSIONE_CON_DUPLICATI.equals(inoltro))
  4477.             return Inoltro.CON_DUPLICATI;
  4478.         if(SPCoopCostanti.PROFILO_TRASMISSIONE_SENZA_DUPLICATI.equals(inoltro))
  4479.             return Inoltro.SENZA_DUPLICATI;
  4480.         return Inoltro.UNKNOWN;
  4481.     }
  4482. }