RicezioneBusteServiceUtils.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.services.service;

  21. import java.util.Date;
  22. import java.util.HashMap;
  23. import java.util.List;
  24. import java.util.Map;

  25. import javax.servlet.http.HttpServletRequest;

  26. import org.apache.commons.lang.StringUtils;
  27. import org.openspcoop2.core.config.CorsConfigurazione;
  28. import org.openspcoop2.core.config.PortaApplicativa;
  29. import org.openspcoop2.core.config.ServizioApplicativo;
  30. import org.openspcoop2.core.config.constants.StatoFunzionalita;
  31. import org.openspcoop2.core.config.constants.TipoGestioneCORS;
  32. import org.openspcoop2.core.constants.TipoPdD;
  33. import org.openspcoop2.core.id.IDPortaApplicativa;
  34. import org.openspcoop2.core.id.IDServizio;
  35. import org.openspcoop2.core.id.IDServizioApplicativo;
  36. import org.openspcoop2.core.id.IDSoggetto;
  37. import org.openspcoop2.core.registry.PortaDominio;
  38. import org.openspcoop2.core.registry.Soggetto;
  39. import org.openspcoop2.core.transazioni.utils.PropertiesSerializator;
  40. import org.openspcoop2.message.OpenSPCoop2Message;
  41. import org.openspcoop2.message.config.ServiceBindingConfiguration;
  42. import org.openspcoop2.message.constants.MessageType;
  43. import org.openspcoop2.message.constants.ServiceBinding;
  44. import org.openspcoop2.message.soap.reader.OpenSPCoop2MessageSoapStreamReader;
  45. import org.openspcoop2.pdd.config.CachedConfigIntegrationReader;
  46. import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
  47. import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
  48. import org.openspcoop2.pdd.core.CostantiPdD;
  49. import org.openspcoop2.pdd.core.GestoreRichieste;
  50. import org.openspcoop2.pdd.core.PdDContext;
  51. import org.openspcoop2.pdd.core.handlers.GestoreHandlers;
  52. import org.openspcoop2.pdd.core.handlers.PostOutResponseContext;
  53. import org.openspcoop2.pdd.core.handlers.transazioni.PreInRequestHandler;
  54. import org.openspcoop2.pdd.core.transazioni.Transaction;
  55. import org.openspcoop2.pdd.core.transazioni.TransactionContext;
  56. import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
  57. import org.openspcoop2.pdd.logger.MsgDiagnostico;
  58. import org.openspcoop2.pdd.services.OpenSPCoop2Startup;
  59. import org.openspcoop2.pdd.services.connector.ConnectorDispatcherInfo;
  60. import org.openspcoop2.pdd.services.connector.ConnectorDispatcherUtils;
  61. import org.openspcoop2.pdd.services.connector.ConnectorException;
  62. import org.openspcoop2.pdd.services.connector.messages.ConnectorInMessage;
  63. import org.openspcoop2.pdd.services.connector.messages.ConnectorOutMessage;
  64. import org.openspcoop2.pdd.services.core.RicezioneBusteContext;
  65. import org.openspcoop2.pdd.services.error.RicezioneBusteExternalErrorGenerator;
  66. import org.openspcoop2.protocol.basic.registry.IdentificazionePortaApplicativa;
  67. import org.openspcoop2.protocol.basic.registry.ServiceIdentificationReader;
  68. import org.openspcoop2.protocol.registry.RegistroServiziManager;
  69. import org.openspcoop2.protocol.sdk.IProtocolFactory;
  70. import org.openspcoop2.protocol.sdk.builder.EsitoTransazione;
  71. import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
  72. import org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName;
  73. import org.openspcoop2.protocol.sdk.constants.IDService;
  74. import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
  75. import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
  76. import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
  77. import org.openspcoop2.protocol.sdk.state.IState;
  78. import org.openspcoop2.protocol.sdk.state.RequestInfo;
  79. import org.openspcoop2.protocol.sdk.state.RequestInfoConfigUtilities;
  80. import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
  81. import org.openspcoop2.utils.date.DateManager;
  82. import org.openspcoop2.utils.transport.TransportUtils;
  83. import org.openspcoop2.utils.transport.http.ContentTypeUtilities;
  84. import org.openspcoop2.utils.transport.http.HttpConstants;
  85. import org.openspcoop2.utils.transport.http.HttpRequestMethod;
  86. import org.slf4j.Logger;

  87. /**
  88.  * RicezioneBusteServiceUtils
  89.  *
  90.  * @author Poli Andrea (apoli@link.it)
  91.  * @author $Author$
  92.  * @version $Rev$, $Date$
  93.  */
  94. public class RicezioneBusteServiceUtils {

  95.     public static RicezionePropertiesConfig readPropertiesConfig(RequestInfo requestInfo, Logger logCore, IState state) {
  96.         if (requestInfo != null && requestInfo.getProtocolContext() != null && requestInfo.getProtocolContext().getInterfaceName() != null && !"".equals(requestInfo.getProtocolContext().getInterfaceName())) {
  97.             try {
  98.                 ConfigurazionePdDManager configurazionePdDManager = ConfigurazionePdDManager.getInstance(state);
  99.                 RegistroServiziManager registroServiziManager = RegistroServiziManager.getInstance(state);
  100.                 IDPortaApplicativa idPA = new IDPortaApplicativa();
  101.                 idPA.setNome(requestInfo.getProtocolContext().getInterfaceName());
  102.                 PortaApplicativa pa = configurazionePdDManager.getPortaApplicativaSafeMethod(idPA, requestInfo);
  103.                 if (pa != null) {
  104.                     RicezionePropertiesConfig config = new RicezionePropertiesConfig();
  105.                    
  106.                     config.setApiImplementation(configurazionePdDManager.getProprietaConfigurazione(pa));
  107.                    
  108.                     IDSoggetto idSoggettoProprietario = new IDSoggetto(pa.getTipoSoggettoProprietario(), pa.getNomeSoggettoProprietario());
  109.                     Soggetto soggetto = registroServiziManager.getSoggetto(idSoggettoProprietario, null, requestInfo);
  110.                     config.setSoggettoErogatore(registroServiziManager.getProprietaConfigurazione(soggetto));
  111.                    
  112.                     return config;
  113.                 }              
  114.             } catch (Exception e) {
  115.                 logCore.error("Errore durante la lettura delle proprietà di configurazione della porta applicativa [" + requestInfo.getProtocolContext().getInterfaceName() + "]: " + e.getMessage(), e);
  116.             }

  117.             return null;
  118.         } else {
  119.             return null;
  120.         }
  121.     }
  122.    
  123.     public static ConnectorDispatcherInfo updatePortaApplicativaRequestInfo(RequestInfo requestInfo, Logger logCore,
  124.             ConnectorInMessage req, ConnectorOutMessage res, RicezioneBusteExternalErrorGenerator generatoreErrore,
  125.             ServiceIdentificationReader serviceIdentificationReader,
  126.             MsgDiagnostico msgDiag, PdDContext pddContextNullable) throws ConnectorException{
  127.        
  128.         URLProtocolContext protocolContext = requestInfo.getProtocolContext();
  129.         ServiceBindingConfiguration bindingConfig = requestInfo.getBindingConfig();

  130.         IDPortaApplicativa idPA = null;
  131.         try{
  132.             if(requestInfo.getRequestConfig()!=null && requestInfo.getRequestConfig().getIdPortaApplicativaDefault()!=null) {
  133.                 idPA = requestInfo.getRequestConfig().getIdPortaApplicativaDefault();
  134.             }
  135.             else {
  136.                 idPA = serviceIdentificationReader.findPortaApplicativa(protocolContext, true);
  137.                 if(requestInfo.getRequestConfig()!=null) {
  138.                     requestInfo.getRequestConfig().setIdPortaApplicativaDefault(idPA);
  139.                 }
  140.             }
  141.         }catch(RegistryNotFound notFound){
  142.             if(bindingConfig.existsContextUrlMapping()==false){
  143.                 if(pddContextNullable!=null) {
  144.                     pddContextNullable.addObject(org.openspcoop2.core.constants.Costanti.API_NON_INDIVIDUATA, "true");
  145.                 }
  146.                 logCore.error("Porta Applicativa non trovata: "+notFound.getMessage(),notFound);
  147.                 msgDiag.addKeywordErroreProcessamento(notFound);
  148.                 msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
  149.                 ConnectorDispatcherInfo c = ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore, serviceIdentificationReader.getErroreIntegrazioneNotFound(),
  150.                         IntegrationFunctionError.API_IN_UNKNOWN, notFound, null, res, logCore, ConnectorDispatcherUtils.CLIENT_ERROR);
  151.                 try {
  152.                     EsitoTransazione esito = requestInfo.getProtocolFactory().createEsitoBuilder().getEsito(requestInfo.getProtocolContext(),EsitoTransazioneName.API_NON_INDIVIDUATA);
  153.                     c.setEsitoTransazione(esito);
  154.                 }catch(Throwable t) {
  155.                     logCore.error("Errore durante l'impostazione dell'esito 'API_NON_INDIVIDUATA'");
  156.                 }
  157.                 return c;
  158.             }
  159.         }
  160.         if(idPA!=null){
  161.             return updatePortaApplicativaRequestInfo(requestInfo, logCore,
  162.                     null, req, res, generatoreErrore,
  163.                     serviceIdentificationReader,
  164.                     msgDiag,
  165.                     protocolContext,idPA, pddContextNullable);
  166.         }
  167.        
  168.         return null;
  169.     }
  170.    
  171.     public static ConnectorDispatcherInfo updatePortaApplicativaRequestInfo(RequestInfo requestInfo, Logger logCore,
  172.             OpenSPCoop2Message requestMessage,
  173.             RicezioneBusteExternalErrorGenerator generatoreErrore,
  174.             ServiceIdentificationReader serviceIdentificationReader,
  175.             MsgDiagnostico msgDiag,
  176.             URLProtocolContext protocolContext, IDPortaApplicativa idPA, PdDContext pddContextNullable) throws ConnectorException{
  177.         return updatePortaApplicativaRequestInfo(requestInfo, logCore,
  178.                 requestMessage, null, null, generatoreErrore,
  179.                 serviceIdentificationReader,
  180.                 msgDiag,
  181.                 protocolContext, idPA, pddContextNullable);
  182.     }
  183.     private static ConnectorDispatcherInfo updatePortaApplicativaRequestInfo(RequestInfo requestInfo, Logger logCore,
  184.             OpenSPCoop2Message requestMessage, ConnectorInMessage req, ConnectorOutMessage res, RicezioneBusteExternalErrorGenerator generatoreErrore,
  185.             ServiceIdentificationReader serviceIdentificationReader,
  186.             MsgDiagnostico msgDiag,
  187.             URLProtocolContext protocolContext, IDPortaApplicativa idPA, PdDContext pddContextNullable) throws ConnectorException{

  188.            
  189.         // da ora in avanti, avendo localizzato una PA, se avviene un errore genero l'errore stesso
  190.         protocolContext.setInterfaceName(idPA.getNome());
  191.         if(protocolContext.getFunctionParameters()==null) {
  192.             protocolContext.setFunctionParameters(idPA.getNome());
  193.         }
  194.        
  195.         if(requestInfo==null) {
  196.             throw new ConnectorException("Param requestInfo is null");
  197.         }
  198.        
  199.         IProtocolFactory<?> pf = requestInfo.getProtocolFactory();
  200.         ServiceBindingConfiguration bindingConfig = requestInfo.getBindingConfig();
  201.         ServiceBinding integrationServiceBinding = requestInfo.getIntegrationServiceBinding();
  202.         ServiceBinding protocolServiceBinding = requestInfo.getProtocolServiceBinding();
  203.        
  204.         // read IDServizio
  205.         IDServizio idServizio = null;
  206.         if(requestInfo.getRequestConfig()!=null && requestInfo.getRequestConfig().getIdServizio()!=null) {
  207.             idServizio = requestInfo.getRequestConfig().getIdServizio().clone(); // effettuo clone altrimenti viene cambiato dopo e la modifica potrebbe risultare anche in altri thread
  208.         }
  209.         else {
  210.             if(idPA.getIdentificativiErogazione()!=null){
  211.                 if(idPA.getIdentificativiErogazione().getIdServizio()!=null) {
  212.                     idServizio = idPA.getIdentificativiErogazione().getIdServizio().clone(); // effettuo clone altrimenti nella cache viene memorizzata l'azione impostata dopo!
  213.                 }
  214.             }
  215.            
  216.             if(idServizio==null){
  217.                 try{
  218.                     idServizio = serviceIdentificationReader.convertToIDServizio(idPA);
  219.                     if(idServizio!=null) {
  220.                         idServizio = idServizio.clone(); // effettuo clone altrimenti nella cache viene memorizzata l'azione impostata dopo!
  221.                     }
  222.                 }catch(RegistryNotFound notFound){
  223.                     if(res!=null) {
  224.                         logCore.debug("Conversione Dati PortaDelegata in identificativo servizio fallita (notFound): "+notFound.getMessage(),notFound);
  225.                         msgDiag.addKeywordErroreProcessamento(notFound);
  226.                         msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
  227.                         return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore, serviceIdentificationReader.getErroreIntegrazioneNotFound(),
  228.                                 IntegrationFunctionError.API_IN_UNKNOWN, notFound, null, res, logCore, ConnectorDispatcherUtils.CLIENT_ERROR);
  229.                     }
  230.                     return null;
  231.                 }
  232.             }
  233.            
  234.             if(requestInfo.getRequestConfig()!=null) {
  235.                 requestInfo.getRequestConfig().setIdServizio(idServizio);
  236.             }
  237.         }
  238.        
  239.         ConfigurazionePdDManager configurazionePdDManager = ConfigurazionePdDManager.getInstance();
  240.                
  241.         PortaApplicativa paDefault = null;
  242.         if(idServizio!=null){
  243.            
  244.             CachedConfigIntegrationReader configIntegrationReader = (CachedConfigIntegrationReader) serviceIdentificationReader.getConfigIntegrationReader();
  245.             IRegistryReader registryReader = serviceIdentificationReader.getRegistryReader();
  246.             RegistroServiziManager registroServiziManager = RegistroServiziManager.getInstance();
  247.            
  248.             // Aggiorno service binding rispetto al servizio localizzato
  249.             try{
  250.                 integrationServiceBinding = pf.createProtocolConfiguration().getIntegrationServiceBinding(idServizio, registryReader);
  251.                 requestInfo.setIntegrationServiceBinding(integrationServiceBinding);
  252.                
  253.                 protocolServiceBinding = pf.createProtocolConfiguration().getProtocolServiceBinding(integrationServiceBinding, protocolContext);
  254.                 requestInfo.setProtocolServiceBinding(protocolServiceBinding);
  255.                
  256.                 generatoreErrore.updateServiceBinding(protocolServiceBinding);
  257.             }catch(RegistryNotFound notFound){
  258.                 if(res!=null) {
  259.                     logCore.debug("Lettura ServiceBinding fallita (notFound): "+notFound.getMessage(),notFound);
  260.                     msgDiag.addKeywordErroreProcessamento(notFound);
  261.                     msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
  262.                     return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  263.                             ErroriIntegrazione.ERRORE_405_SERVIZIO_NON_TROVATO.getErroreIntegrazione(),
  264.                             IntegrationFunctionError.API_IN_UNKNOWN, notFound, null, res, logCore, ConnectorDispatcherUtils.CLIENT_ERROR);
  265.                 }
  266.                 return null;
  267.             }catch(Exception error){
  268.                 if(res!=null) {
  269.                     logCore.error("Lettura ServiceBinding fallita: "+error.getMessage(),error);
  270.                     msgDiag.addKeywordErroreProcessamento(error);
  271.                     msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
  272.                     return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  273.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento("Lettura ServiceBinding fallita"),
  274.                             IntegrationFunctionError.INTERNAL_REQUEST_ERROR, error, null, res, logCore, ConnectorDispatcherUtils.GENERAL_ERROR);
  275.                 }
  276.                 return null;
  277.             }
  278.            
  279.             // Provo ad ottenere il reader soap
  280.             OpenSPCoop2MessageSoapStreamReader soapStreamReader = null;
  281.             if(ServiceBinding.SOAP.equals(protocolServiceBinding)) {
  282.                 try{
  283.                     if(req!=null) {
  284.                         soapStreamReader = req.getSoapReader();
  285.                     }
  286.                     else if(requestMessage!=null && ServiceBinding.SOAP.equals(requestMessage.getServiceBinding())) {
  287.                         soapStreamReader = requestMessage.castAsSoap().getSoapReader();
  288.                     }
  289.                 }catch(Exception e){
  290.                     logCore.debug("SOAPStream lettura non riuscita: "+e.getMessage(),e);
  291.                 }
  292.             }
  293.            
  294.             // PortaApplicativa Default
  295.             try{
  296.                 if(requestInfo.getRequestConfig()!=null && requestInfo.getRequestConfig().getPortaApplicativaDefault()!=null) {
  297.                     paDefault = requestInfo.getRequestConfig().getPortaApplicativaDefault();
  298.                 }
  299.                 else {
  300.                     paDefault = configurazionePdDManager.getPortaApplicativaSafeMethod(idPA, null); // passo null volutamente, per non utilizzare la configurazione
  301.                     if(requestInfo.getRequestConfig()!=null) {
  302.                         requestInfo.getRequestConfig().setPortaApplicativaDefault(paDefault);
  303.                     }
  304.                 }
  305.             }catch(Exception e){
  306.                 logCore.debug("Recupero porta default fallita: "+e.getMessage(),e);
  307.             }
  308.            
  309.             // Verifico che la modalità di riconoscimento dell'azione sia compatibile
  310.             RequestInfoConfigUtilities.checkRequestInfoConfig(paDefault, logCore, protocolServiceBinding, soapStreamReader, requestInfo);
  311.             // Aggiorno chiave per considerare anche il soapStreamReader
  312.             GestoreRichieste.updateRequestConfig(requestInfo, protocolServiceBinding, soapStreamReader);
  313.             if(requestInfo!=null && requestInfo.getRequestConfig()!=null && requestInfo.getRequestConfig().getIdServizio()!=null) {
  314.                 idServizio = requestInfo.getRequestConfig().getIdServizio(); // se ho fatto lo switch per chiave più specifica per soap, uso il nuovo oggetto per evitare che nella chiave precedente venga memorizzata l'azione
  315.             }
  316.            
  317.             // provo a leggere anche l'azione
  318.             // l'eventuale errore lo genero dopo
  319.             try{
  320.                 //PortaApplicativa paSearchAzione = configIntegrationReader.getPortaApplicativa(idPA);
  321.                 PortaApplicativa paSearchAzione = paDefault;
  322.                 idServizio.setAzione(configIntegrationReader.getAzione(paSearchAzione, protocolContext, requestInfo, requestInfo.getProtocolFactory(),
  323.                         requestMessage, // sara' valorizzato solamente per riconoscere l'azione nel caso di invocazione /PA senza indicare la porta applicativa
  324.                         soapStreamReader));
  325.             }catch(Exception e){
  326.                 logCore.debug("Azione non trovata: "+e.getMessage(),e);
  327.             }
  328.                        
  329.             // Lettura eventuale MessageFactory da utilizzare
  330.             try {
  331.                 if(paDefault!=null && paDefault.getOptions()!=null && !StringUtils.isEmpty(paDefault.getOptions())) {
  332.                     Map<String, List<String>> props = PropertiesSerializator.convertoFromDBColumnValue(paDefault.getOptions());
  333.                     if(props!=null && props.size()>0) {
  334.                         String msgFactory = TransportUtils.getFirstValue(props,CostantiPdD.OPTIONS_MESSAGE_FACTORY);
  335.                         if(msgFactory!=null) {
  336.                             requestInfo.setMessageFactory(msgFactory);
  337.                         }
  338.                     }
  339.                 }
  340.             }catch(Throwable e){
  341.                 logCore.debug("Lettura Message Factory fallita: "+e.getMessage(),e);
  342.             }
  343.            
  344.             // Lettura Azione
  345.             try{
  346.                 if(requestInfo.getRequestConfig()!=null && requestInfo.getRequestConfig().getIdPortaApplicativa()!=null) {
  347.                     idPA = requestInfo.getRequestConfig().getIdPortaApplicativa();
  348.                    
  349.                     if(requestInfo.getRequestConfig().getIdPortaApplicativaDefault()!=null && !requestInfo.getRequestConfig().getIdPortaApplicativaDefault().equals(idPA)) {
  350.                         // pa specifica
  351.                        
  352.                         if(pddContextNullable!=null) {
  353.                             pddContextNullable.addObject(CostantiPdD.NOME_PORTA_INVOCATA, requestInfo.getRequestConfig().getIdPortaApplicativaDefault().getNome()); // prima di aggiornare la porta applicativa
  354.                         }
  355.                        
  356.                         msgDiag.addKeyword(CostantiPdD.KEY_PORTA_APPLICATIVA, idPA.getNome());
  357.                         msgDiag.updatePorta(idPA.getNome(), requestInfo);
  358.                         protocolContext.setInterfaceName(idPA.getNome());
  359.                     }
  360.                 }
  361.                 else {
  362.                     if(idServizio.getAzione()!=null) {
  363.                        
  364.                         IdentificazionePortaApplicativa identificazione = new IdentificazionePortaApplicativa(logCore, pf,
  365.                                 serviceIdentificationReader.getRegistryReader(), serviceIdentificationReader.getConfigIntegrationReader(), // questi reader sono gia' 'cached'
  366.                                 requestInfo, paDefault);
  367.                         if(identificazione.find(idServizio.getAzione())) {
  368.                             IDPortaApplicativa idPA_action = identificazione.getIDPortaApplicativa(idServizio.getAzione());
  369.                             if(idPA_action!=null) {
  370.                                
  371.                                 if(pddContextNullable!=null) {
  372.                                     pddContextNullable.addObject(CostantiPdD.NOME_PORTA_INVOCATA, idPA.getNome()); // prima di aggiornare la porta applicativa
  373.                                 }
  374.                                
  375.                                 msgDiag.addKeyword(CostantiPdD.KEY_PORTA_APPLICATIVA, idPA_action.getNome());
  376.                                 msgDiag.updatePorta(idPA_action.getNome(), requestInfo);
  377.                                 protocolContext.setInterfaceName(idPA_action.getNome());
  378.                                 idPA = idPA_action;
  379.                             }
  380.                         }
  381.                     }
  382.                     if(idPA!=null && requestInfo.getRequestConfig()!=null) {
  383.                         requestInfo.getRequestConfig().setIdPortaApplicativa(idPA);
  384.                     }
  385.                 }
  386.             }catch(Exception e){
  387.                 logCore.debug("Gestione porta specifica per azione fallita: "+e.getMessage(),e);
  388.             }
  389.            
  390.             // SetPA usato poi successivamente
  391.             if(idPA!=null && requestInfo.getRequestConfig()!=null && requestInfo.getRequestConfig().getPortaApplicativa()==null) {
  392.                 try{
  393.                     PortaApplicativa pa = configurazionePdDManager.getPortaApplicativaSafeMethod(idPA, null); // passo null volutamente, per accedere alla configurazione
  394.                     requestInfo.getRequestConfig().setPortaApplicativa(pa);
  395.                 }catch(Exception e){
  396.                     logCore.debug("Recupero porta applicativa fallito: "+e.getMessage(),e);
  397.                 }
  398.             }
  399.            
  400.             // Set servizi applicativi erogatori
  401.             if(requestInfo.getRequestConfig()!=null && requestInfo.getRequestConfig().getPortaApplicativa()!=null &&
  402.                     requestInfo.getRequestConfig().sizeServiziApplicativiErogatori()<=0) {
  403.                 String [] sa = null;
  404.                 try{
  405.                     sa = configurazionePdDManager.getServiziApplicativi(requestInfo.getRequestConfig().getPortaApplicativa());
  406.                 }catch(Exception e){
  407.                     logCore.debug("Recupero servizi applicativi erogatori falliti: "+e.getMessage(),e);
  408.                 }
  409.                 if(sa!=null && sa.length>0) {
  410.                     IDSoggetto soggettoProprietario = new IDSoggetto(requestInfo.getRequestConfig().getPortaApplicativa().getTipoSoggettoProprietario(), requestInfo.getRequestConfig().getPortaApplicativa().getNomeSoggettoProprietario());
  411.                     for (String s : sa) {
  412.                         IDServizioApplicativo idSA = new IDServizioApplicativo();
  413.                         idSA.setNome(s);
  414.                         idSA.setIdSoggettoProprietario(soggettoProprietario);
  415.                         try{
  416.                             ServizioApplicativo serv = configurazionePdDManager.getServizioApplicativo(idSA, null); // passo null volutamente, per accedere alla configurazione
  417.                             if(serv!=null) {
  418.                                 requestInfo.getRequestConfig().addServizioApplicativoErogatore(serv, requestInfo.getIdTransazione());
  419.                             }
  420.                         }catch(Exception e){
  421.                             logCore.debug("Recupero servizio applicativo erogatore fallito ("+idSA.toString()+"): "+e.getMessage(),e);
  422.                         }
  423.                     }
  424.                 }
  425.             }
  426.            
  427.             // Set identità soggetti erogatori usati poi successivamente
  428.             if(idServizio!=null && idServizio.getSoggettoErogatore()!=null && requestInfo.getRequestConfig()!=null) {
  429.                 if(requestInfo.getRequestConfig().getSoggettoErogatoreRegistry()==null) {
  430.                     try{
  431.                         org.openspcoop2.core.registry.Soggetto soggettoRegistry = registroServiziManager.getSoggetto(idServizio.getSoggettoErogatore(), null, null); // passo null volutamente, per accedere alla configurazione
  432.                         requestInfo.getRequestConfig().setSoggettoErogatoreRegistry(soggettoRegistry);
  433.                     }catch(Exception e){
  434.                         logCore.debug("Recupero soggetto erogatore dal registro fallito: "+e.getMessage(),e);
  435.                     }
  436.                 }
  437.                 if(requestInfo.getRequestConfig().getSoggettoErogatoreConfig()==null) {
  438.                     try{
  439.                         org.openspcoop2.core.config.Soggetto soggettoConfig = configurazionePdDManager.getSoggetto(idServizio.getSoggettoErogatore(), null); // passo null volutamente, per accedere alla configurazione
  440.                         requestInfo.getRequestConfig().setSoggettoErogatoreConfig(soggettoConfig);
  441.                     }catch(Exception e){
  442.                         logCore.debug("Recupero soggetto erogatore dal registro fallito: "+e.getMessage(),e);
  443.                     }
  444.                 }
  445.                 if(requestInfo.getRequestConfig().getSoggettoErogatoreIdentificativoPorta()==null) {
  446.                     try{
  447.                         String idPorta = configurazionePdDManager.getIdentificativoPorta(idServizio.getSoggettoErogatore(), pf, null); // passo null volutamente, per accedere alla configurazione
  448.                         requestInfo.getRequestConfig().setSoggettoErogatoreIdentificativoPorta(idPorta);
  449.                     }catch(Exception e){
  450.                         logCore.debug("Recupero dati soggetto erogatore (identificativoPorta) dal registro fallito: "+e.getMessage(),e);
  451.                     }
  452.                 }
  453.                 if(requestInfo.getRequestConfig().getSoggettoErogatoreSoggettoVirtuale()==null) {
  454.                     try{
  455.                         boolean soggettoVirtuale = configurazionePdDManager.isSoggettoVirtuale(idServizio.getSoggettoErogatore(), null); // passo null volutamente, per accedere alla configurazione
  456.                         requestInfo.getRequestConfig().setSoggettoErogatoreSoggettoVirtuale(soggettoVirtuale);
  457.                     }catch(Exception e){
  458.                         logCore.debug("Recupero dati soggetto erogatore (soggettoVirtuale) dal registro fallito: "+e.getMessage(),e);
  459.                     }
  460.                 }
  461.                 if(requestInfo.getRequestConfig().getSoggettoErogatorePddReaded()==null) {
  462.                     try{
  463.                         if(requestInfo.getRequestConfig().getSoggettoErogatoreRegistry()!=null) {
  464.                             if(requestInfo.getRequestConfig().getSoggettoErogatoreRegistry().getPortaDominio()!=null &&
  465.                                     StringUtils.isNotEmpty(requestInfo.getRequestConfig().getSoggettoErogatoreRegistry().getPortaDominio())) {
  466.                                 PortaDominio pdd = registroServiziManager.getPortaDominio(requestInfo.getRequestConfig().getSoggettoErogatoreRegistry().getPortaDominio(), null, null); // passo null volutamente, per accedere alla configurazione
  467.                                 requestInfo.getRequestConfig().setSoggettoErogatorePddReaded(true);
  468.                                 requestInfo.getRequestConfig().setSoggettoErogatorePdd(pdd);
  469.                             }
  470.                             else {
  471.                                 requestInfo.getRequestConfig().setSoggettoErogatorePddReaded(true);
  472.                             }
  473.                         }
  474.                     }catch(Exception e){
  475.                         logCore.debug("Recupero dati soggetto erogatore (pdd) dal registro fallito: "+e.getMessage(),e);
  476.                     }
  477.                 }
  478.                 if(requestInfo.getRequestConfig().getSoggettoErogatoreImplementazionePdd()==null) {
  479.                     try{
  480.                         String impl = registroServiziManager.getImplementazionePdD(idServizio.getSoggettoErogatore(), null, null); // passo null volutamente, per accedere alla configurazione
  481.                         requestInfo.getRequestConfig().setSoggettoErogatoreImplementazionePdd(impl);
  482.                     }catch(Exception e){
  483.                         logCore.debug("Recupero dati soggetto erogatore (implementazione pdd) dal registro fallito: "+e.getMessage(),e);
  484.                     }
  485.                 }
  486.             }
  487.            
  488.             // updateInformazioniCooperazione
  489.             generatoreErrore.updateInformazioniCooperazione(null, idServizio);
  490.             requestInfo.setIdServizio(idServizio);
  491.                        
  492.             // Aggiorno service binding configuration rispetto al servizio localizzato
  493.             try{
  494.                 bindingConfig = pf.createProtocolConfiguration().getServiceBindingConfiguration(protocolContext, integrationServiceBinding, idServizio, registryReader);
  495.                 requestInfo.setBindingConfig(bindingConfig);
  496.             }catch(RegistryNotFound notFound){
  497.                 if(res!=null) {
  498.                     logCore.debug("Lettura Configurazione Servizio fallita (notFound): "+notFound.getMessage(),notFound);
  499.                     msgDiag.addKeywordErroreProcessamento(notFound);
  500.                     msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
  501.                     return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  502.                             ErroriIntegrazione.ERRORE_405_SERVIZIO_NON_TROVATO.getErroreIntegrazione(),
  503.                             IntegrationFunctionError.API_IN_UNKNOWN, notFound, null, res, logCore, ConnectorDispatcherUtils.CLIENT_ERROR);
  504.                 }
  505.                 return null;
  506.             }catch(Exception error){
  507.                 if(res!=null) {
  508.                     logCore.error("Lettura Configurazione Servizio fallita: "+error.getMessage(),error);
  509.                     msgDiag.addKeywordErroreProcessamento(error);
  510.                     msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
  511.                     return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  512.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento("Lettura Configurazione Servizio fallita"),
  513.                             IntegrationFunctionError.INTERNAL_REQUEST_ERROR, error, null, res, logCore, ConnectorDispatcherUtils.GENERAL_ERROR);
  514.                 }
  515.                 return null;
  516.             }
  517.            
  518.             // Verifico correttezza Content-Type
  519.             String ct = null;
  520.             try {
  521.                 ct = protocolContext.getContentType();
  522.                 if(ct!=null && !"".equals(ct)) {
  523.                     //new ContentType(ct).getBaseType();
  524.                     ContentTypeUtilities.validateContentType(ct);
  525.                 }
  526.             }catch(Exception error){
  527.                 if(res!=null) {
  528.                     logCore.error("Lettura ContentType fallita: "+error.getMessage(),error);
  529.                     msgDiag.addKeywordErroreProcessamento(error);
  530.                     msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, " Content-Type '"+ct+"' presente nella richiesta non valido;");
  531.                     msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_BUSTE,"richiestaNonValida");
  532.                     ConnectorDispatcherInfo cdiError = ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  533.                             ErroriIntegrazione.ERRORE_432_PARSING_EXCEPTION_RICHIESTA.getErrore432_MessaggioRichiestaMalformato(error),
  534.                             IntegrationFunctionError.BAD_REQUEST, error, null, res, logCore, ConnectorDispatcherUtils.CLIENT_ERROR);
  535.                     try {
  536.                         cdiError.setEsitoTransazione(pf.createEsitoBuilder().getEsito(requestInfo.getProtocolContext(),EsitoTransazioneName.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO));
  537.                         if(pddContextNullable!=null) {
  538.                             pddContextNullable.addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO, true);
  539.                         }
  540.                     }catch(Throwable t) {
  541.                         // ignore
  542.                     }
  543.                     return cdiError;
  544.                 }
  545.                 return null;
  546.             }
  547.            
  548.             // Aggiorno message type
  549.             try{
  550.                 MessageType requestMessageTypeIntegration = bindingConfig.getRequestMessageType(integrationServiceBinding,
  551.                         protocolContext, protocolContext.getContentType());
  552.                 requestInfo.setIntegrationRequestMessageType(requestMessageTypeIntegration);
  553.                
  554.                 MessageType requestMessageTypeProtocol = bindingConfig.getRequestMessageType(protocolServiceBinding,
  555.                         protocolContext, protocolContext.getContentType());
  556.                 requestInfo.setProtocolRequestMessageType(requestMessageTypeProtocol);
  557.                
  558.                 generatoreErrore.updateRequestMessageType(requestMessageTypeProtocol);
  559.             }catch(Exception error){
  560.                 if(res!=null) {
  561.                     logCore.error("Identificazione MessageType fallita: "+error.getMessage(),error);
  562.                     msgDiag.addKeywordErroreProcessamento(error);
  563.                     msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
  564.                     return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  565.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento("Identificazione MessageType fallita"),
  566.                             IntegrationFunctionError.INTERNAL_REQUEST_ERROR, error, null, res, logCore, ConnectorDispatcherUtils.GENERAL_ERROR);
  567.                 }
  568.                 return null;
  569.             }
  570.            
  571.             // Controllo Service Binding rispetto alla url e al tipo di servizio
  572.             if(requestInfo.getProtocolContext()!=null && bindingConfig.isServiceBindingContextEnabled(protocolServiceBinding, requestInfo.getProtocolContext().getProtocolWebContext())==false) {
  573.                 if(res!=null) {
  574.                     String url = requestInfo.getProtocolContext().getRequestURI();
  575.                     logCore.error("L'API invocata possiede un service binding '"+protocolServiceBinding+"' non abilitato sul contesto utilizzato: "+url);
  576.                     msgDiag.logErroreGenerico("L'API invocata possiede un service binding '"+protocolServiceBinding+"' non abilitato sul contesto utilizzato", "CheckServiceBinding");
  577.                     return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  578.                             ErroriIntegrazione.ERRORE_447_API_NON_INVOCABILE_CONTESTO_UTILIZZATO.getErroreIntegrazione(),
  579.                             IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL, null, null, res, logCore, ConnectorDispatcherUtils.CLIENT_ERROR);
  580.                 }
  581.                 return null;
  582.             }
  583.             if(bindingConfig.isServiceBindingServiceTypeEnabled(protocolServiceBinding, idServizio.getTipo())==false) {
  584.                 if(res!=null) {
  585.                     logCore.error("L'API invocata possiede un service binding '"+protocolServiceBinding+"' non abilitato per il tipo di servizio '"+idServizio.getTipo()+"'");
  586.                     msgDiag.logErroreGenerico("L'API invocata possiede un service binding '"+protocolServiceBinding+"' non abilitato per il tipo di servizio '"+idServizio.getTipo(), "CheckServiceBinding");
  587.                     return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  588.                             ErroriIntegrazione.ERRORE_448_API_NON_INVOCABILE_TIPO_SERVIZIO_UTILIZZATO.getErroreIntegrazione(),
  589.                             IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL, null, null, res, logCore, ConnectorDispatcherUtils.CLIENT_ERROR);
  590.                 }
  591.                 return null;
  592.             }
  593.         }
  594.    
  595.         if(requestInfo!=null && requestInfo.getProtocolServiceBinding()!=null &&
  596.                 ServiceBinding.SOAP.equals(requestInfo.getProtocolServiceBinding()) &&
  597.                 requestInfo.getProtocolContext()!=null &&
  598.                 HttpRequestMethod.OPTIONS.name().equalsIgnoreCase(requestInfo.getProtocolContext().getRequestType())) {
  599.                        
  600.             // Gestione CORS
  601.             try{
  602.                 CorsConfigurazione cors = null;
  603.                 HttpServletRequest httpServletRequest = null;
  604.                 if(requestInfo!=null && requestInfo.getProtocolContext()!=null) {
  605.                     httpServletRequest = requestInfo.getProtocolContext().getHttpServletRequest();  
  606.                 }
  607.                
  608.                 if(httpServletRequest!=null) {
  609.                     if(paDefault!=null) {
  610.                         cors = configurazionePdDManager.getConfigurazioneCORS(paDefault);
  611.                     }
  612.                     else {
  613.                         cors = configurazionePdDManager.getConfigurazioneCORS();
  614.                     }
  615.                 }
  616.                 else {
  617.                     cors = new CorsConfigurazione();
  618.                     cors.setStato(StatoFunzionalita.DISABILITATO);
  619.                 }
  620.                
  621.                 if(StatoFunzionalita.ABILITATO.equals(cors.getStato())) {
  622.                     if(TipoGestioneCORS.GATEWAY.equals(cors.getTipo())) {
  623.                        
  624.                         /*
  625.                        
  626.                         org.openspcoop2.pdd.core.CORSFilter corsFilter = new org.openspcoop2.pdd.core.CORSFilter(logCore, cors);
  627.                         org.openspcoop2.pdd.core.CORSWrappedHttpServletResponse resCORS = new org.openspcoop2.pdd.core.CORSWrappedHttpServletResponse(true);
  628.                         corsFilter.doCORS(httpServletRequest, resCORS, org.openspcoop2.utils.transport.http.CORSRequestType.PRE_FLIGHT, true);
  629.                         org.openspcoop2.message.OpenSPCoop2Message msgCORSResponse = resCORS.buildMessage();
  630.                         org.openspcoop2.protocol.sdk.builder.EsitoTransazione esito =
  631.                                 requestInfo.getProtocolFactory().createEsitoBuilder().getEsito(requestInfo.getProtocolContext(),
  632.                                         org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName.CORS_PREFLIGHT_REQUEST_VIA_GATEWAY);
  633.                         ConnectorDispatcherInfo c = ConnectorDispatcherInfo.getGeneric(msgCORSResponse,
  634.                                 resCORS.getStatus(), null, resCORS.getHeader(), esito);
  635.                         if(pddContextNullable!=null) {
  636.                             pddContextNullable.addObject(org.openspcoop2.core.constants.Costanti.CORS_PREFLIGHT_REQUEST_VIA_GATEWAY, "true");
  637.                         }
  638.                         ConnectorDispatcherUtils.doInfo(c, requestInfo, res, logCore, false);
  639.                         return c;
  640.                        
  641.                         */
  642.                        
  643.                         // Fix per avere il dump anche nelle comunicazioni soap, converto in REST
  644.                         requestInfo.setIntegrationServiceBinding(ServiceBinding.REST);
  645.                         requestInfo.setProtocolServiceBinding(ServiceBinding.REST);
  646.                         generatoreErrore.updateServiceBinding(ServiceBinding.REST);
  647.                        
  648.                         requestInfo.setIntegrationRequestMessageType(MessageType.BINARY);
  649.                         requestInfo.setProtocolRequestMessageType(MessageType.BINARY);
  650.                         generatoreErrore.updateRequestMessageType(MessageType.BINARY);
  651.                        
  652.                         if(pddContextNullable!=null) {
  653.                             pddContextNullable.addObject(CostantiPdD.CORS_PREFLIGHT_REQUEST_SOAP, "true");
  654.                         }
  655.                        
  656.                     }
  657.                     else {
  658.                        
  659.                         if(pddContextNullable!=null) {
  660.                             pddContextNullable.addObject(org.openspcoop2.core.constants.Costanti.CORS_PREFLIGHT_REQUEST_TRASPARENTE, "true");
  661.                         }
  662.                        
  663.                         requestInfo.setIntegrationServiceBinding(ServiceBinding.REST);
  664.                         requestInfo.setProtocolServiceBinding(ServiceBinding.REST);
  665.                         generatoreErrore.updateServiceBinding(ServiceBinding.REST);
  666.                        
  667.                         requestInfo.setIntegrationRequestMessageType(MessageType.BINARY);
  668.                         requestInfo.setProtocolRequestMessageType(MessageType.BINARY);
  669.                         generatoreErrore.updateRequestMessageType(MessageType.BINARY);
  670.                     }
  671.                 }
  672.                
  673.             }catch(Exception error){
  674.                
  675.                 if(res!=null) {
  676.                     logCore.error("Gestione CORS fallita: "+error.getMessage(),error);
  677.                     msgDiag.addKeywordErroreProcessamento(error);
  678.                     msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
  679.                     return ConnectorDispatcherUtils.doError(requestInfo, generatoreErrore,
  680.                             ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento("Gestione CORS fallita"),
  681.                             IntegrationFunctionError.INTERNAL_REQUEST_ERROR, error, null, res, logCore, ConnectorDispatcherUtils.GENERAL_ERROR);
  682.                 }
  683.                 return null;
  684.                
  685.             }

  686.         }
  687.        
  688.         return null;
  689.     }
  690.    
  691.    
  692.    
  693.    
  694.     public static void emitTransaction(Logger logCore, ConnectorInMessage req, PdDContext pddContext, Date dataAccettazioneRichiesta,
  695.             ConnectorDispatcherInfo info) {
  696.         emitTransaction(null, logCore, req, pddContext, dataAccettazioneRichiesta, info);
  697.     }
  698.     public static void emitTransaction(RicezioneBusteContext context,Logger logCore, ConnectorInMessage req, PdDContext pddContext, Date dataAccettazioneRichiesta,
  699.             ConnectorDispatcherInfo info) {
  700.         try {
  701.             if (!OpenSPCoop2Startup.initialize || OpenSPCoop2Properties.getInstance() == null) {
  702.                 logCore.error("emitTransaction, registrazione non effettuata: inizializzazione govway non rilevata");
  703.                 return;
  704.             }
  705.            
  706.             String idModulo = req.getIdModulo();
  707.             IDService idModuloAsService = req.getIdModuloAsIDService();
  708.             IProtocolFactory<?> protocolFactory = req.getProtocolFactory();
  709.             RequestInfo requestInfo = req.getRequestInfo();
  710.            
  711.             if(context!=null && context.getPddContext()!=null) {
  712.                 PreInRequestHandler.readClientAddress(logCore, req, context.getPddContext());
  713.                 if(OpenSPCoop2Properties.getInstance().isTransazioniEnabled()) {
  714.                     try {
  715.                         String idTransazione = (String) context.getPddContext().getObject(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE);
  716.                         if(idTransazione!=null) {
  717.                             Transaction tr = TransactionContext.getTransaction(idTransazione);
  718.                             PreInRequestHandler.setInfoInvocation(tr, requestInfo, req);
  719.                         }
  720.                     }catch(Throwable e){
  721.                         logCore.error("postOutResponse, lettura parametri fallita: "+e.getMessage(),e);
  722.                     }
  723.                 }
  724.             }
  725.            
  726.             emitTransaction(context,logCore, idModulo, idModuloAsService, protocolFactory, requestInfo, pddContext, dataAccettazioneRichiesta, info);
  727.         }catch(Throwable e){
  728.             logCore.error("postOutResponse, registrazione fallita: "+e.getMessage(),e);
  729.         }
  730.     }
  731.    
  732.     public static void emitTransaction(RicezioneBusteContext context,Logger logCore,String idModulo,IDService idModuloAsService, IProtocolFactory<?> protocolFactory, RequestInfo requestInfo,
  733.             PdDContext pddContext, Date dataAccettazioneRichiesta,
  734.             ConnectorDispatcherInfo info) {
  735.        
  736.         try {
  737.             if (!OpenSPCoop2Startup.initialize || OpenSPCoop2Properties.getInstance() == null) {
  738.                 logCore.error("postOutResponse, registrazione non effettuata: inizializzazione govway non rilevata");
  739.                 return;
  740.             }
  741.            
  742.             if(context==null) {
  743.                 context = new RicezioneBusteContext(idModuloAsService,dataAccettazioneRichiesta,requestInfo);
  744.             }
  745.            
  746.             PostOutResponseContext postOutResponseContext = new PostOutResponseContext(logCore,protocolFactory);
  747.             postOutResponseContext.setTipoPorta(TipoPdD.APPLICATIVA);
  748.             postOutResponseContext.setIdModulo(idModulo);
  749.            
  750.             postOutResponseContext.setPddContext(pddContext);
  751.             if(pddContext==null) {
  752.                 postOutResponseContext.setPddContext(context.getPddContext());
  753.             }
  754.             else {
  755.                 pddContext.addAll(context.getPddContext(), true);
  756.             }
  757.             postOutResponseContext.getPddContext().addObject(CostantiPdD.DATA_ACCETTAZIONE_RICHIESTA, dataAccettazioneRichiesta);

  758.             if(OpenSPCoop2Properties.getInstance().isTransazioniEnabled()) {
  759.                 // NOTA: se gia' esiste con l'id di transazione, non viene ricreata
  760.                 TransactionContext.createTransaction((String)postOutResponseContext.getPddContext().getObject(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE), "RicezioneBuste.3");
  761.             }
  762.            
  763.             postOutResponseContext.setDataElaborazioneMessaggio(DateManager.getDate());
  764.             postOutResponseContext.setEsito(info.getEsitoTransazione());
  765.             postOutResponseContext.setReturnCode(info.getStatus());
  766.             postOutResponseContext.setResponseHeaders(info.getTrasporto());
  767.             if(info.getContentType()!=null) {
  768.                 if(postOutResponseContext.getResponseHeaders()==null) {
  769.                     postOutResponseContext.setResponseHeaders(new HashMap<>());
  770.                 }
  771.                 TransportUtils.setHeader(postOutResponseContext.getResponseHeaders(),HttpConstants.CONTENT_TYPE, info.getContentType());
  772.             }
  773.                    
  774.             if(info.getMessage()!=null){
  775.                
  776.                 postOutResponseContext.setOutputResponseMessageSize(info.getMessage().getOutgoingMessageContentLength());
  777.                
  778.                 postOutResponseContext.setMessaggio(info.getMessage());
  779.             }
  780.    
  781.             MsgDiagnostico msgDiag = MsgDiagnostico.newInstance(TipoPdD.APPLICATIVA,idModulo);
  782.             msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_BUSTE);
  783.            
  784.             GestoreHandlers.postOutResponse(postOutResponseContext, msgDiag, logCore);
  785.            
  786.         }catch(Throwable e){
  787.             logCore.error("postOutResponse, registrazione fallita: "+e.getMessage(),e);
  788.         }
  789.    
  790.     }
  791. }