ValidazioneSintattica.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.engine.validator;

  21. import javax.xml.soap.SOAPHeader;

  22. import org.openspcoop2.core.constants.TipoPdD;
  23. import org.openspcoop2.message.OpenSPCoop2Message;
  24. import org.openspcoop2.protocol.engine.Configurazione;
  25. import org.openspcoop2.protocol.sdk.Busta;
  26. import org.openspcoop2.protocol.sdk.BustaRawContent;
  27. import org.openspcoop2.protocol.sdk.Context;
  28. import org.openspcoop2.protocol.sdk.Eccezione;
  29. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  30. import org.openspcoop2.protocol.sdk.ProtocolException;
  31. import org.openspcoop2.protocol.sdk.builder.ProprietaManifestAttachments;
  32. import org.openspcoop2.protocol.sdk.config.IProtocolManager;
  33. import org.openspcoop2.protocol.sdk.constants.ErroreCooperazione;
  34. import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
  35. import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
  36. import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
  37. import org.openspcoop2.protocol.sdk.state.IState;
  38. import org.openspcoop2.protocol.sdk.validator.ProprietaValidazioneErrori;
  39. import org.openspcoop2.protocol.sdk.validator.ValidazioneSintatticaResult;
  40. import org.openspcoop2.utils.LoggerWrapperFactory;
  41. import org.slf4j.Logger;

  42. /**
  43.  * Classe utilizzata per la validazione sintattica di una busta.
  44.  *
  45.  *
  46.  * @author Poli Andrea (apoli@link.it)
  47.  * @author Lorenzo Nardi (nardi@link.it)
  48.  * @author $Author$
  49.  * @version $Rev$, $Date$
  50.  */

  51. public class ValidazioneSintattica {

  52.     /** Messaggio. */
  53.     protected OpenSPCoop2Message msg;
  54.     /** HeaderSOAP */
  55.     protected SOAPHeader headerSOAP = null;
  56.     /** Header */
  57.     protected BustaRawContent<?> headerProtocollo;
  58.    
  59.     public BustaRawContent<?> getProtocolHeader(){
  60.         return this.headerProtocollo;
  61.     }
  62.    
  63.     public void setHeaderSOAP(SOAPHeader headerSOAP) {
  64.         this.headerSOAP = headerSOAP;
  65.     }
  66.     /** Errori di validazione riscontrati sulla busta */
  67.     protected java.util.List<Eccezione> erroriValidazione;
  68.     /** Errori di processamento riscontrati sulla busta */
  69.     protected java.util.List<Eccezione> erroriProcessamento;
  70.     private String erroreProcessamento_internalMessage;
  71.     /** Errors riscontrati sulla lista eccezioni */
  72.     protected java.util.List<Eccezione> errorsTrovatiSullaListaEccezioni;
  73.     /** Busta */
  74.     protected Busta busta;
  75.     protected Boolean isRichiesta;
  76.     /** Eventuale errore avvenuto durante il processo di validazione */
  77.     protected ErroreCooperazione errore;
  78.     protected IntegrationFunctionError errore_integrationFunctionError;
  79.     /** Indicazione se leggere gli attributi qualificati */
  80.     protected boolean readQualifiedAttribute;

  81.     /** Logger utilizzato per debug. */
  82.     protected org.slf4j.Logger log = null;

  83.     protected boolean segnalazioneElementoPresentePiuVolte = false;
  84.     private IProtocolFactory<?> protocolFactory;
  85.     private IProtocolManager protocolManager;
  86.     /** Indicazione se la busta risulta scaduta */
  87.     protected boolean messaggioScaduto = false;
  88.    
  89.     /** bustaErroreHeaderIntestazione: generata solo quando la busta arrivata non contiene gli elementi principali */
  90.     protected Busta bustaErroreHeaderIntestazione = null;
  91.     public Busta getBustaErroreHeaderIntestazione() {
  92.         return this.bustaErroreHeaderIntestazione;
  93.     }
  94.    
  95.     /** Stato */
  96.     private IState state;
  97.    
  98.     /** Context */
  99.     private Context context;
  100.    
  101.     /**
  102.      * Costruttore
  103.      *
  104.      * @param aMsg Messaggio da validare.
  105.      * @throws ProtocolException
  106.      *
  107.      */
  108.     public ValidazioneSintattica(Context context, IState state,OpenSPCoop2Message aMsg,boolean readQualifiedAttribute, IProtocolFactory<?> protocolFactory) throws ProtocolException {
  109.         this(context,state,aMsg,Configurazione.getLibraryLog(),readQualifiedAttribute, protocolFactory);
  110.     }
  111.     public ValidazioneSintattica(Context context, IState state,OpenSPCoop2Message aMsg, IProtocolFactory<?> protocolFactory) throws ProtocolException {
  112.         this(context,state,aMsg,Configurazione.getLibraryLog(),false, protocolFactory);
  113.     }
  114.     public ValidazioneSintattica(Context context, IState state,OpenSPCoop2Message aMsg,Logger alog, IProtocolFactory<?> protocolFactory) throws ProtocolException {
  115.         this(context, state,aMsg,alog,false, protocolFactory);
  116.     }
  117.    
  118.     /**
  119.      * Costruttore
  120.      *
  121.      * @param aMsg Messaggio da validare.
  122.      * @throws ProtocolException
  123.      *
  124.      */
  125.     public ValidazioneSintattica(Context context, IState state,OpenSPCoop2Message aMsg, Busta busta, Boolean isRichiesta, Logger alog, boolean readQualifiedAttribute, IProtocolFactory<?> protocolFactory) throws ProtocolException {
  126.         this(context, state,aMsg, alog, readQualifiedAttribute, protocolFactory);
  127.         this.busta = busta;
  128.         this.isRichiesta = isRichiesta;
  129.     }
  130.    
  131.     public ValidazioneSintattica(Context context, IState state,OpenSPCoop2Message aMsg,Logger alog,boolean readQualifiedAttribute, IProtocolFactory<?> protocolFactory) throws ProtocolException {
  132.         this.state = state;
  133.         this.context = context;
  134.         this.msg = aMsg;
  135.         if(alog!=null){
  136.             this.log = alog;
  137.         }else{
  138.             this.log = LoggerWrapperFactory.getLogger(ValidazioneSintattica.class.getName());
  139.         }
  140.         this.readQualifiedAttribute = readQualifiedAttribute;
  141.         this.protocolFactory = protocolFactory;
  142.         this.protocolManager = this.protocolFactory.createProtocolManager();
  143.     }


  144.     public void updateMsg(OpenSPCoop2Message msg) throws ProtocolException {
  145.         String msgClassName = msg.getClass().getName()+ "";
  146.         boolean update = !msgClassName.equals(this.msg.getClass().getName());
  147.         if(update){
  148.             this.msg = msg;
  149.             if(this.headerProtocollo!=null){
  150.                 org.openspcoop2.protocol.sdk.validator.IValidazioneSintattica<?> validazioneSintattica = this.protocolFactory.createValidazioneSintattica(this.state);
  151.                 this.headerProtocollo = validazioneSintattica.getBustaRawContent_senzaControlli(this.msg);
  152.             }
  153.         }
  154.     }

  155.     public IProtocolFactory<?> getProtocolFactory(){
  156.         return this.protocolFactory;
  157.     }
  158.    
  159.     /**
  160.      * Oggetto Busta contenente i valori della busta ricevuta.
  161.      *
  162.      * @return busta.
  163.      *
  164.      */
  165.     public Busta getBusta(){
  166.         return this.busta;
  167.     }

  168.     /**
  169.      * Ritorna un List contenente eventuali eccezioni di validazione riscontrate nella busta.  
  170.      *
  171.      * @return Eccezioni riscontrate nella busta.
  172.      *
  173.      */
  174.     public java.util.List<Eccezione> getEccezioniValidazione(){
  175.         return this.erroriValidazione;
  176.     }
  177.     /**
  178.      * Ritorna un List contenente eventuali eccezioni di processamento riscontrate nella busta.  
  179.      *
  180.      * @return Eccezioni riscontrate nella busta.
  181.      *
  182.      */
  183.     public java.util.List<Eccezione> getEccezioniProcessamento(){
  184.         return this.erroriProcessamento;
  185.     }
  186.     public String getErroreProcessamento_internalMessage() {
  187.         return this.erroreProcessamento_internalMessage;
  188.     }
  189.    
  190.     /**
  191.      * Ritorna un List contenente eventuali eccezioni riscontrate nella busta durante il processo di validazione.  
  192.      *
  193.      * @return Eccezioni riscontrate nella busta.
  194.      *
  195.      */
  196.     public java.util.List<Eccezione> getErroriTrovatiSullaListaEccezioni(){
  197.         return this.errorsTrovatiSullaListaEccezioni;
  198.     }

  199.     /**
  200.      * In caso di avvenuto errore durante il processo di validazione,
  201.      * questo metodo ritorna il motivo dell'errore.
  202.      *
  203.      * @return motivo dell'errore (se avvenuto).
  204.      *
  205.      */
  206.     public ErroreCooperazione getErrore(){
  207.         return this.errore;
  208.     }
  209.     public IntegrationFunctionError getErrore_integrationFunctionError() {
  210.         return this.errore_integrationFunctionError;
  211.     }


  212.     /**
  213.      * Metodo che effettua una validazione sintattica di una busta.
  214.      * Il metodo, oltre ad effettuare la validazione della busta, si occupa anche di leggerne il contenuto e
  215.      * di impostarlo all'interno dell'oggetto <var>busta</var>.
  216.      * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
  217.      *   {@link Eccezione}, e viene inserito nel List <var>errors</var>.
  218.      *
  219.      * @return return true in caso di validazione sintattica riuscita (con o senza anomalie), false in caso di errori di processamento.
  220.      *
  221.      */
  222.     public boolean valida(){
  223.         // Recupero l'oggetto Busta
  224.        
  225.        
  226.         ValidazioneSintatticaResult<?> result = null;
  227.         org.openspcoop2.protocol.sdk.validator.IValidazioneSintattica<?> validazioneSintattica = null;
  228.         boolean protocolException = false;
  229.         try {
  230.             validazioneSintattica = this.protocolFactory.createValidazioneSintattica(this.state);
  231.             validazioneSintattica.setContext(this.context);
  232.             ProprietaValidazioneErrori pValidazioneErrori = new ProprietaValidazioneErrori();
  233.             pValidazioneErrori.setIgnoraEccezioniNonGravi(this.protocolManager.isIgnoraEccezioniNonGravi());
  234.             if(this.isRichiesta==null || this.isRichiesta){
  235.                 result = validazioneSintattica.validaRichiesta(this.msg, this.busta, pValidazioneErrori);
  236.             }
  237.             else{
  238.                 result = validazioneSintattica.validaRisposta(this.msg, this.busta, pValidazioneErrori);
  239.             }
  240.            
  241.         } catch (ProtocolException e) {
  242.             protocolException = true;
  243.         }
  244.        
  245.         if(result != null){
  246.             if(result.getBusta() != null)
  247.                 this.busta = result.getBusta();
  248.            
  249.             if(result.getBustaErrore()!= null)
  250.                 this.bustaErroreHeaderIntestazione = result.getBustaErrore();
  251.            
  252.             this.errore = result.getErrore();
  253.             this.errore_integrationFunctionError = result.getErrore_integrationFunctionError();
  254.            
  255.             this.erroriProcessamento = result.getErroriProcessamento();
  256.             if(this.erroriProcessamento == null)
  257.                 this.erroriProcessamento = new java.util.ArrayList<Eccezione>();
  258.             this.erroreProcessamento_internalMessage = result.getErroreProcessamento_internalMessage();
  259.            
  260.             this.erroriValidazione = result.getErroriValidazione();
  261.             if(this.erroriValidazione == null)
  262.                 this.erroriValidazione = new java.util.ArrayList<Eccezione>();
  263.            
  264.             this.errorsTrovatiSullaListaEccezioni = result.getErrorsTrovatiSullaListaEccezioni();
  265.             if(this.errorsTrovatiSullaListaEccezioni == null)
  266.                 this.errorsTrovatiSullaListaEccezioni = new java.util.ArrayList<Eccezione>();
  267.            
  268.             if(result.getBustaRawContent() != null)
  269.                 this.headerProtocollo = result.getBustaRawContent();
  270.            
  271.             return result.isValido();
  272.         }
  273.         else {
  274.             if(protocolException) {
  275.                 if(this.isRichiesta==null || this.isRichiesta){
  276.                     this.errore_integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
  277.                 }
  278.                 else {
  279.                     this.errore_integrationFunctionError = IntegrationFunctionError.INTERNAL_RESPONSE_ERROR;
  280.                 }
  281.             }
  282.         }
  283.        
  284.         return false;
  285.        
  286.     }

  287.    
  288.    
  289.    
  290.     /**
  291.      * Controlla che esista una busta nell'header
  292.      *
  293.      * @return true se esiste un protocollo, false altrimenti
  294.      */
  295.     public boolean verifyProtocolPresence(TipoPdD tipoPdD, ProfiloDiCollaborazione profilo, RuoloMessaggio ruoloMessaggio) throws Exception{
  296.         return this.protocolFactory.createValidazioneSintattica(this.state).verifyProtocolPresence(tipoPdD, profilo, ruoloMessaggio, this.msg);
  297.     }
  298.    

  299.     /**
  300.      * Metodo che si occupa di validare il Fault presente in un Messaggio Errore.
  301.      *
  302.      * @param msg Messaggio contenente il Fault.
  303.      * @throws ProtocolException
  304.      *
  305.      */
  306.     public void validazioneFault(OpenSPCoop2Message msg) throws ProtocolException{
  307.         ValidazioneSintatticaResult<?> result = this.protocolFactory.createValidazioneSintattica(this.state).validazioneFault(msg);
  308.         if(result != null){
  309.             if(result.getBusta() != null)
  310.                 this.busta = result.getBusta();
  311.             if(result.getBustaErrore()!= null)
  312.                 this.bustaErroreHeaderIntestazione = result.getBustaErrore();
  313.            
  314.             this.errore = result.getErrore();
  315.            
  316.             this.erroriProcessamento = result.getErroriProcessamento();
  317.             if(this.erroriProcessamento == null)
  318.                 this.erroriProcessamento = new java.util.ArrayList<Eccezione>();
  319.             this.erroreProcessamento_internalMessage = result.getErroreProcessamento_internalMessage();
  320.            
  321.             this.erroriValidazione = result.getErroriValidazione();
  322.             if(this.erroriValidazione == null)
  323.                 this.erroriValidazione = new java.util.ArrayList<Eccezione>();
  324.            
  325.             this.errorsTrovatiSullaListaEccezioni = result.getErrorsTrovatiSullaListaEccezioni();
  326.             if(this.errorsTrovatiSullaListaEccezioni == null)
  327.                 this.errorsTrovatiSullaListaEccezioni = new java.util.ArrayList<Eccezione>();

  328.             if(result.getBustaRawContent() != null)
  329.                 this.headerProtocollo = result.getBustaRawContent();
  330.         }
  331.     }

  332.     /**
  333.      * Metodo che si occupa di validare il Manifest di un SoapBody.
  334.      *
  335.      * @param msg SOAPMessage contenente il Manifest.
  336.      * @throws ProtocolException
  337.      *
  338.      */
  339.     public void validazioneManifestAttachments(OpenSPCoop2Message msg,ProprietaManifestAttachments proprietaManifestAttachments) throws ProtocolException{
  340.         ValidazioneSintatticaResult<?> result = this.protocolFactory.createValidazioneSintattica(this.state).validazioneManifestAttachments(msg, proprietaManifestAttachments);
  341.         if(result != null){
  342.             if(result.getBusta() != null)
  343.                 this.busta = result.getBusta();
  344.             if(result.getBustaErrore()!= null)
  345.                 this.bustaErroreHeaderIntestazione = result.getBustaErrore();
  346.            
  347.             this.errore = result.getErrore();
  348.            
  349.             this.erroriProcessamento = result.getErroriProcessamento();
  350.             if(this.erroriProcessamento == null)
  351.                 this.erroriProcessamento = new java.util.ArrayList<Eccezione>();
  352.             this.erroreProcessamento_internalMessage = result.getErroreProcessamento_internalMessage();
  353.            
  354.             this.erroriValidazione = result.getErroriValidazione();
  355.             if(this.erroriValidazione == null)
  356.                 this.erroriValidazione = new java.util.ArrayList<Eccezione>();
  357.            
  358.             this.errorsTrovatiSullaListaEccezioni = result.getErrorsTrovatiSullaListaEccezioni();
  359.             if(this.errorsTrovatiSullaListaEccezioni == null)
  360.                 this.errorsTrovatiSullaListaEccezioni = new java.util.ArrayList<Eccezione>();
  361.    
  362.             if(result.getBustaRawContent() != null)
  363.                 this.headerProtocollo = result.getBustaRawContent();
  364.         }
  365.     }
  366.    
  367.     public BustaRawContent<?> getHeaderProtocollo_senzaControlli() throws ProtocolException{
  368.         return this.protocolFactory.createValidazioneSintattica(this.state).getBustaRawContent_senzaControlli(this.msg);
  369.     }

  370. }