SDIValidatoreServizioRiceviFile.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.sdi.validator;

  21. import it.gov.fatturapa.sdi.ws.trasmissione.v1_0.types.constants.ErroreInvioType;
  22. import it.gov.fatturapa.sdi.ws.trasmissione.v1_0.types.utils.ProjectInfo;

  23. import java.util.List;

  24. import javax.xml.soap.SOAPElement;

  25. import org.openspcoop2.message.OpenSPCoop2Message;
  26. import org.openspcoop2.message.soap.SoapUtils;
  27. import org.openspcoop2.protocol.sdi.constants.SDICostanti;
  28. import org.openspcoop2.protocol.sdi.constants.SDICostantiServizioRiceviFile;
  29. import org.openspcoop2.protocol.sdk.Busta;
  30. import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;

  31. /**
  32.  * SDIValidatoreServizioRiceviFile
  33.  *
  34.  * @author Andrea Poli (apoli@link.it)
  35.  * @author $Author$
  36.  * @version $Rev$, $Date$
  37.  */
  38. public class SDIValidatoreServizioRiceviFile {

  39.     private SDIValidazioneSintattica sdiValidazioneSintattica;
  40.     @SuppressWarnings("unused")
  41.     private SDIValidazioneSemantica sdiValidazioneSemantica;
  42.     @SuppressWarnings("unused")
  43.     private OpenSPCoop2Message msg;
  44.     private boolean isRichiesta;
  45.     private SOAPElement sdiMessage;
  46.     private String namespace;
  47.     private Busta busta;
  48.    
  49.     public SDIValidatoreServizioRiceviFile(SDIValidazioneSintattica sdiValidazioneSintattica,
  50.             OpenSPCoop2Message msg,boolean isRichiesta,
  51.             SOAPElement sdiMessage,Busta busta){
  52.         this.sdiValidazioneSintattica = sdiValidazioneSintattica;
  53.         this.msg = msg;
  54.         this.isRichiesta = isRichiesta;
  55.         this.sdiMessage = sdiMessage;
  56.         this.namespace = ProjectInfo.getInstance().getProjectNamespace();
  57.         this.busta = busta;
  58.     }
  59.     public SDIValidatoreServizioRiceviFile(SDIValidazioneSemantica sdiValidazioneSemantica,
  60.             OpenSPCoop2Message msg,boolean isRichiesta,
  61.             SOAPElement sdiMessage,Busta busta){
  62.         this.sdiValidazioneSemantica = sdiValidazioneSemantica;
  63.         this.msg = msg;
  64.         this.isRichiesta = isRichiesta;
  65.         this.sdiMessage = sdiMessage;
  66.         this.namespace = ProjectInfo.getInstance().getProjectNamespace();
  67.         this.busta = busta;
  68.     }
  69.    
  70.     private boolean checkServiceNamespace() throws Exception{
  71.         if(this.namespace.equals(this.sdiMessage.getNamespaceURI())==false){
  72.             this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  73.                     "Namespace ["+this.sdiMessage.getNamespaceURI()+"] differente da quello atteso ["+this.namespace+"]"));
  74.             return false;  
  75.         }
  76.         return true;
  77.     }
  78.    
  79.    
  80.    
  81.    
  82.     /* ***** validaRiceviFile ***** */
  83.    
  84.     public void validaRiceviFile() throws Exception{
  85.        
  86.         if(checkServiceNamespace()==false){
  87.             return;
  88.         }
  89.        
  90.         if(this.sdiValidazioneSintattica!=null){
  91.             if(this.isRichiesta){
  92.                 throw new Exception("NotImplemented"); // l'engine non dovrebbe richiedere questo caso.
  93.             }
  94.             else{
  95.                 this._validazioneSintattica_RiceviFile_risposta();
  96.             }
  97.         }
  98.         else{
  99.             if(this.isRichiesta){
  100.                 throw new Exception("NotImplemented"); // l'engine non dovrebbe richiedere questo caso.
  101.             }
  102.             else{
  103.                 // non vi sono contenuti xml da validare
  104.             }
  105.         }
  106.     }
  107.    
  108.     private void _validazioneSintattica_RiceviFile_risposta() throws Exception{
  109.        
  110.         if(SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ROOT_ELEMENT.equals(this.sdiMessage.getLocalName())==false){
  111.             this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  112.                     "LocalName ["+this.sdiMessage.getLocalName()+"] differente da quello atteso ["+SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ROOT_ELEMENT+"]"));
  113.             return;
  114.         }
  115.        
  116.         List<SOAPElement> elementChilds = SoapUtils.getNotEmptyChildSOAPElement(this.sdiMessage);
  117.         if(elementChilds==null || elementChilds.size()<=0){
  118.             this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  119.                     "RootElement [{"+this.namespace+"}"+this.sdiMessage.getLocalName()+"] non contiene elementi"));
  120.             return;
  121.         }
  122.        
  123.         String identificativoSdI = null;
  124.         String data = null;
  125.         StringBuilder erroreSB = new StringBuilder();
  126.         for (int i = 0; i < elementChilds.size(); i++) {
  127.             SOAPElement child = elementChilds.get(i);
  128.    
  129.             if(SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_IDENTIFICATIVO_SDI.equals(child.getLocalName())){
  130.                 if(identificativoSdI!=null){
  131.                     this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  132.                             validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_PRESENTE_PIU_VOLTE));
  133.                     return;
  134.                 }
  135.                 if(child.getTextContent()==null){
  136.                     this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  137.                             validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_VALORIZZATO));
  138.                     return;
  139.                 }
  140.                 identificativoSdI = child.getTextContent();
  141.             }
  142.             else if(SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_DATA_ORA_RICEZIONE.equals(child.getLocalName())){
  143.                 if(data!=null){
  144.                     this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  145.                             validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  146.                             "Elemento ["+SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_DATA_ORA_RICEZIONE+"] presente piu' volte"));
  147.                     return;
  148.                 }
  149.                 if(child.getTextContent()==null){
  150.                     this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  151.                             validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  152.                             "Elemento ["+SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_DATA_ORA_RICEZIONE+"] non valorizzato"));
  153.                     return;
  154.                 }
  155.                 data = child.getTextContent();
  156.             }
  157.             else if(SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_ERRORE.equals(child.getLocalName())){
  158.                 if(erroreSB!=null && erroreSB.length()>0){
  159.                     this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  160.                             validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  161.                             "Elemento ["+SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_ERRORE+"] presente piu' volte"));
  162.                     return;
  163.                 }
  164.                 if(child.getTextContent()==null){
  165.                     this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  166.                             validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  167.                             "Elemento ["+SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_ERRORE+"] non valorizzato"));
  168.                     return;
  169.                 }
  170.                 String errore = child.getTextContent();
  171.                 if(errore!=null) {
  172.                     erroreSB.append(errore);
  173.                 }
  174.             }
  175.             else{
  176.                 this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  177.                         validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  178.                         "Element ["+child.getLocalName()+"] sconosciuto"));
  179.                 return;
  180.             }
  181.            
  182.             if(child.getNamespaceURI()!=null){
  183.                 this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  184.                         validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  185.                         "Element ["+child.getLocalName()+"] appartiene al namespace ("+child.getNamespaceURI()+"). Era atteso un elemento senza namespace"));
  186.                 return;
  187.             }
  188.         }
  189.        
  190.         // identificativoSDI
  191.         if(identificativoSdI==null){
  192.             this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  193.                     validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.IDENTIFICATIVO_MESSAGGIO_NON_PRESENTE));
  194.             return;
  195.         }
  196.        
  197.         // data
  198.         if(data==null){
  199.             this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  200.                     validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  201.                             "Elemento ["+SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_DATA_ORA_RICEZIONE+"] non presente"));
  202.             return;
  203.         }
  204.        
  205.         // errore
  206.         String errore = (erroreSB.length()>0) ? erroreSB.toString() : null;
  207.         if(errore!=null){
  208.             try{
  209.                 if(!ErroreInvioType.EI01.name().equals(errore) &&
  210.                         !ErroreInvioType.EI02.name().equals(errore) &&
  211.                         !ErroreInvioType.EI03.name().equals(errore) ){
  212.                     throw new Exception("Valore ["+errore+"] differente dai valori attesi: ["+ErroreInvioType.EI01.name()+","+ErroreInvioType.EI02.name()+","+ErroreInvioType.EI03.name()+"]");
  213.                 }
  214.             }catch(Exception e){
  215.                 this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  216.                         validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  217.                                 "Elemento ["+SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_ERRORE+"] non valido: "+e.getMessage(),e));
  218.                 return;
  219.             }
  220.            
  221.             String motivo = null;
  222.             if(ErroreInvioType.EI01.name().equals(errore)){
  223.                 motivo = "EI01 - FILE VUOTO";
  224.             }
  225.             else if(ErroreInvioType.EI02.name().equals(errore)){
  226.                 motivo = "EI02 - SERVIZIO NON DISPONIBILE";
  227.             }
  228.             else if(ErroreInvioType.EI03.name().equals(errore)){
  229.                 motivo = "EI03 - UTENTE NON ABILITATO";
  230.             }
  231.             this.sdiValidazioneSintattica.erroriValidazione.add(this.sdiValidazioneSintattica.
  232.                     validazioneUtils.newEccezioneValidazione(CodiceErroreCooperazione.FORMATO_CORPO_NON_CORRETTO,
  233.                             "Elemento ["+SDICostantiServizioRiceviFile.RICEVI_FILE_RISPOSTA_ELEMENT_ERRORE+"] indica uno stato del SdI in errore: "+motivo));
  234.         }
  235.                
  236.         // setto i valori sdi nella busta
  237.         this.busta.addProperty(SDICostanti.SDI_BUSTA_EXT_IDENTIFICATIVO_SDI, identificativoSdI);
  238.         this.busta.addProperty(SDICostanti.SDI_BUSTA_EXT_DATA_ORA_RICEZIONE, data);
  239.         if(errore!=null){
  240.             this.busta.addProperty(SDICostanti.SDI_BUSTA_EXT_ERRORE, errore);
  241.         }
  242.        
  243.        
  244.     }

  245. }