ExceptionSerialzerFileSystem.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.pdd.core.handlers.transazioni;

  21. import java.io.ByteArrayOutputStream;
  22. import java.util.Date;

  23. import org.openspcoop2.core.constants.Costanti;
  24. import org.openspcoop2.core.diagnostica.ElencoMessaggiDiagnostici;
  25. import org.openspcoop2.core.diagnostica.MessaggioDiagnostico;
  26. import org.openspcoop2.core.transazioni.DumpMessaggio;
  27. import org.openspcoop2.core.transazioni.Transazione;
  28. import org.openspcoop2.core.transazioni.TransazioneApplicativoServer;
  29. import org.openspcoop2.pdd.core.FileSystemSerializer;
  30. import org.openspcoop2.pdd.core.transazioni.Transaction;
  31. import org.openspcoop2.protocol.sdk.diagnostica.MsgDiagnostico;
  32. import org.openspcoop2.protocol.sdk.dump.Messaggio;
  33. import org.openspcoop2.utils.beans.WriteToSerializerType;
  34. import org.openspcoop2.utils.date.DateUtils;
  35. import org.slf4j.Logger;

  36. /**    
  37.  * ExceptionSerialzerFileSystem
  38.  *
  39.  * @author Poli Andrea (poli@link.it)
  40.  * @author $Author$
  41.  * @version $Rev$, $Date$
  42.  */
  43. public class ExceptionSerialzerFileSystem {

  44.     private Logger logger;
  45.     public ExceptionSerialzerFileSystem(Logger log){
  46.         this.logger = log;
  47.     }
  48.    
  49.     public void registrazioneFileSystem(Transazione transazione,String idTransazione){
  50.         // Registro transazioni non registrate su database su file system
  51.         try{
  52.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  53.             transazione.writeTo(bout, WriteToSerializerType.XML_JAXB);
  54.             bout.flush();
  55.             bout.close();
  56.             FileSystemSerializer.getInstance().registraTransazione(bout.toByteArray(), transazione.getDataIngressoRichiesta());
  57.         }catch(Throwable eSerializer){
  58.             this.logger.error("Errore durante la registrazione su file system della transazione ["+idTransazione+"]: "+eSerializer.getMessage(),eSerializer);
  59.         }
  60.     }
  61.    
  62.     public void registrazioneFileSystemDiagnosticiTracceDumpEmessiPdD(Transaction transaction,String idTransazione, Transazione transazioneDTO,
  63.             boolean registraTracciaRichiesta, boolean registraTracciaRisposta, boolean registrazioneMessaggiDiagnostici, boolean registrazioneDumpMessaggi){
  64.         if(registraTracciaRichiesta && transaction.getTracciaRichiesta()!=null){
  65.             // Registro tracce non registrate su database su file system
  66.             try{
  67.                 transaction.getTracciaRichiesta().addPropertyInBusta(Costanti.ID_TRANSAZIONE.getValue(), idTransazione);
  68.                 org.openspcoop2.core.tracciamento.Traccia tr = transaction.getTracciaRichiesta().getTraccia();
  69.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  70.                 tr.writeTo(bout, WriteToSerializerType.XML_JAXB);
  71.                 bout.flush();
  72.                 bout.close();
  73.                 FileSystemSerializer.getInstance().registraTraccia(bout.toByteArray(), tr.getOraRegistrazione());
  74.                 if(transazioneDTO!=null)
  75.                     transazioneDTO.setTracciaRichiesta(null);
  76.             }catch(Throwable eSerializer){
  77.                 this.logger.error("Errore durante la registrazione su file system della traccia di richiesta [idTransazione: "+idTransazione+"]: "+eSerializer.getMessage(),eSerializer);
  78.             }
  79.         }
  80.         if(registraTracciaRisposta && transaction.getTracciaRisposta()!=null){
  81.             // Registro tracce non registrate su database su file system
  82.             try{
  83.                 transaction.getTracciaRisposta().addPropertyInBusta(Costanti.ID_TRANSAZIONE.getValue(), idTransazione);
  84.                 org.openspcoop2.core.tracciamento.Traccia tr = transaction.getTracciaRisposta().getTraccia();
  85.                 ByteArrayOutputStream bout = new ByteArrayOutputStream();
  86.                 tr.writeTo(bout, WriteToSerializerType.XML_JAXB);
  87.                 bout.flush();
  88.                 bout.close();
  89.                 FileSystemSerializer.getInstance().registraTraccia(bout.toByteArray(), tr.getOraRegistrazione());
  90.                 if(transazioneDTO!=null)
  91.                     transazioneDTO.setTracciaRisposta(null);
  92.             }catch(Throwable eSerializer){
  93.                 this.logger.error("Errore durante la registrazione su file system della traccia di risposta [idTransazione: "+idTransazione+"]: "+eSerializer.getMessage(),eSerializer);
  94.             }
  95.         }
  96.         if(registrazioneMessaggiDiagnostici && transaction.getMsgDiagnostici()!=null && transaction.getMsgDiagnostici().size()>0){
  97.             boolean error = false;
  98.             boolean registrazioneSingoloDiagnostico = false;
  99.             if(registrazioneSingoloDiagnostico) {
  100.                 for (MsgDiagnostico msgDiag : transaction.getMsgDiagnostici()) {
  101.                     try{
  102.                         MessaggioDiagnostico msgDiagOp2 = msgDiag.getMessaggioDiagnostico();
  103.                         ByteArrayOutputStream bout = new ByteArrayOutputStream();
  104.                         msgDiagOp2.writeTo(bout, WriteToSerializerType.XML_JAXB);
  105.                         bout.flush();
  106.                         bout.close();
  107.                         FileSystemSerializer.getInstance().registraDiagnostico(bout.toByteArray(), msgDiagOp2.getOraRegistrazione());
  108.                     }catch(Throwable eSerializer){
  109.                         error = true;
  110.                         this.logger.error("Errore durante la registrazione su file system del messaggio diagnostico [idTransazione: "+idTransazione+"]: "+eSerializer.getMessage(),eSerializer);
  111.                     }
  112.                 }
  113.             }
  114.             else {
  115.                 ElencoMessaggiDiagnostici elencoDiagnostici = new ElencoMessaggiDiagnostici();
  116.                 Date oraRegistrazione = null;
  117.                 for (MsgDiagnostico msgDiag : transaction.getMsgDiagnostici()) {
  118.                     MessaggioDiagnostico msgDiagOp2 = msgDiag.getMessaggioDiagnostico();
  119.                     elencoDiagnostici.addMessaggioDiagnostico(msgDiagOp2);
  120.                     if(oraRegistrazione==null) {
  121.                         oraRegistrazione=msgDiagOp2.getOraRegistrazione();
  122.                     }
  123.                 }
  124.                 try{
  125.                     ByteArrayOutputStream bout = new ByteArrayOutputStream();
  126.                     elencoDiagnostici.writeTo(bout, WriteToSerializerType.XML_JAXB);
  127.                     bout.flush();
  128.                     bout.close();
  129.                     FileSystemSerializer.getInstance().registraDiagnostico(bout.toByteArray(), oraRegistrazione);
  130.                 }catch(Throwable eSerializer){
  131.                     error = true;
  132.                     this.logger.error("Errore durante la registrazione su file system dei messaggi diagnostici [idTransazione: "+idTransazione+"]: "+eSerializer.getMessage(),eSerializer);
  133.                 }
  134.             }
  135.             if(!error && transazioneDTO!=null){
  136.                 transazioneDTO.setDiagnostici(null);
  137.                 transazioneDTO.setDiagnosticiList1(null);
  138.                 transazioneDTO.setDiagnosticiList2(null);
  139.                 transazioneDTO.setDiagnosticiListExt(null);
  140.                 transazioneDTO.setDiagnosticiExt(null);
  141.             }
  142.         }
  143.         if(registrazioneDumpMessaggi && transaction.getMessaggi()!=null && transaction.getMessaggi().size()>0){
  144.             boolean error = false;
  145.             for (Messaggio messaggio : transaction.getMessaggi()) {
  146.                 try{
  147.                     DumpMessaggio messaggioOp2 = messaggio.toDumpMessaggio();
  148.                     ByteArrayOutputStream bout = new ByteArrayOutputStream();
  149.                     messaggioOp2.writeTo(bout, WriteToSerializerType.XML_JAXB);
  150.                     bout.flush();
  151.                     bout.close();
  152.                     FileSystemSerializer.getInstance().registraDump(bout.toByteArray(), messaggioOp2.getDumpTimestamp());
  153.                 }catch(Throwable eSerializer){
  154.                     error = true;
  155.                     this.logger.error("Errore durante la registrazione su file system del messaggio [idTransazione: "+idTransazione+"]: "+eSerializer.getMessage(),eSerializer);
  156.                 }
  157.                 finally {
  158.                     try {
  159.                         if(messaggio.getBody()!=null) {
  160.                             messaggio.getBody().unlock();
  161.                             messaggio.getBody().clearResources();
  162.                         }
  163.                     }catch(Throwable t){
  164.                         this.logger.error("Errore durante il rilascio delle risorse su del messaggio [idTransazione: "+idTransazione+"]: "+t.getMessage(),t);
  165.                     }
  166.                 }
  167.             }
  168.             if(!error && transazioneDTO!=null){
  169.                 transazioneDTO.getDumpMessaggioList().clear();
  170.             }
  171.         }
  172.     }
  173.    
  174.    
  175.     public void registrazioneFileSystemDiagnosticoEmessoPdD(MsgDiagnostico msgDiag, String idTransazione, String applicativoServer){
  176.         try{
  177.             MessaggioDiagnostico msgDiagOp2 = msgDiag.getMessaggioDiagnostico();
  178.            
  179.             // forzo
  180.             msgDiagOp2.setIdTransazione(idTransazione);
  181.             msgDiagOp2.setApplicativo(applicativoServer);
  182.            
  183.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  184.             msgDiagOp2.writeTo(bout, WriteToSerializerType.XML_JAXB);
  185.             bout.flush();
  186.             bout.close();
  187.             FileSystemSerializer.getInstance().registraDiagnostico(bout.toByteArray(), msgDiagOp2.getOraRegistrazione());
  188.         }catch(Throwable eSerializer){
  189.             this.logger.error("Errore durante la registrazione su file system del messaggio diagnostico [idTransazione: "+idTransazione+"][server: "+applicativoServer+"]: "+eSerializer.getMessage(),eSerializer);
  190.         }
  191.     }
  192.    
  193.     public void registrazioneFileSystemDumpEmessoPdD(Messaggio messaggio, String idTransazione, String applicativoServer, Date dataConsegna){
  194.         try{
  195.             DumpMessaggio messaggioOp2 = messaggio.toDumpMessaggio();
  196.            
  197.             // forzo
  198.             messaggio.setIdTransazione(idTransazione);
  199.             messaggio.setServizioApplicativoErogatore(applicativoServer);
  200.             messaggio.setDataConsegna(dataConsegna);
  201.            
  202.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  203.             messaggioOp2.writeTo(bout, WriteToSerializerType.XML_JAXB);
  204.             bout.flush();
  205.             bout.close();
  206.             FileSystemSerializer.getInstance().registraDump(bout.toByteArray(), messaggioOp2.getDumpTimestamp());
  207.         }catch(Throwable eSerializer){
  208.             this.logger.error("Errore durante la registrazione su file system del messaggio [idTransazione: "+idTransazione+"][server: "+applicativoServer+"][data:"+DateUtils.getSimpleDateFormatMs().format(dataConsegna)+"]: "+eSerializer.getMessage(),eSerializer);
  209.         }
  210.     }
  211.    
  212.     public void registrazioneFileSystemTransazioneApplicativoServerEmessoPdD(TransazioneApplicativoServer transazioneApplicativoServer, String idTransazione, String applicativoServer){
  213.         try{
  214.             // forzo
  215.             transazioneApplicativoServer.setIdTransazione(idTransazione);
  216.             transazioneApplicativoServer.setServizioApplicativoErogatore(applicativoServer);
  217.            
  218.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  219.             transazioneApplicativoServer.writeTo(bout, WriteToSerializerType.XML_JAXB);
  220.             bout.flush();
  221.             bout.close();
  222.             FileSystemSerializer.getInstance().registraTransazioneApplicativoServer(bout.toByteArray(), transazioneApplicativoServer.getDataAccettazioneRichiesta());
  223.         }catch(Throwable eSerializer){
  224.             this.logger.error("Errore durante la registrazione su file system dell'applicativo server [idTransazione: "+idTransazione+"][server: "+applicativoServer+"]: "+eSerializer.getMessage(),eSerializer);
  225.         }
  226.     }
  227.    
  228.     public void registrazioneFileSystemTransazioneApplicativoServerConsegnaTerminata(TransazioneApplicativoServer transazioneApplicativoServer, String idTransazione, String applicativoServer){
  229.         try{
  230.             // forzo
  231.             transazioneApplicativoServer.setIdTransazione(idTransazione);
  232.             transazioneApplicativoServer.setServizioApplicativoErogatore(applicativoServer);
  233.            
  234.             ByteArrayOutputStream bout = new ByteArrayOutputStream();
  235.             transazioneApplicativoServer.writeTo(bout, WriteToSerializerType.XML_JAXB);
  236.             bout.flush();
  237.             bout.close();
  238.             FileSystemSerializer.getInstance().registraTransazioneApplicativoServerConsegnaTerminata(bout.toByteArray(), transazioneApplicativoServer.getDataAccettazioneRichiesta());
  239.         }catch(Throwable eSerializer){
  240.             this.logger.error("Errore durante la registrazione su file system dell'informazione di consegna terminata [idTransazione: "+idTransazione+"][server: "+applicativoServer+"]: "+eSerializer.getMessage(),eSerializer);
  241.         }
  242.     }
  243. }