DettaglioEccezioneOpenSPCoop2Builder.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.builder;

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

  24. import org.openspcoop2.core.constants.TipoPdD;
  25. import org.openspcoop2.core.eccezione.details.Dettagli;
  26. import org.openspcoop2.core.eccezione.details.Dettaglio;
  27. import org.openspcoop2.core.eccezione.details.DettaglioEccezione;
  28. import org.openspcoop2.core.eccezione.details.Eccezione;
  29. import org.openspcoop2.core.eccezione.details.Eccezioni;
  30. import org.openspcoop2.core.eccezione.details.constants.TipoEccezione;
  31. import org.openspcoop2.core.id.IDSoggetto;
  32. import org.openspcoop2.message.config.IntegrationErrorReturnConfiguration;
  33. import org.openspcoop2.protocol.sdk.Busta;
  34. import org.openspcoop2.protocol.sdk.ProtocolException;
  35. import org.openspcoop2.protocol.sdk.builder.ProprietaErroreApplicativo;
  36. import org.openspcoop2.protocol.sdk.config.IProtocolManager;
  37. import org.openspcoop2.protocol.sdk.config.ITraduttore;
  38. import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
  39. import org.openspcoop2.protocol.sdk.constants.ContestoCodificaEccezione;
  40. import org.openspcoop2.protocol.sdk.constants.CostantiProtocollo;
  41. import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
  42. import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
  43. import org.openspcoop2.protocol.sdk.constants.MessaggiFaultErroreCooperazione;
  44. import org.openspcoop2.protocol.utils.ErroriProperties;
  45. import org.openspcoop2.utils.LoggerWrapperFactory;
  46. import org.openspcoop2.utils.date.DateManager;
  47. import org.slf4j.Logger;

  48. /**
  49.  * DettaglioEccezioneOpenSPCoop2Builder
  50.  *
  51.  * @author Poli Andrea (apoli@link.it)
  52.  * @author $Author$
  53.  * @version $Rev$, $Date$
  54.  */

  55. public class DettaglioEccezioneOpenSPCoop2Builder {

  56.     /** Logger utilizzato per debug. */
  57.     @SuppressWarnings("unused")
  58.     private Logger log = null;
  59.     private org.openspcoop2.protocol.sdk.IProtocolFactory<?> protocolFactory;
  60.     private ITraduttore traduttore;
  61.     private IProtocolManager protocolManager;
  62.     private ErroriProperties erroriProperties;

  63.     public DettaglioEccezioneOpenSPCoop2Builder(Logger aLog, org.openspcoop2.protocol.sdk.IProtocolFactory<?> protocolFactory) throws ProtocolException{
  64.         if(aLog!=null)
  65.             this.log = aLog;
  66.         else
  67.             this.log = LoggerWrapperFactory.getLogger(DettaglioEccezioneOpenSPCoop2Builder.class);
  68.         this.protocolFactory = protocolFactory;
  69.         this.traduttore = this.protocolFactory.createTraduttore();

  70.         this.protocolManager = this.protocolFactory.createProtocolManager();
  71.        
  72.         this.erroriProperties = ErroriProperties.getInstance(this.log);
  73.     }

  74.     public org.openspcoop2.protocol.sdk.IProtocolFactory<?> getProtocolFactory(){
  75.         return this.protocolFactory;
  76.     }





  77. //  public DettaglioEccezione buildDettaglioEccezione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione codErrore,String msgErrore,
  78. //          IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError)throws ProtocolException{
  79. //      return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo,
  80. //              this.traduttore.toString(codErrore, null, this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()),
  81. //              false,msgErrore, null, false, false,
  82. //              returnConfig, functionError);
  83. //  }
  84. //  public DettaglioEccezione buildDettaglioEccezioneProcessamentoBusta(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione codErrore,String msgErrore,
  85. //          Exception eProcessamento,
  86. //          IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError)throws ProtocolException{
  87. //      return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo,
  88. //              this.traduttore.toString(codErrore, null, this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()),
  89. //              false,msgErrore, eProcessamento, false, false,
  90. //              returnConfig, functionError);
  91. //  }
  92. //  public DettaglioEccezione buildDettaglioEccezioneIntegrazione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione codErrore,String msgErrore,
  93. //          Exception eProcessamento,boolean generaInformazioniGeneriche,
  94. //          IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError)throws ProtocolException{
  95. //      return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo,
  96. //              this.traduttore.toString(codErrore, null, this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()),
  97. //              false,msgErrore, eProcessamento, true, generaInformazioniGeneriche,
  98. //              returnConfig, functionError);
  99. //  }
  100.    
  101.     public DettaglioEccezione buildDettaglioEccezione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,ErroreIntegrazione errore,String msgErrore,
  102.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  103.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo,
  104.                 this.traduttore.toCodiceErroreIntegrazioneAsString(errore, null, this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()),
  105.                 false,msgErrore, null, false, false,
  106.                 returnConfig, functionError);
  107.     }
  108.     public DettaglioEccezione buildDettaglioEccezioneProcessamentoBusta(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,ErroreIntegrazione errore,String msgErrore,
  109.             Exception eProcessamento,
  110.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  111.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo,
  112.                 this.traduttore.toCodiceErroreIntegrazioneAsString(errore, null, this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()),
  113.                 false,msgErrore, eProcessamento, false, false,
  114.                 returnConfig, functionError);
  115.     }
  116.     public DettaglioEccezione buildDettaglioEccezioneIntegrazione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,ErroreIntegrazione errore,String msgErrore,
  117.             Exception eProcessamento,boolean generaInformazioniGeneriche,
  118.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  119.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo,
  120.                 this.traduttore.toCodiceErroreIntegrazioneAsString(errore, null, this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()),
  121.                 false,msgErrore, eProcessamento, true, generaInformazioniGeneriche,
  122.                 returnConfig, functionError);
  123.     }

  124.     public DettaglioEccezione buildDettaglioEccezione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,CodiceErroreCooperazione codErrore,String msgErrore,
  125.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  126.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo, this.protocolFactory.createTraduttore().toString(codErrore), true, msgErrore, null, false, false,
  127.                 returnConfig, functionError);
  128.     }
  129.     public DettaglioEccezione buildDettaglioEccezioneProcessamentoBusta(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,CodiceErroreCooperazione codErrore,String msgErrore,
  130.             Exception eProcessamento,
  131.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  132.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo, this.protocolFactory.createTraduttore().toString(codErrore), true, msgErrore,
  133.                 eProcessamento, false, false,
  134.                 returnConfig, functionError);
  135.     }
  136.     public DettaglioEccezione buildDettaglioEccezioneIntegrazione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,CodiceErroreCooperazione codErrore,String msgErrore,
  137.             Exception eProcessamento,boolean generaInformazioniGeneriche,
  138.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  139.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo, this.protocolFactory.createTraduttore().toString(codErrore), true, msgErrore,
  140.                 eProcessamento, true, generaInformazioniGeneriche,
  141.                 returnConfig, functionError);
  142.     }

  143.     public DettaglioEccezione buildDettaglioEccezione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,String codErrore,String msgErrore,boolean isErroreProtocollo,
  144.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  145.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo, codErrore, isErroreProtocollo, msgErrore, null, false, false,
  146.                 returnConfig, functionError);
  147.     }
  148.     public DettaglioEccezione buildDettaglioEccezioneProcessamentoBusta(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,String codErrore,String msgErrore,boolean isErroreProtocollo,
  149.             Exception eProcessamento,
  150.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  151.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo, codErrore, isErroreProtocollo,msgErrore, eProcessamento, false, false,
  152.                 returnConfig, functionError);
  153.     }
  154.     public DettaglioEccezione buildDettaglioEccezioneIntegrazione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,String codErrore,String msgErrore,boolean isErroreProtocollo,
  155.             Exception eProcessamento,boolean generaInformazioniGeneriche,
  156.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  157.         return buildDettaglioEccezione_engineBuildEccezione(identitaPdD, tipoPdD, modulo, codErrore, isErroreProtocollo,msgErrore, eProcessamento, true, generaInformazioniGeneriche,
  158.                 returnConfig, functionError);
  159.     }

  160.     private DettaglioEccezione buildDettaglioEccezione_engineBuildEccezione(IDSoggetto identitaPdD, TipoPdD tipoPdD,String modulo,String codErrore,boolean isErroreProtocollo,String msgErrore,
  161.             Exception eProcessamento,boolean isIntegrazione,boolean generaInformazioniGeneriche,
  162.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  163.         org.openspcoop2.core.eccezione.details.Eccezione eccezione = new org.openspcoop2.core.eccezione.details.Eccezione();
  164.         if(isErroreProtocollo){
  165.             eccezione.setType(TipoEccezione.PROTOCOL);
  166.         }else{
  167.             eccezione.setType(TipoEccezione.INTEGRATION);
  168.         }
  169.         eccezione.setCode(codErrore);
  170.         eccezione.setDescription(msgErrore);        
  171.         return buildDettaglioEccezione_engine(DateManager.getDate(), identitaPdD, tipoPdD , modulo, eccezione, null,
  172.                 eProcessamento, isIntegrazione, generaInformazioniGeneriche,
  173.                 returnConfig, functionError);
  174.     }

  175.     public DettaglioEccezione buildDettaglioEccezione(Date oraRegistrazione, IDSoggetto identitaPdD, TipoPdD tipoPdD,  String modulo, Eccezione eccezione, Dettaglio dettaglio,
  176.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  177.         return buildDettaglioEccezione_engine(oraRegistrazione, identitaPdD, tipoPdD, modulo, eccezione, dettaglio, null, false, false,
  178.                 returnConfig, functionError);
  179.     }
  180.     public DettaglioEccezione buildDettaglioEccezioneProcessamentoBusta(Date oraRegistrazione, IDSoggetto identitaPdD,TipoPdD tipoPdD,  String modulo, Eccezione eccezione, Dettaglio dettaglio,
  181.             Exception eProcessamento,
  182.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  183.         return buildDettaglioEccezione_engine(oraRegistrazione, identitaPdD, tipoPdD, modulo, eccezione, dettaglio, eProcessamento, false, false,
  184.                 returnConfig, functionError);
  185.     }
  186.     public DettaglioEccezione buildDettaglioEccezioneIntegrazione(Date oraRegistrazione, IDSoggetto identitaPdD,TipoPdD tipoPdD,  String modulo, Eccezione eccezione, Dettaglio dettaglio,
  187.             Exception eProcessamento,boolean generaInformazioniGeneriche,
  188.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{
  189.         return buildDettaglioEccezione_engine(oraRegistrazione, identitaPdD, tipoPdD, modulo, eccezione, dettaglio, eProcessamento, true, generaInformazioniGeneriche,
  190.                 returnConfig, functionError);
  191.     }

  192.     private DettaglioEccezione buildDettaglioEccezione_engine(Date oraRegistrazione, IDSoggetto identitaPdD,TipoPdD tipoPdD, String modulo, Eccezione eccezione, Dettaglio dettaglio,
  193.             Exception eProcessamento,boolean isIntegrazione,boolean generaInformazioniGeneriche,
  194.             IntegrationErrorReturnConfiguration returnConfig, IntegrationFunctionError functionError) throws ProtocolException{

  195.         DettaglioEccezione dettaglioEccezione = DaoBuilder.buildDettaglioEccezione(oraRegistrazione, identitaPdD, tipoPdD, modulo, eccezione, dettaglio,
  196.                 returnConfig, functionError, this.erroriProperties);

  197.         if(eProcessamento!=null){
  198.             if(isIntegrazione){
  199.                 gestioneDettaglioEccezioneIntegrazione(eProcessamento, dettaglioEccezione, generaInformazioniGeneriche);
  200.             }else{
  201.                 gestioneDettaglioEccezioneProcessamento(eProcessamento, dettaglioEccezione);
  202.             }
  203.         }

  204.         return dettaglioEccezione;
  205.     }


  206.     // METODO CHIAMATO SOLO DALLA PDD EROGATORE PER GENERARE IL DETTAGLIO DI UNA BUSTA ERRORE
  207.     public DettaglioEccezione buildDettaglioEccezioneFromBusta(IDSoggetto identitaPdD,TipoPdD tipoPdD,
  208.             String modulo,
  209.             String servizioApplicativoErogatore,
  210.             Busta busta,
  211.             Throwable eProcessamento) throws ProtocolException{

  212.         DettaglioEccezione dettaglioEccezione = new DettaglioEccezione();

  213.         // info generali
  214.         dettaglioEccezione.setTimestamp(DateManager.getDate());
  215.         dettaglioEccezione.setDomain(DaoBuilder.buildDominio(identitaPdD, tipoPdD, modulo));

  216.         // eccezioni buste
  217.         for (int i = 0; i < busta.sizeListaEccezioni(); i++) {

  218.             org.openspcoop2.protocol.sdk.Eccezione e = busta.getEccezione(i);

  219.             org.openspcoop2.core.eccezione.details.Eccezione eccezione = new org.openspcoop2.core.eccezione.details.Eccezione();
  220.             eccezione.setType(TipoEccezione.PROTOCOL);
  221.             eccezione.setCode(e.getCodiceEccezioneValue(this.protocolFactory));
  222.             eccezione.setSeverity(e.getRilevanzaValue(this.protocolFactory));
  223.             if(this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()){
  224.                 eccezione.setDescription(this.transformFaultMsg(e.getCodiceEccezione(), e.getDescrizione(this.protocolFactory)));
  225.                 eccezione.setContext(this.protocolFactory.createTraduttore().toString(ContestoCodificaEccezione.PROCESSAMENTO));
  226.             }
  227.             else{
  228.                 eccezione.setDescription(e.getDescrizione(this.protocolFactory));
  229.                 eccezione.setContext(this.protocolFactory.createTraduttore().toString(e.getContestoCodifica()));
  230.             }

  231.             if(dettaglioEccezione.getExceptions()==null){
  232.                 dettaglioEccezione.setExceptions(new Eccezioni());
  233.             }
  234.             dettaglioEccezione.getExceptions().addException(eccezione);
  235.         }

  236.         // dettagli
  237.         if(this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()==false){
  238.             if(servizioApplicativoErogatore!=null){
  239.                 Dettaglio detail = new Dettaglio();
  240.                 detail.setType("servizioApplicativo");
  241.                 detail.setBase(servizioApplicativoErogatore);
  242.                 if(dettaglioEccezione.getDetails()==null){
  243.                     dettaglioEccezione.setDetails(new Dettagli());
  244.                 }
  245.                 dettaglioEccezione.getDetails().addDetail(detail);
  246.             }  
  247.         }
  248.         gestioneDettaglioEccezioneProcessamento(eProcessamento, dettaglioEccezione);

  249.         return dettaglioEccezione;
  250.     }


  251.     public void gestioneDettaglioEccezioneIntegrazione(Throwable eProcessamento,DettaglioEccezione dettaglioEccezione,boolean generaInformazioniGeneriche){
  252.         gestioneDettaglioEccezioneProcessamento_engine(eProcessamento, dettaglioEccezione,
  253.                 this.protocolManager.isGenerazioneDetailsFaultIntegrationeConStackTrace(),
  254.                 generaInformazioniGeneriche);
  255.     }
  256.     public void gestioneDettaglioEccezioneProcessamento(Throwable eProcessamento,DettaglioEccezione dettaglioEccezione){
  257.         gestioneDettaglioEccezioneProcessamento_engine(eProcessamento, dettaglioEccezione,
  258.                 this.protocolManager.isGenerazioneDetailsFaultProtocolloConStackTrace(),
  259.                 this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche());
  260.     }
  261.     private void gestioneDettaglioEccezioneProcessamento_engine(Throwable eProcessamento,DettaglioEccezione dettaglioEccezione,
  262.             boolean generaStackTrace,boolean generaInformazioniGeneriche){
  263.         if(eProcessamento!=null){

  264.             if(generaInformazioniGeneriche){

  265.                 Dettaglio detail = new Dettaglio();
  266.                 detail.setType("causa");

  267.                 String msg = null;
  268.                 if(eProcessamento.getMessage()!=null){
  269.                     msg = eProcessamento.getMessage();
  270.                 }else{
  271.                     msg = eProcessamento.toString();
  272.                 }
  273.                 //System.out.println("MESSAGE ["+msg+"]");
  274.                 // faccio viaggiare solo le informazioni che ritengo pubbliche
  275.                 if("Connection refused".equals(msg)){
  276.                     msg = "Connection refused";
  277.                     detail.setBase(msg);
  278.                     if(dettaglioEccezione.getDetails()==null){
  279.                         dettaglioEccezione.setDetails(new Dettagli());
  280.                     }
  281.                     dettaglioEccezione.getDetails().addDetail(detail);          
  282.                 }else if("Read timed out".equals(msg)){
  283.                     msg = "Read timed out";
  284.                     detail.setBase(msg);
  285.                     if(dettaglioEccezione.getDetails()==null){
  286.                         dettaglioEccezione.setDetails(new Dettagli());
  287.                     }
  288.                     dettaglioEccezione.getDetails().addDetail(detail);  
  289.                 }else if("connect timed out".equals(msg)){
  290.                     msg = "Connect timed out";
  291.                     detail.setBase(msg);
  292.                     if(dettaglioEccezione.getDetails()==null){
  293.                         dettaglioEccezione.setDetails(new Dettagli());
  294.                     }
  295.                     dettaglioEccezione.getDetails().addDetail(detail);  
  296.                 }

  297.             }else{

  298.                 Dettaglio detail = new Dettaglio();
  299.                 detail.setType("causa");

  300.                 if(eProcessamento.getMessage()!=null)
  301.                     detail.setBase(eProcessamento.getMessage());
  302.                 else
  303.                     detail.setBase(eProcessamento.toString());
  304.                 if(dettaglioEccezione.getDetails()==null){
  305.                     dettaglioEccezione.setDetails(new Dettagli());
  306.                 }
  307.                 dettaglioEccezione.getDetails().addDetail(detail);

  308.                 if(eProcessamento.getCause()!=null){
  309.                     gestioneDettaglioEccezioneProcessamento_engine_InnerException(eProcessamento.getCause(), dettaglioEccezione);
  310.                 }

  311.                 if(generaStackTrace){
  312.                     Dettaglio detailStackTrace = new Dettaglio();
  313.                     detailStackTrace.setType("stackTrace");
  314.                     ByteArrayOutputStream bout = new ByteArrayOutputStream();
  315.                     PrintWriter pWriter = new PrintWriter(bout);
  316.                     eProcessamento.printStackTrace(pWriter);
  317.                     try{
  318.                         bout.flush();
  319.                         pWriter.flush();
  320.                         pWriter.close();
  321.                         bout.close();
  322.                     }catch(Exception eClose){
  323.                         System.err.println("ERRORE buildEccezioneProcessamentoFromBusta: "+eClose.getMessage());
  324.                     }
  325.                     detailStackTrace.setBase(bout.toString());
  326.                     if(dettaglioEccezione.getDetails()==null){
  327.                         dettaglioEccezione.setDetails(new Dettagli());
  328.                     }
  329.                     dettaglioEccezione.getDetails().addDetail(detailStackTrace);
  330.                 }
  331.             }
  332.         }
  333.     }
  334.     private void gestioneDettaglioEccezioneProcessamento_engine_InnerException(Throwable e,DettaglioEccezione dettaglioEccezione){
  335.         if(e!=null){
  336.             Dettaglio detail = new Dettaglio();
  337.             detail.setType("causato da");
  338.             if(e.getMessage()!=null)
  339.                 detail.setBase(e.getMessage());
  340.             else
  341.                 detail.setBase(e.toString());
  342.             if(dettaglioEccezione.getDetails()==null){
  343.                 dettaglioEccezione.setDetails(new Dettagli());
  344.             }
  345.             dettaglioEccezione.getDetails().addDetail(detail);

  346.             if(e.getCause()!=null){
  347.                 gestioneDettaglioEccezioneProcessamento_engine_InnerException(e.getCause(), dettaglioEccezione);
  348.             }
  349.         }
  350.     }




  351.     public Eccezione buildEccezione(String codice, String descrizione, String rilevanza, String contesto, boolean isErroreProtocollo){
  352.         return DaoBuilder.buildEccezione(codice, descrizione, rilevanza, contesto, isErroreProtocollo);
  353.     }

  354.     public Dettaglio buildDettagio(String tipo, String base){
  355.         Dettaglio dettaglio = new Dettaglio();
  356.         dettaglio.setType(tipo);
  357.         dettaglio.setBase(base);
  358.         return dettaglio;
  359.     }




  360.     public String transformFaultMsg(CodiceErroreCooperazione code,String msg) throws ProtocolException{
  361.         if(this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()){
  362.             if(code.equals(CodiceErroreCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO)){
  363.                 //errore di processamento.
  364.                 // Lascio intatto solo il msg di ServizioApplicativo non disponibile
  365.                 if(!CostantiProtocollo.SERVIZIO_APPLICATIVO_NON_DISPONIBILE.equals(msg)){
  366.                     return MessaggiFaultErroreCooperazione.FAULT_STRING_PROCESSAMENTO_SENZA_CODICE.toString(this.protocolFactory);
  367.                 }
  368.             }
  369.         }
  370.         return msg;
  371.     }

  372.     public String transformFaultMsg(ErroreIntegrazione errore) throws ProtocolException{
  373.         if(this.protocolManager.isGenerazioneDetailsFaultProtocolloConInformazioniGeneriche()){
  374.             //  Mi appoggio a questa utility
  375.             ProprietaErroreApplicativo pErroreApplicativo = new ProprietaErroreApplicativo();
  376.             pErroreApplicativo.setFaultAsGenericCode(true);
  377.             return pErroreApplicativo.transformFaultMsg(errore,this.protocolFactory);
  378.         }
  379.         return errore.getDescrizione(this.protocolFactory);
  380.     }
  381. }