RicezioneContenutiApplicativi.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.pdd.services.core;
- import java.io.ByteArrayInputStream;
- import java.io.Serializable;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import org.apache.commons.lang.StringUtils;
- import org.openspcoop2.core.config.AttributeAuthority;
- import org.openspcoop2.core.config.Connettore;
- import org.openspcoop2.core.config.CorrelazioneApplicativa;
- import org.openspcoop2.core.config.CorsConfigurazione;
- import org.openspcoop2.core.config.DumpConfigurazione;
- import org.openspcoop2.core.config.GestioneTokenAutenticazione;
- import org.openspcoop2.core.config.PortaApplicativa;
- import org.openspcoop2.core.config.PortaDelegata;
- import org.openspcoop2.core.config.Proprieta;
- import org.openspcoop2.core.config.ResponseCachingConfigurazione;
- import org.openspcoop2.core.config.ServizioApplicativo;
- import org.openspcoop2.core.config.ValidazioneContenutiApplicativi;
- import org.openspcoop2.core.config.constants.CostantiConfigurazione;
- import org.openspcoop2.core.config.constants.StatoFunzionalita;
- import org.openspcoop2.core.config.constants.TipoGestioneCORS;
- import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
- import org.openspcoop2.core.constants.CostantiConnettori;
- import org.openspcoop2.core.constants.TipoPdD;
- import org.openspcoop2.core.id.IDPortaApplicativa;
- import org.openspcoop2.core.id.IDPortaDelegata;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDServizioApplicativo;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.id.IdentificativiFruizione;
- import org.openspcoop2.core.registry.AccordoServizioParteComune;
- import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
- import org.openspcoop2.core.registry.Resource;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziAzioneNotFound;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziCorrelatoNotFound;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziPortTypeNotFound;
- import org.openspcoop2.core.registry.driver.IDAccordoFactory;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.OpenSPCoop2MessageFactory;
- import org.openspcoop2.message.constants.MessageRole;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.message.exception.ParseException;
- import org.openspcoop2.message.soap.TunnelSoapUtils;
- import org.openspcoop2.message.soap.mtom.MtomXomReference;
- import org.openspcoop2.message.utils.MessageUtilities;
- import org.openspcoop2.pdd.config.ClassNameProperties;
- import org.openspcoop2.pdd.config.ConfigurazioneCanaliNodo;
- import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
- import org.openspcoop2.pdd.config.CostantiProprieta;
- import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
- import org.openspcoop2.pdd.config.RichiestaApplicativa;
- import org.openspcoop2.pdd.config.RichiestaDelegata;
- import org.openspcoop2.pdd.config.dynamic.PddPluginLoader;
- import org.openspcoop2.pdd.core.AbstractCore;
- import org.openspcoop2.pdd.core.CORSFilter;
- import org.openspcoop2.pdd.core.CORSWrappedHttpServletResponse;
- import org.openspcoop2.pdd.core.CostantiPdD;
- import org.openspcoop2.pdd.core.GestoreCorrelazioneApplicativa;
- import org.openspcoop2.pdd.core.GestoreCorrelazioneApplicativaConfig;
- import org.openspcoop2.pdd.core.GestoreMessaggi;
- import org.openspcoop2.pdd.core.GestoreMessaggiException;
- import org.openspcoop2.pdd.core.IntegrationContext;
- import org.openspcoop2.pdd.core.LocalForwardEngine;
- import org.openspcoop2.pdd.core.LocalForwardParameter;
- import org.openspcoop2.pdd.core.PdDContext;
- import org.openspcoop2.pdd.core.ProtocolContext;
- import org.openspcoop2.pdd.core.StatoServiziPdD;
- import org.openspcoop2.pdd.core.ValidatoreMessaggiApplicativi;
- import org.openspcoop2.pdd.core.ValidatoreMessaggiApplicativiException;
- import org.openspcoop2.pdd.core.ValidatoreMessaggiApplicativiRest;
- import org.openspcoop2.pdd.core.autorizzazione.GestoreAutorizzazione;
- import org.openspcoop2.pdd.core.autorizzazione.container.AutorizzazioneHttpServletRequest;
- import org.openspcoop2.pdd.core.autorizzazione.container.IAutorizzazioneSecurityContainer;
- import org.openspcoop2.pdd.core.autorizzazione.pd.DatiInvocazionePortaDelegata;
- import org.openspcoop2.pdd.core.autorizzazione.pd.EsitoAutorizzazionePortaDelegata;
- import org.openspcoop2.pdd.core.connettori.InfoConnettoreIngresso;
- import org.openspcoop2.pdd.core.credenziali.Credenziali;
- import org.openspcoop2.pdd.core.credenziali.GestoreCredenzialiConfigurationException;
- import org.openspcoop2.pdd.core.credenziali.IGestoreCredenziali;
- import org.openspcoop2.pdd.core.handlers.GestoreHandlers;
- import org.openspcoop2.pdd.core.handlers.HandlerException;
- import org.openspcoop2.pdd.core.handlers.InRequestContext;
- import org.openspcoop2.pdd.core.handlers.InRequestProtocolContext;
- import org.openspcoop2.pdd.core.handlers.OutResponseContext;
- import org.openspcoop2.pdd.core.integrazione.HeaderIntegrazione;
- import org.openspcoop2.pdd.core.integrazione.IGestoreIntegrazionePD;
- import org.openspcoop2.pdd.core.integrazione.IGestoreIntegrazionePDSoap;
- import org.openspcoop2.pdd.core.integrazione.InRequestPDMessage;
- import org.openspcoop2.pdd.core.integrazione.OutResponsePDMessage;
- import org.openspcoop2.pdd.core.node.INodeReceiver;
- import org.openspcoop2.pdd.core.node.INodeSender;
- import org.openspcoop2.pdd.core.node.NodeTimeoutException;
- import org.openspcoop2.pdd.core.response_caching.HashGenerator;
- import org.openspcoop2.pdd.core.state.IOpenSPCoopState;
- import org.openspcoop2.pdd.core.state.OpenSPCoopState;
- import org.openspcoop2.pdd.core.state.OpenSPCoopStateful;
- import org.openspcoop2.pdd.core.state.OpenSPCoopStateless;
- import org.openspcoop2.pdd.core.token.GestoreToken;
- import org.openspcoop2.pdd.core.token.InformazioniToken;
- import org.openspcoop2.pdd.core.token.attribute_authority.EsitoRecuperoAttributi;
- import org.openspcoop2.pdd.core.token.attribute_authority.InformazioniAttributi;
- import org.openspcoop2.pdd.core.token.attribute_authority.PolicyAttributeAuthority;
- import org.openspcoop2.pdd.core.token.attribute_authority.pd.GestioneAttributeAuthority;
- import org.openspcoop2.pdd.core.transazioni.Transaction;
- import org.openspcoop2.pdd.core.transazioni.TransactionContext;
- import org.openspcoop2.pdd.logger.Dump;
- import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
- import org.openspcoop2.pdd.logger.MsgDiagnostico;
- import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
- import org.openspcoop2.pdd.logger.Tracciamento;
- import org.openspcoop2.pdd.mdb.ConsegnaContenutiApplicativi;
- import org.openspcoop2.pdd.mdb.EsitoLib;
- import org.openspcoop2.pdd.mdb.ImbustamentoMessage;
- import org.openspcoop2.pdd.mdb.InoltroBuste;
- import org.openspcoop2.pdd.mdb.SbustamentoRisposte;
- import org.openspcoop2.pdd.services.OpenSPCoop2Startup;
- import org.openspcoop2.pdd.services.ServicesUtils;
- import org.openspcoop2.pdd.services.connector.messages.ConnectorInMessage;
- import org.openspcoop2.pdd.services.error.AbstractErrorGenerator;
- import org.openspcoop2.pdd.services.error.RicezioneContenutiApplicativiInternalErrorGenerator;
- import org.openspcoop2.pdd.services.skeleton.IntegrationManager;
- import org.openspcoop2.pdd.timers.TimerGestoreMessaggi;
- import org.openspcoop2.pdd.timers.TimerLock;
- import org.openspcoop2.pdd.timers.TimerMonitoraggioRisorseThread;
- import org.openspcoop2.pdd.timers.TimerThresholdThread;
- import org.openspcoop2.pdd.timers.TipoLock;
- import org.openspcoop2.protocol.basic.registry.IdentificazionePortaDelegata;
- import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
- import org.openspcoop2.protocol.engine.builder.Imbustamento;
- import org.openspcoop2.protocol.engine.constants.Costanti;
- import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
- import org.openspcoop2.protocol.engine.mapping.IdentificazioneDinamicaException;
- import org.openspcoop2.protocol.engine.validator.ValidazioneSintattica;
- import org.openspcoop2.protocol.registry.RegistroServiziManager;
- import org.openspcoop2.protocol.sdk.Busta;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.Integrazione;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.ProtocolMessage;
- import org.openspcoop2.protocol.sdk.Servizio;
- import org.openspcoop2.protocol.sdk.builder.IBustaBuilder;
- import org.openspcoop2.protocol.sdk.builder.ProprietaErroreApplicativo;
- import org.openspcoop2.protocol.sdk.builder.ProprietaManifestAttachments;
- import org.openspcoop2.protocol.sdk.config.IProtocolConfiguration;
- import org.openspcoop2.protocol.sdk.config.IProtocolManager;
- import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
- import org.openspcoop2.protocol.sdk.config.ITraduttore;
- import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.FaseSbustamento;
- import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
- import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
- import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
- import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
- import org.openspcoop2.protocol.sdk.constants.StatoFunzionalitaProtocollo;
- import org.openspcoop2.protocol.sdk.dump.DumpException;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
- import org.openspcoop2.protocol.sdk.tracciamento.TracciamentoException;
- import org.openspcoop2.utils.LoggerWrapperFactory;
- import org.openspcoop2.utils.MapKey;
- import org.openspcoop2.utils.Utilities;
- import org.openspcoop2.utils.date.DateManager;
- import org.openspcoop2.utils.resources.Loader;
- import org.openspcoop2.utils.transport.http.CORSRequestType;
- import org.openspcoop2.utils.transport.http.HttpConstants;
- import org.openspcoop2.utils.transport.http.HttpRequestMethod;
- import org.slf4j.Logger;
- /**
- * Implementazione del servizio RicezioneContenutiApplicativi di OpenSPCoop
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class RicezioneContenutiApplicativi {
- /**
- * Variabile che indica il Nome del modulo dell'architettura di OpenSPCoop
- * rappresentato da questa classe
- */
- public static final String ID_MODULO = "RicezioneContenutiApplicativi";
-
- private static void logDebug(Logger logCore, String msg) {
- logCore.debug(msg);
- }
- private static void logDebug(Logger logCore, String msg, Throwable e) {
- logCore.debug(msg, e);
- }
- private static void logInfo(Logger logCore, String msg) {
- logCore.info(msg);
- }
- private static void logError(Logger logCore, String msg) {
- logCore.error(msg);
- }
- private static void logError(Logger logCore, String msg, Throwable e) {
- logCore.error(msg,e);
- }
-
-
- /** Indicazione se sono state inizializzate le variabili del servizio */
- public static boolean initializeService = false;
- /** IGestoreIntegrazionePD: lista di gestori, ordinati per priorita' minore */
- private static String[] defaultGestoriIntegrazionePD = null;
- private static java.util.concurrent.ConcurrentHashMap<String, String[]> defaultPerProtocolloGestoreIntegrazionePD = null;
- /** IGestoreCredenziali: lista di gestori delle credenziali */
- private static String [] tipiGestoriCredenziali = null;
-
- /**
- * Inizializzatore del servizio RicezioneContenutiApplicativi
- *
- * @throws Exception
- */
- public static synchronized void initializeService(
- ConfigurazionePdDManager configReader,
- ClassNameProperties className,
- OpenSPCoop2Properties propertiesReader, Logger logCore)
- throws Exception {
- if (RicezioneContenutiApplicativi.initializeService)
- return; // inizializzato da un altro thread
- Loader loader = Loader.getInstance();
- PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
-
- // Inizializzazione NodeSender
- String classTypeNodeSender = className.getNodeSender(propertiesReader.getNodeSender());
- try {
- INodeSender nodeSender = (INodeSender) loader.newInstance(classTypeNodeSender);
- nodeSender.toString();
- logInfo(logCore, "Inizializzazione gestore NodeSender di tipo " + classTypeNodeSender + " effettuata.");
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante il caricamento della classe ["+ classTypeNodeSender
- + "] da utilizzare per la spedizione nell'infrastruttura: " + e.getMessage());
- }
- // Inizializzazione NodeReceiver
- String classType = className.getNodeReceiver(propertiesReader.getNodeReceiver());
- try {
- INodeReceiver nodeReceiver = (INodeReceiver) loader.newInstance(classType);
- nodeReceiver.toString();
- logInfo(logCore, "Inizializzazione gestore NodeReceiver di tipo "+ classType + " effettuata.");
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante il caricamento della classe ["+ classType
- + "] da utilizzare per la ricezione dall'infrastruttura: "+ e.getMessage());
- }
- // Inizializzo IGestoreIntegrazionePD list
- RicezioneContenutiApplicativi.defaultGestoriIntegrazionePD = propertiesReader.getTipoIntegrazionePD();
- for (int i = 0; i < RicezioneContenutiApplicativi.defaultGestoriIntegrazionePD.length; i++) {
- try {
- IGestoreIntegrazionePD gestore = (IGestoreIntegrazionePD) pluginLoader.newIntegrazionePortaDelegata(RicezioneContenutiApplicativi.defaultGestoriIntegrazionePD[i]);
- gestore.toString();
- logInfo(logCore, "Inizializzazione gestore dati di integrazione per le fruizioni di tipo "
- + RicezioneContenutiApplicativi.defaultGestoriIntegrazionePD[i] + " effettuata.");
- } catch (Exception e) {
- throw new Exception(e.getMessage(),e);
- }
- }
-
- // Inizializzo IGestoreIntegrazionePD per protocollo
- RicezioneContenutiApplicativi.defaultPerProtocolloGestoreIntegrazionePD = new java.util.concurrent.ConcurrentHashMap<String, String[]>();
- Enumeration<String> enumProtocols = ProtocolFactoryManager.getInstance().getProtocolNames();
- while (enumProtocols.hasMoreElements()) {
- String protocol = (String) enumProtocols.nextElement();
- String[] tipiIntegrazionePD = propertiesReader.getTipoIntegrazionePD(protocol);
- if(tipiIntegrazionePD!=null && tipiIntegrazionePD.length>0){
- List<String> tipiIntegrazionePerProtocollo = new ArrayList<>();
- for (int i = 0; i < tipiIntegrazionePD.length; i++) {
- try {
- IGestoreIntegrazionePD gestore = (IGestoreIntegrazionePD) pluginLoader.newIntegrazionePortaDelegata(tipiIntegrazionePD[i]);
- gestore.toString();
- tipiIntegrazionePerProtocollo.add(tipiIntegrazionePD[i]);
- logCore .info("Inizializzazione gestore dati di integrazione (protocollo: "+protocol+") per le fruizioni di tipo "
- + tipiIntegrazionePD[i] + " effettuata.");
- } catch (Exception e) {
- throw new Exception(e.getMessage(),e);
- }
- }
- if(tipiIntegrazionePerProtocollo.size()>0){
- RicezioneContenutiApplicativi.defaultPerProtocolloGestoreIntegrazionePD.put(protocol, tipiIntegrazionePerProtocollo.toArray(new String[1]));
- }
- }
- }
- // Inizializzo GestoriCredenziali PD
- RicezioneContenutiApplicativi.tipiGestoriCredenziali = propertiesReader.getTipoGestoreCredenzialiPD();
- if(RicezioneContenutiApplicativi.tipiGestoriCredenziali!=null){
- for (int i = 0; i < RicezioneContenutiApplicativi.tipiGestoriCredenziali.length; i++) {
- classType = className.getGestoreCredenziali(RicezioneContenutiApplicativi.tipiGestoriCredenziali[i]);
- try {
- IGestoreCredenziali gestore = (IGestoreCredenziali)loader.newInstance(classType);
- gestore.toString();
- logCore .info("Inizializzazione gestore credenziali di tipo "
- + RicezioneContenutiApplicativi.tipiGestoriCredenziali[i] + " effettuata.");
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante il caricamento della classe ["+ classType
- + "] da utilizzare per la gestione delle credenziali di tipo ["
- + RicezioneContenutiApplicativi.tipiGestoriCredenziali[i]+ "]: " + e.getMessage());
- }
- }
- }
-
- RicezioneContenutiApplicativi.initializeService = true;
- }
- /** Generatore Errori */
- private RicezioneContenutiApplicativiInternalErrorGenerator generatoreErrore;
-
- /** Contesto della richiesta */
- private RicezioneContenutiApplicativiContext msgContext;
-
- public RicezioneContenutiApplicativi(
- RicezioneContenutiApplicativiContext context,
- RicezioneContenutiApplicativiInternalErrorGenerator generatoreErrore) {
- this.msgContext = context;
- this.generatoreErrore = generatoreErrore;
- }
- public void process(Object ... params) {
-
-
- // ------------- dati generali -----------------------------
-
- // Context
- PdDContext context = this.msgContext.getPddContext();
-
- // Logger
- Logger logCore = OpenSPCoop2Logger.getLoggerOpenSPCoopCore();
- if (logCore == null) {
- logCore = LoggerWrapperFactory.getLogger(RicezioneContenutiApplicativi.ID_MODULO);
- }
-
- // MsgDiagnostico
- MsgDiagnostico msgDiag = this.msgContext.getMsgDiagnostico();
-
- // Messaggio
- OpenSPCoop2Message requestMessage = this.msgContext.getMessageRequest();
- if (requestMessage == null) {
- setSOAPFault(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore, msgDiag, new Exception("Request message is null"), "LetturaMessaggioRichiesta");
- return;
- }
-
-
-
-
- // ------------- in-handler -----------------------------
- IProtocolFactory<?> protocolFactory = null;
- try{
- if(context==null) {
- throw new Exception("Context is null");
- }
- protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName((String)context.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
- }catch(Exception e){
- setSOAPFault(IntegrationFunctionError.GOVWAY_NOT_INITIALIZED, logCore, msgDiag, e, "ProtocolFactoryInstance");
- return;
- }
- InRequestContext inRequestContext = new InRequestContext(logCore,protocolFactory, null);
- // TipoPorta
- inRequestContext.setTipoPorta(TipoPdD.DELEGATA);
- inRequestContext.setIdModulo(this.msgContext.getIdModulo());
- // Informazioni connettore ingresso
- InfoConnettoreIngresso connettore = new InfoConnettoreIngresso();
- connettore.setCredenziali(this.msgContext.getCredenziali());
- if(this.msgContext.getUrlProtocolContext()!=null &&
- this.msgContext.getUrlProtocolContext().getHttpServletRequest()!=null){
- OpenSPCoop2Properties properties = OpenSPCoop2Properties.getInstance(); // Puo' non essere inizializzato
- if(properties!=null){
- String tipo = properties.getRealContainerCustom();
- if(tipo!=null) {
- try {
- ClassNameProperties className = ClassNameProperties.getInstance();
- Loader loader = Loader.getInstance();
- // Check tipi registrati
- String tipoClass = className.getRealmContainerCustom(tipo);
- IAutorizzazioneSecurityContainer authEngine = (IAutorizzazioneSecurityContainer) loader.newInstance(tipoClass);
- authEngine.init(this.msgContext.getUrlProtocolContext().getHttpServletRequest(),
- context, protocolFactory);
- AutorizzazioneHttpServletRequest httpServletRequestAuth = new AutorizzazioneHttpServletRequest(this.msgContext.getUrlProtocolContext().getHttpServletRequest(), authEngine);
- this.msgContext.getUrlProtocolContext().updateHttpServletRequest(httpServletRequestAuth);
- }catch(Exception e){
- setSOAPFault(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore, msgDiag, e, "AutorizzazioneSecurityContainerInstance");
- return;
- }
- }
- }
- }
- connettore.setUrlProtocolContext(this.msgContext.getUrlProtocolContext());
- if(ServiceBinding.SOAP.equals(requestMessage.getServiceBinding())){
- try{
- connettore.setSoapAction(requestMessage.castAsSoap().getSoapAction());
- }catch(Exception e){
- setSOAPFault(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore,msgDiag, e, "LetturaSoapAction");
- return;
- }
- }
- connettore.setFromLocation(this.msgContext.getSourceLocation());
- inRequestContext.setConnettore(connettore);
- // Data accettazione richiesta
- inRequestContext.setDataAccettazioneRichiesta(this.msgContext.getDataAccettazioneRichiesta());
- // Data ingresso richiesta
- inRequestContext.setDataElaborazioneMessaggio(this.msgContext.getDataIngressoRichiesta());
- // PdDContext
- inRequestContext.setPddContext(context);
- // Dati Messaggio
- inRequestContext.setMessaggio(requestMessage);
- // Invoke handler
- try{
- GestoreHandlers.inRequest(inRequestContext, msgDiag, logCore);
- }catch(HandlerException e){
- setSOAPFault(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore,msgDiag, e, e.getIdentitaHandler());
- return;
- }catch(Exception e){
- setSOAPFault(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore,msgDiag, e, "InvocazioneInRequestHandler");
- return;
- }
-
-
-
-
-
-
- // ------------- process -----------------------------
- HashMap<String, Object> internalObjects = new HashMap<>();
- try{
- process_engine(inRequestContext,internalObjects,params);
- } catch(TracciamentoException e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "TracciamentoNonRiuscito");
- return;
- } catch(DumpException e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "DumpNonRiuscito");
- return;
- } catch(ProtocolException e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "InstanziazioneProtocolFactoryNonRiuscita");
- return;
- }
-
- try{
- if(context!=null && this.msgContext.getIntegrazione()!=null){
- if(context.containsKey(CostantiPdD.TIPO_PROCESSAMENTO_MTOM_RICHIESTA)){
- this.msgContext.getIntegrazione().setTipoProcessamentoMtomXopRichiesta(
- (String)context.getObject(CostantiPdD.TIPO_PROCESSAMENTO_MTOM_RICHIESTA));
- }
- if(context.containsKey(CostantiPdD.TIPO_PROCESSAMENTO_MTOM_RISPOSTA)){
- this.msgContext.getIntegrazione().setTipoProcessamentoMtomXopRisposta(
- (String)context.getObject(CostantiPdD.TIPO_PROCESSAMENTO_MTOM_RISPOSTA));
- }
- if(context.containsKey(CostantiPdD.TIPO_SICUREZZA_MESSAGGIO_RICHIESTA)){
- this.msgContext.getIntegrazione().setTipoMessageSecurityRichiesta(
- (String)context.getObject(CostantiPdD.TIPO_SICUREZZA_MESSAGGIO_RICHIESTA));
- }
- if(context.containsKey(CostantiPdD.TIPO_SICUREZZA_MESSAGGIO_RISPOSTA)){
- this.msgContext.getIntegrazione().setTipoMessageSecurityRisposta(
- (String)context.getObject(CostantiPdD.TIPO_SICUREZZA_MESSAGGIO_RISPOSTA));
- }
- }
- }catch(Exception e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "FinalizeIntegrationContextRicezioneContenutiApplicativi");
- return;
- }
-
-
-
-
-
-
-
- // ------------- Dump richiesta in ingresso -----------------------------
- if(!internalObjects.containsKey(CostantiPdD.DUMP_RICHIESTA_EFFETTUATO) &&
- Dump.isSistemaDumpDisponibile()){
- try{
- ConfigurazionePdDManager configurazionePdDReader = ConfigurazionePdDManager.getInstance();
-
- if(internalObjects.containsKey(CostantiPdD.DUMP_CONFIG)==false) {
- URLProtocolContext urlProtocolContext = this.msgContext.getUrlProtocolContext();
- if(urlProtocolContext!=null && urlProtocolContext.getInterfaceName()!=null) {
- IDPortaDelegata identificativoPortaDelegata = new IDPortaDelegata();
- identificativoPortaDelegata.setNome(urlProtocolContext.getInterfaceName());
- PortaDelegata portaDelegata = configurazionePdDReader.getPortaDelegataSafeMethod(identificativoPortaDelegata, this.msgContext.getRequestInfo());
- if(portaDelegata!=null) {
- DumpConfigurazione dumpConfig = configurazionePdDReader.getDumpConfigurazione(portaDelegata);
- internalObjects.put(CostantiPdD.DUMP_CONFIG, dumpConfig);
- }
- }
- }
-
- OpenSPCoop2Message msgRichiesta = inRequestContext.getMessaggio();
- if (msgRichiesta!=null) {
-
- Dump dumpApplicativo = getDump(configurazionePdDReader, protocolFactory, internalObjects, msgDiag.getPorta());
- dumpApplicativo.dumpRichiestaIngresso(msgRichiesta,
- inRequestContext.getConnettore().getUrlProtocolContext());
- }
- }catch(DumpException e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "DumpNonRiuscito");
- return;
- }catch(Exception e){
- // Se non riesco ad accedere alla configurazione sicuramente gia' nel messaggio di risposta e' presente l'errore di PdD non correttamente inizializzata
- }
- }
-
-
-
-
-
- // ------------- out-handler -----------------------------
- OutResponseContext outResponseContext = new OutResponseContext(logCore,protocolFactory, null);
- // TipoPorta
- outResponseContext.setTipoPorta(this.msgContext.getTipoPorta());
- outResponseContext.setIdModulo(this.msgContext.getIdModulo());
- // DataUscitaMessaggio
- outResponseContext.setDataElaborazioneMessaggio(DateManager.getDate());
- // PddContext
- outResponseContext.setPddContext(inRequestContext.getPddContext());
- // Informazioni protocollo e di integrazione
- outResponseContext.setProtocollo(this.msgContext.getProtocol());
- outResponseContext.setIntegrazione(this.msgContext.getIntegrazione());
- // Header di trasporto della risposta
- outResponseContext.setResponseHeaders(this.msgContext.getResponseHeaders());
- // Messaggio
- OpenSPCoop2Message msgResponse = this.msgContext.getMessageResponse();
- outResponseContext.setMessaggio(msgResponse);
- // Invoke handler
- try{
- GestoreHandlers.outResponse(outResponseContext, msgDiag, logCore);
- }catch(HandlerException e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, e.getIdentitaHandler());
- return;
- }catch(Exception e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "InvocazioneOutResponseHandler");
- return;
- }
-
-
-
-
- // ---------------- fine gestione ------------------------------
- OpenSPCoop2Message msgRisposta = null;
- try{
- msgRisposta = outResponseContext.getMessaggio();
- boolean rispostaPresente = true;
- OpenSPCoop2Properties properties = OpenSPCoop2Properties.getInstance(); // Puo' non essere inizializzato
- if(properties!=null){
- rispostaPresente = ServicesUtils.verificaRispostaRelazioneCodiceTrasporto202(protocolFactory,OpenSPCoop2Properties.getInstance(), msgRisposta,true);
- }
- if(rispostaPresente){
- this.msgContext.setMessageResponse(msgRisposta);
- }else{
- this.msgContext.setMessageResponse(null);
- msgRisposta = null;
- }
- }catch(Exception e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "FineGestioneRicezioneContenutiApplicativi");
- return;
- }
-
-
-
-
-
-
-
-
-
- // ------------- Dump risposta in uscita-----------------------------
- if(Dump.isSistemaDumpDisponibile()){
- try{
- ConfigurazionePdDManager configurazionePdDReader = ConfigurazionePdDManager.getInstance();
- if (msgRisposta!=null) {
-
- Dump dumpApplicativo = getDump(configurazionePdDReader, protocolFactory, internalObjects, msgDiag.getPorta());
- if(outResponseContext.getResponseHeaders()==null) {
- outResponseContext.setResponseHeaders(new HashMap<>());
- }
- Map<String, List<String>> propertiesTrasporto = outResponseContext.getResponseHeaders();
- ServicesUtils.setGovWayHeaderResponse(requestMessage.getServiceBinding(),
- msgRisposta, OpenSPCoop2Properties.getInstance(),
- propertiesTrasporto, logCore, true, outResponseContext.getPddContext(), this.msgContext.getRequestInfo());
- dumpApplicativo.dumpRispostaUscita(msgRisposta,
- inRequestContext.getConnettore().getUrlProtocolContext(),
- outResponseContext.getResponseHeaders());
- }
- }catch(DumpException e){
- setSOAPFault(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "DumpNonRiuscito");
- }catch(Exception e){
- logError(logCore, e.getMessage(),e);
- // Se non riesco ad accedere alla configurazione sicuramente gia' nel messaggio di risposta e' presente l'errore di PdD non correttamente inizializzata
- }
- }
-
-
- }
-
- private Dump getDump(ConfigurazionePdDManager configurazionePdDReader,
- IProtocolFactory<?> protocolFactory,
- HashMap<String, Object> internalObjects,
- String nomePorta) throws DumpException, DriverRegistroServiziException {
-
- DumpConfigurazione dumpConfig = null;
- if(internalObjects.containsKey(CostantiPdD.DUMP_CONFIG)) {
- dumpConfig = (DumpConfigurazione) internalObjects.get(CostantiPdD.DUMP_CONFIG); // dovrebbe essere stata impostata per la pd/pa specifica
- }
- else {
- dumpConfig = configurazionePdDReader.getDumpConfigurazionePortaDelegata();
- }
-
- ProtocolContext protocolContext = this.msgContext.getProtocol();
- URLProtocolContext urlProtocolContext = this.msgContext.getUrlProtocolContext();
- IDSoggetto soggettoErogatore = null;
- IDServizio idServizio = null;
- IDSoggetto fruitore = null;
- IDSoggetto dominio = null;
- String idRichiesta = null;
- if(protocolContext!=null) {
- if(protocolContext.getTipoServizio()!=null && protocolContext.getServizio()!=null && protocolContext.getVersioneServizio()!=null &&
- protocolContext.getErogatore()!=null && protocolContext.getErogatore().getTipo()!=null && protocolContext.getErogatore().getNome()!=null) {
- idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(protocolContext.getTipoServizio(), protocolContext.getServizio(),
- protocolContext.getErogatore(), protocolContext.getVersioneServizio());
- }
- dominio = protocolContext.getDominio();
- idRichiesta = protocolContext.getIdRichiesta();
- if(protocolContext.getFruitore()!=null && protocolContext.getFruitore().getTipo()!=null && protocolContext.getFruitore().getNome()!=null) {
- fruitore = protocolContext.getFruitore();
- }
- }
-
- if(dominio == null || fruitore==null || idServizio == null) {
- if(urlProtocolContext!=null && urlProtocolContext.getInterfaceName()!=null) {
- IDPortaDelegata identificativoPortaDelegata = new IDPortaDelegata();
- identificativoPortaDelegata.setNome(urlProtocolContext.getInterfaceName());
- PortaDelegata portaDelegata = null;
- try {
- portaDelegata = configurazionePdDReader.getPortaDelegataSafeMethod(identificativoPortaDelegata, this.msgContext.getRequestInfo());
- }catch(Exception e) {
- // ignore
- }
- if(portaDelegata!=null) {
- // Aggiorno tutti
- soggettoErogatore = new IDSoggetto(portaDelegata.getSoggettoErogatore().getTipo(),portaDelegata.getSoggettoErogatore().getNome());
- if(portaDelegata.getServizio()!=null) {
- idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(portaDelegata.getServizio().getTipo(),portaDelegata.getServizio().getNome(),
- soggettoErogatore, portaDelegata.getServizio().getVersione());
- }
- dominio = new IDSoggetto(portaDelegata.getTipoSoggettoProprietario(), portaDelegata.getNomeSoggettoProprietario());
- fruitore = new IDSoggetto(portaDelegata.getTipoSoggettoProprietario(), portaDelegata.getNomeSoggettoProprietario());
- try {
- dominio.setCodicePorta(RegistroServiziManager.getInstance().getDominio(dominio, null, protocolFactory, this.msgContext.getRequestInfo()));
- }catch(Exception e) {
- dominio = OpenSPCoop2Properties.getInstance().getIdentitaPortaDefault(protocolFactory.getProtocol(), this.msgContext.getRequestInfo());
- }
- }
- }
- }
- if(idServizio!=null) {
- if(protocolContext!=null && protocolContext.getAzione()!=null) {
- idServizio.setAzione(protocolContext.getAzione());
- }
- else if(this.msgContext.getRequestInfo()!=null &&
- this.msgContext.getRequestInfo().getIdServizio()!=null && this.msgContext.getRequestInfo().getIdServizio().getAzione()!=null) {
- idServizio.setAzione(this.msgContext.getRequestInfo().getIdServizio().getAzione());
- }
- }
- if(dominio==null) {
- dominio = OpenSPCoop2Properties.getInstance().getIdentitaPortaDefault(protocolFactory.getProtocol(), this.msgContext.getRequestInfo());
- }
- Dump dumpApplicativo = null;
- if(idServizio!=null){
- dumpApplicativo = new Dump(dominio,
- this.msgContext.getIdModulo(),
- idRichiesta, fruitore, idServizio,
- this.msgContext.getTipoPorta(), nomePorta, this.msgContext.getPddContext(),
- null,null,
- dumpConfig);
- }else{
- dumpApplicativo = new Dump(dominio,
- this.msgContext.getIdModulo(),this.msgContext.getTipoPorta(), nomePorta,this.msgContext.getPddContext(),
- null,null,
- dumpConfig);
- }
-
- return dumpApplicativo;
- }
-
- private void setSOAPFault(IntegrationFunctionError integrationFunctionError, Logger logCore, MsgDiagnostico msgDiag, Exception e, String posizione){
-
- HandlerException he = null;
- if(e!=null && (e instanceof HandlerException)){
- he = (HandlerException) e;
- }
-
- if(msgDiag!=null){
- if(he!=null){
- if(he.isEmettiDiagnostico()){
- msgDiag.logErroreGenerico(e, posizione);
- }
- }else{
- msgDiag.logErroreGenerico(e, posizione);
- }
- }
- else {
- if(e!=null) {
- logError(logCore, posizione+": "+e.getMessage(),e);
- }
- else {
- logError(logCore, posizione);
- }
- }
-
- IntegrationFunctionError ifError = integrationFunctionError;
- if(he!=null && he.getIntegrationFunctionError()!=null) {
- ifError = he.getIntegrationFunctionError();
- }
- ErroreIntegrazione erroreIntegrazioneGenerato = null;
- if(he!=null){
- erroreIntegrazioneGenerato = he.convertToErroreIntegrazione();
- }
-
- if (this.msgContext.isGestioneRisposta()) {
- String posizioneFault = null;
- if(e!=null) {
- posizioneFault = posizione+": "+e.getMessage();
- }
- else {
- posizioneFault = posizione;
- }
- if(erroreIntegrazioneGenerato==null) {
- erroreIntegrazioneGenerato = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(posizioneFault);
- }
- OpenSPCoop2Message messageFault = this.generatoreErrore.build(this.msgContext.getPddContext(), ifError,
- erroreIntegrazioneGenerato,
- e, null);
- this.msgContext.setMessageResponse(messageFault);
- }
- }
-
- private boolean checkInizializzazione(Logger logCore, ConfigurazionePdDManager configurazionePdDReader, RegistroServiziManager registroServiziReader,
- PdDContext pddContext) {
- if (!OpenSPCoop2Startup.initialize) {
- String msgErrore = "Inizializzazione di GovWay non correttamente effettuata";
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO+ "] "+msgErrore);
- try{
- // provo ad emetter un diagnostico
- if(this.msgContext.getMsgDiagnostico()!=null){
- this.msgContext.getMsgDiagnostico().logErroreGenerico(msgErrore,"InizializzazioneGovWay");
- }
- }catch(Throwable t){logError(logCore, "Emissione diagnostico per errore inizializzazione non riuscita: "+t.getMessage(),t);}
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_NOT_INITIALIZED,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_501_PDD_NON_INIZIALIZZATA),null,null)));
- }
- return false;
- }
- if (!TimerMonitoraggioRisorseThread.isRisorseDisponibili()) {
- String msgErrore = "Risorse di sistema non disponibili: "+ TimerMonitoraggioRisorseThread.getRisorsaNonDisponibile().getMessage();
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO+ "] "+msgErrore,TimerMonitoraggioRisorseThread.getRisorsaNonDisponibile());
- try{
- // provo ad emetter un diagnostico
- if(this.msgContext.getMsgDiagnostico()!=null){
- this.msgContext.getMsgDiagnostico().logErroreGenerico(msgErrore,"InizializzazioneRisorseGovWay");
- }
- }catch(Throwable t){logError(logCore, "Emissione diagnostico per errore inizializzazione non riuscita: "+t.getMessage(),t);}
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_532_RISORSE_NON_DISPONIBILI),null,null)));
- }
- return false;
- }
- if (!TimerThresholdThread.freeSpace) {
- String msgErrore = "Non sono disponibili abbastanza risorse per la gestione della richiesta";
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO+ "] "+msgErrore);
- try{
- // provo ad emetter un diagnostico
- if(this.msgContext.getMsgDiagnostico()!=null){
- this.msgContext.getMsgDiagnostico().logErroreGenerico(msgErrore,"DisponibilitaRisorseGovWay");
- }
- }catch(Throwable t){logError(logCore, "Emissione diagnostico per errore inizializzazione non riuscita: "+t.getMessage(),t);}
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_533_RISORSE_DISPONIBILI_LIVELLO_CRITICO),null,null)));
- }
- return false;
- }
- if (!Tracciamento.tracciamentoDisponibile) {
- String msgErrore = "Tracciatura non disponibile: "+ Tracciamento.motivoMalfunzionamentoTracciamento.getMessage();
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO
- + "] "+msgErrore,Tracciamento.motivoMalfunzionamentoTracciamento);
- try{
- // provo ad emetter un diagnostico
- if(this.msgContext.getMsgDiagnostico()!=null){
- this.msgContext.getMsgDiagnostico().logErroreGenerico(msgErrore,"Tracciamento");
- }
- }catch(Throwable t){logError(logCore, "Emissione diagnostico per errore inizializzazione non riuscita: "+t.getMessage(),t);}
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_545_TRACCIATURA_NON_FUNZIONANTE),null,null)));
- }
- return false;
- }
- if (!MsgDiagnostico.gestoreDiagnosticaDisponibile) {
- String msgErrore = "Sistema di diagnostica non disponibile: "+ MsgDiagnostico.motivoMalfunzionamentoDiagnostici.getMessage();
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO
- + "] "+msgErrore,MsgDiagnostico.motivoMalfunzionamentoDiagnostici);
- try{
- // provo ad emetter un diagnostico lo stesso (molto probabilmente non ci riuscirร essendo proprio la risorsa diagnostica non disponibile)
- if(this.msgContext.getMsgDiagnostico()!=null){
- this.msgContext.getMsgDiagnostico().logErroreGenerico(msgErrore,"Diagnostica");
- }
- }catch(Throwable t){logDebug(logCore, "Emissione diagnostico per errore inizializzazione non riuscita: "+t.getMessage(),t);}
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_546_DIAGNOSTICA_NON_FUNZIONANTE),null,null)));
- }
- return false;
- }
- if (!Dump.isSistemaDumpDisponibile()) {
- String msgErrore = "Sistema di dump dei contenuti applicativi non disponibile: "+ Dump.getMotivoMalfunzionamentoDump().getMessage();
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO
- + "] "+msgErrore,Dump.getMotivoMalfunzionamentoDump());
- try{
- // provo ad emetter un diagnostico
- if(this.msgContext.getMsgDiagnostico()!=null){
- this.msgContext.getMsgDiagnostico().logErroreGenerico(msgErrore,"Dump");
- }
- }catch(Throwable t){logError(logCore, "Emissione diagnostico per errore inizializzazione non riuscita: "+t.getMessage(),t);}
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_547_DUMP_CONTENUTI_APPLICATIVI_NON_FUNZIONANTE),null,null)));
- }
- return false;
- }
- // Check Configurazione (XML)
- try{
- configurazionePdDReader.verificaConsistenzaConfigurazione();
- }catch(Exception e){
- String msgErrore = "Riscontrato errore durante la verifica della consistenza della configurazione";
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO
- + "] "+msgErrore,e);
- try{
- // provo ad emetter un diagnostico
- if(this.msgContext.getMsgDiagnostico()!=null){
- this.msgContext.getMsgDiagnostico().logErroreGenerico(msgErrore,"CheckConfigurazioneGovWay");
- }
- }catch(Throwable t){logError(logCore, "Emissione diagnostico per errore inizializzazione non riuscita: "+t.getMessage(),t);}
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),null,null)));
- }
- return false;
- }
- // Check RegistroServizi (XML)
- try{
- registroServiziReader.verificaConsistenzaRegistroServizi();
- }catch(Exception e){
- String msgErrore = "Riscontrato errore durante la verifica del registro dei servizi";
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO
- + "] "+msgErrore,e);
- try{
- // provo ad emetter un diagnostico
- if(this.msgContext.getMsgDiagnostico()!=null){
- this.msgContext.getMsgDiagnostico().logErroreGenerico(msgErrore,"CheckRegistroServizi");
- }
- }catch(Throwable t){logError(logCore, "Emissione diagnostico per errore inizializzazione non riuscita: "+t.getMessage(),t);}
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_534_REGISTRO_DEI_SERVIZI_NON_DISPONIBILE),null,null)));
- }
- return false;
- }
-
- return true;
- }
- private void process_engine(InRequestContext inRequestContext,HashMap<String, Object> internalObjects,Object ... params)
- throws TracciamentoException, DumpException, ProtocolException {
-
-
- /* ------------ Lettura parametri della richiesta ------------- */
- // Messaggio di ingresso
- OpenSPCoop2Message requestMessage = inRequestContext.getMessaggio();
-
- // Logger
- Logger logCore = inRequestContext.getLogCore();
-
- // Data Ingresso Richiesta
- Date dataIngressoRichiesta = this.msgContext.getDataIngressoRichiesta();
-
- // ID Transazione
- String idTransazione = PdDContext.getValue(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, inRequestContext.getPddContext());
-
- // RequestInfo
- RequestInfo requestInfo = this.msgContext.getRequestInfo();
-
- // Parametri della porta delegata invocata
- URLProtocolContext urlProtocolContext = this.msgContext.getUrlProtocolContext();
- // Credenziali utilizzate nella richiesta
- Credenziali credenziali = this.msgContext.getCredenziali();
- // Autenticazione/Autorizzazione registrate
- ClassNameProperties className = ClassNameProperties.getInstance();
- // PropertiesReader
- OpenSPCoop2Properties propertiesReader = OpenSPCoop2Properties.getInstance();
- PdDContext pddContext = inRequestContext.getPddContext();
- if (propertiesReader == null) {
- String msg = "Inizializzazione di GovWay non correttamente effettuata: OpenSPCoopProperties";
- logError(logCore, msg);
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse(this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_NOT_INITIALIZED,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msg,CodiceErroreIntegrazione.CODICE_501_PDD_NON_INIZIALIZZATA), null, null));
- }
- return;
- }
- // Configurazione PdD Reader
- ConfigurazionePdDManager configurazionePdDReader = ConfigurazionePdDManager.getInstance();
- // RegistroServizi Reader
- RegistroServiziManager registroServiziReader = RegistroServiziManager.getInstance();
- if(requestInfo==null) {
- String msg = "Inizializzazione di GovWay non correttamente effettuata: RequestInfo is null";
- logError(logCore, msg);
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse(this.generatoreErrore.build(pddContext, IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msg), null, null));
- }
- return;
- }
-
- // IdentificativoPdD
- IDSoggetto identitaPdD = requestInfo.getIdentitaPdD();
- // ProtocolFactory
- IProtocolFactory<?> protocolFactory = requestInfo.getProtocolFactory();
- ITraduttore traduttore = protocolFactory.createTraduttore();
- IProtocolManager protocolManager = protocolFactory.createProtocolManager();
- IProtocolConfiguration protocolConfig = protocolFactory.createProtocolConfiguration();
-
- // ProprietaErroreApplicativo
- ProprietaErroreApplicativo proprietaErroreAppl = propertiesReader
- .getProprietaGestioneErrorePD(protocolManager);
- proprietaErroreAppl.setDominio(identitaPdD.getCodicePorta());
- proprietaErroreAppl.setIdModulo(this.msgContext.getIdModulo());
- if(this.msgContext.isForceFaultAsXML()){
- proprietaErroreAppl.setFaultAsXML(true); // es. se siamo in una richiesta http senza SOAP, un SoapFault non ha senso
- }
- this.msgContext.setProprietaErroreAppl(proprietaErroreAppl);
- this.generatoreErrore.updateProprietaErroreApplicativo(proprietaErroreAppl);
-
- // MESSAGGIO DI LIBRERIA
- ImbustamentoMessage imbustamentoMSG = new ImbustamentoMessage();
-
- // Context di risposta
- this.msgContext.setProtocol(new ProtocolContext());
- this.msgContext.getProtocol().setDominio(this.msgContext.getIdentitaPdD());
- this.msgContext.setIntegrazione(new IntegrationContext());
-
-
-
-
-
- /* ------------ Controllo inizializzazione OpenSPCoop ------------------ */
- if(!checkInizializzazione(logCore, configurazionePdDReader, registroServiziReader, pddContext)) {
- return;
- }
-
-
-
- // Logger dei messaggi diagnostici
- String nomePorta = null;
- if(requestInfo.getProtocolContext().getInterfaceName()!=null){
- nomePorta = requestInfo.getProtocolContext().getInterfaceName();
- }
- else{
- nomePorta = urlProtocolContext.getFunctionParameters() + "_urlInvocazione("+ urlProtocolContext.getUrlInvocazione_formBased() + ")";
- }
- MsgDiagnostico msgDiag = MsgDiagnostico.newInstance(TipoPdD.DELEGATA,identitaPdD, this.msgContext.getIdModulo(),nomePorta,requestInfo,configurazionePdDReader);
- if(msgDiag==null) {
- String msg = "Inizializzazione di GovWay non correttamente effettuata: MsgDiagnostico is null";
- logError(logCore, msg);
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse(this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_NOT_INITIALIZED,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msg,CodiceErroreIntegrazione.CODICE_501_PDD_NON_INIZIALIZZATA), null, null));
- }
- return;
- }
- this.msgContext.setMsgDiagnostico(msgDiag); // aggiorno msg diagnostico
- msgDiag.setPddContext(inRequestContext.getPddContext(), protocolFactory);
- msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_CONTENUTI_APPLICATIVI);
-
- // set credenziali
- setCredenziali(credenziali, msgDiag);
- // inizializzazione risorse statiche
- try {
- if (RicezioneContenutiApplicativi.initializeService == false) {
- msgDiag.mediumDebug("Inizializzazione risorse statiche...");
- RicezioneContenutiApplicativi.initializeService(configurazionePdDReader,className,propertiesReader, logCore);
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"InizializzazioneRisorseServizioRicezioneContenutiApplicativi");
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.GOVWAY_NOT_INITIALIZED,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_501_PDD_NON_INIZIALIZZATA),e,null)));
- }
- return;
- }
- // Loader classi dinamiche
- Loader loader = Loader.getInstance();
- PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
-
- // ConnectorInMessage
- @SuppressWarnings("unused")
- ConnectorInMessage connectorInMessage = null;
- if(params!=null){
- for (int i = 0; i < params.length; i++) {
- if(params[i]!=null && (params[i] instanceof ConnectorInMessage) ){
- connectorInMessage = (ConnectorInMessage) params[i];
- break;
- }
- }
- }
-
- Transaction transaction = null;
- try{
- transaction = TransactionContext.getTransaction(idTransazione);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"getTransaction");
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext, IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_500_ERRORE_INTERNO),e,null)));
- }
- return;
- }
-
-
-
- // --------- OPENSPCOOPSTATE ---------
- OpenSPCoopState openspcoopstate = null;
- try{ // finally in fondo, vedi #try-finally-openspcoopstate#
-
- msgDiag.mediumDebug("Inizializzazione connessione al database...");
- try {
- openspcoopstate = new OpenSPCoopStateful();
- openspcoopstate.setUseConnection(false); // gestione stateless per default
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(), idTransazione);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"openspcoopstate.initResource()");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION), e,null)));
- }
- return;
- }
-
- // Refresh reader
- registroServiziReader = registroServiziReader.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
- configurazionePdDReader = configurazionePdDReader.refreshState(registroServiziReader);
- msgDiag.updateState(configurazionePdDReader);
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Identificazione porta delegata e soggetto fruitore...");
-
- /* ------------ Identificazione Porta Delegata e SoggettoFruitore */
- msgDiag.mediumDebug("Identificazione porta delegata e soggetto fruitore...");
- IDPortaDelegata identificativoPortaDelegata = null;
- PortaDelegata portaDelegata = null;
- String nomeUtilizzatoPerErrore = null;
- try {
- if(urlProtocolContext.getInterfaceName()!=null) {
- identificativoPortaDelegata = new IDPortaDelegata();
- identificativoPortaDelegata.setNome(urlProtocolContext.getInterfaceName());
- portaDelegata = configurazionePdDReader.getPortaDelegata(identificativoPortaDelegata, requestInfo);
- nomeUtilizzatoPerErrore = identificativoPortaDelegata.getNome();
- }
- else {
- throw new Exception("InterfaceName non presente");
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"getPorta");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_502_IDENTIFICAZIONE_PORTA), e,null)));
- }
- return;
- }
- // Raccolgo dati
- IDSoggetto soggettoFruitore = null;
- try {
- if(portaDelegata!=null) {
- soggettoFruitore = new IDSoggetto(portaDelegata.getTipoSoggettoProprietario(), portaDelegata.getNomeSoggettoProprietario());
- soggettoFruitore.setCodicePorta(configurazionePdDReader.getIdentificativoPorta(soggettoFruitore, protocolFactory, requestInfo));
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"getIdentificativoPorta");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_502_IDENTIFICAZIONE_PORTA), e,null)));
- }
- return;
- }
- if(identificativoPortaDelegata.getIdentificativiFruizione()==null) {
- identificativoPortaDelegata.setIdentificativiFruizione(new IdentificativiFruizione());
- }
- identificativoPortaDelegata.getIdentificativiFruizione().setSoggettoFruitore(soggettoFruitore);
- if(soggettoFruitore!=null) {
- identitaPdD = soggettoFruitore; // la PdD Assume l'identita del soggetto
- }
- this.msgContext.getProtocol().setDominio(identitaPdD);
- this.msgContext.setIdentitaPdD(identitaPdD);
- // che possiede la Porta Delegata ID Porta Delegata
- this.msgContext.getIntegrazione().setIdPD(identificativoPortaDelegata);
- // altri contesti
- msgDiag.setDominio(identitaPdD); // imposto anche il dominio nel msgDiag
- msgDiag.setFruitore(soggettoFruitore);
- msgDiag.addKeyword(CostantiPdD.KEY_PORTA_DELEGATA, identificativoPortaDelegata.getNome());
- msgDiag.addKeywords(soggettoFruitore);
- proprietaErroreAppl.setDominio(identitaPdD.getCodicePorta()); // imposto
- // requestInfo
- requestInfo.setIdentitaPdD(identitaPdD);
- // anche il dominio per gli errori
- this.msgContext.setProprietaErroreAppl(proprietaErroreAppl);
- // GeneratoreErrore
- this.generatoreErrore.updateDominio(identitaPdD);
- this.generatoreErrore.updateProprietaErroreApplicativo(proprietaErroreAppl);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Lettura header di integrazione...");
-
- /* --------------- Header Integrazione --------------- */
- msgDiag.mediumDebug("Lettura header di integrazione...");
- HeaderIntegrazione headerIntegrazioneRichiesta = null;
- if (this.msgContext.getHeaderIntegrazioneRichiesta() != null)
- headerIntegrazioneRichiesta = this.msgContext.getHeaderIntegrazioneRichiesta(); // prendo quello dell'IntegrationManager
- else
- headerIntegrazioneRichiesta = new HeaderIntegrazione(idTransazione);
- HeaderIntegrazione headerIntegrazioneRisposta = null;
- String[] tipiIntegrazionePD = null;
- try {
- tipiIntegrazionePD = configurazionePdDReader.getTipiIntegrazione(portaDelegata);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e, "getTipiIntegrazione(pd)");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
- if (tipiIntegrazionePD == null){
- if(RicezioneContenutiApplicativi.defaultPerProtocolloGestoreIntegrazionePD.containsKey(protocolFactory.getProtocol()))
- tipiIntegrazionePD = RicezioneContenutiApplicativi.defaultPerProtocolloGestoreIntegrazionePD.get(protocolFactory.getProtocol());
- else
- tipiIntegrazionePD = RicezioneContenutiApplicativi.defaultGestoriIntegrazionePD;
- }
- InRequestPDMessage inRequestPDMessage = new InRequestPDMessage();
- inRequestPDMessage.setBustaRichiesta(null); // non lo si conosce l'aggiorno appena letto le informazioni dal registro
- inRequestPDMessage.setMessage(requestMessage);
- inRequestPDMessage.setUrlProtocolContext(this.msgContext.getUrlProtocolContext());
- inRequestPDMessage.setPortaDelegata(portaDelegata);
- inRequestPDMessage.setSoggettoPropeprietarioPortaDelegata(soggettoFruitore);
- for (int i = 0; i < tipiIntegrazionePD.length; i++) {
- try {
-
- IGestoreIntegrazionePD gestore = null;
- try {
- gestore = (IGestoreIntegrazionePD) pluginLoader.newIntegrazionePortaDelegata(tipiIntegrazionePD[i]);
- }catch(Exception e){
- throw e;
- }
- if(gestore!=null){
- String classType = null;
- try {
- classType = gestore.getClass().getName();
- AbstractCore.init(gestore, pddContext, protocolFactory);
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante l'inizializzazione della classe ["+ classType
- + "] da utilizzare per la gestione dell'integrazione delle fruizioni di tipo ["+ tipiIntegrazionePD[i] + "]: " + e.getMessage());
- }
- gestore.readInRequestHeader(headerIntegrazioneRichiesta,inRequestPDMessage);
- } else {
- msgDiag.logErroreGenerico("Lettura Gestore header di integrazione ["
- + tipiIntegrazionePD[i]+ "] non riuscita: non inizializzato",
- "gestoriIntegrazionePD.get("+tipiIntegrazionePD[i]+")");
- }
- } catch (Exception e) {
- logDebug(logCore, "Errore durante la lettura dell'header di integrazione ["+ tipiIntegrazionePD[i]
- + "]: "+ e.getMessage(),e);
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_HEADER_INTEGRAZIONE,tipiIntegrazionePD[i]);
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("headerIntegrazione.letturaFallita");
- }
- }
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Raccolta dati Gestione CORS ...");
- // NOTA: i dati CORS sono memorizzati solamente nella porta principale e non in quelle di eventuali azioni delegate.
- // deve quindi essere recuperata prima di sostituire la pd con una piรน specifica
- CorsConfigurazione cors = null;
- HttpServletRequest httpServletRequest = null;
- boolean effettuareGestioneCORS = false;
- try {
- if(requestInfo!=null && requestInfo.getProtocolContext()!=null) {
- httpServletRequest = requestInfo.getProtocolContext().getHttpServletRequest();
- }
-
- if(httpServletRequest!=null && HttpRequestMethod.OPTIONS.name().equalsIgnoreCase(httpServletRequest.getMethod())) {
-
- Object nomePortaObject = pddContext.getObject(CostantiPdD.NOME_PORTA_INVOCATA);
- String nomePortaS = null;
- if(nomePortaObject instanceof String) {
- nomePortaS = (String) nomePortaObject;
- }
- PortaDelegata pdDefault = null;
- if(nomePortaS!=null) {
- IDPortaDelegata idPDdefault = new IDPortaDelegata();
- idPDdefault.setNome(nomePortaS);
- pdDefault = configurazionePdDReader.getPortaDelegataSafeMethod(idPDdefault, requestInfo);
- }
- if(pdDefault!=null) {
- cors = configurazionePdDReader.getConfigurazioneCORS(pdDefault);
- }
- else if(portaDelegata!=null) {
- cors = configurazionePdDReader.getConfigurazioneCORS(portaDelegata);
- }
- else {
- cors = configurazionePdDReader.getConfigurazioneCORS();
- }
- }
- else {
- cors = new CorsConfigurazione();
- cors.setStato(StatoFunzionalita.DISABILITATO);
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e, "configurazionePdDReader.getConfigurazioneCORS(pd)");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Lettura servizio associato alla PD invocata...");
-
-
-
- /*
- * ------------- Lettura azione associato alla PD invocata ed eventuale aggiornamento della pd utilizzata ------------
- */
- msgDiag.mediumDebug("Lettura azione associato alla PD invocata...");
- String idModuloInAttesa = null;
- if (this.msgContext.isGestioneRisposta())
- idModuloInAttesa = this.msgContext.getIdModulo();
- RichiestaDelegata richiestaDelegata = new RichiestaDelegata(
- identificativoPortaDelegata, null,
- idModuloInAttesa, proprietaErroreAppl, identitaPdD);
- richiestaDelegata.setIntegrazione(this.msgContext.getIntegrazione());
- richiestaDelegata.setProtocol(this.msgContext.getProtocol());
- IDServizio idServizio = null;
- try {
- if(portaDelegata==null) {
- throw new Exception("PortaDelgata non trovata");
- }
- IDSoggetto soggettoErogatore = new IDSoggetto(portaDelegata.getSoggettoErogatore().getTipo(),portaDelegata.getSoggettoErogatore().getNome());
- idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(portaDelegata.getServizio().getTipo(),portaDelegata.getServizio().getNome(),
- soggettoErogatore, portaDelegata.getServizio().getVersione());
- if(requestInfo.getIdServizio()!=null && requestInfo.getIdServizio().getAzione()!=null){
- // gia identificata
- idServizio.setAzione(requestInfo.getIdServizio().getAzione());
- // aggiorno anche codice porta erogatore gia' identificato
- if(requestInfo.getIdServizio().getSoggettoErogatore()!=null) {
- idServizio.getSoggettoErogatore().setCodicePorta(requestInfo.getIdServizio().getSoggettoErogatore().getCodicePorta());
- }
- }
- else{
- idServizio.setAzione(configurazionePdDReader.getAzione(portaDelegata, urlProtocolContext, requestInfo, requestMessage, null,
- headerIntegrazioneRichiesta, this.msgContext.getIdModulo().endsWith(IntegrationManager.ID_MODULO), protocolFactory));
- }
- } catch (IdentificazioneDinamicaException e) {
-
- boolean throwFault = true;
- if(StatoFunzionalita.ABILITATO.equals(cors.getStato()) && this.msgContext.isGestioneRisposta()) {
- throwFault = false;
- }
- if(throwFault) {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.OPERAZIONE_NON_INDIVIDUATA, "true");
-
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("identificazioneDinamicaAzioneNonRiuscita");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.OPERATION_UNDEFINED,
- ErroriIntegrazione.ERRORE_403_AZIONE_NON_IDENTIFICATA.getErroreIntegrazione(),e,null)));
- }
- return;
- }
- else {
- effettuareGestioneCORS = true;
- }
-
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("identificazioneDinamicaAzioneNonRiuscita");
- logError(logCore, msgDiag.getMessaggio_replaceKeywords("identificazioneDinamicaAzioneNonRiuscita"),e);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
- try {
- if(idServizio!=null && idServizio.getSoggettoErogatore()!=null &&
- idServizio.getSoggettoErogatore().getCodicePorta()==null) {
- idServizio.getSoggettoErogatore().setCodicePorta(registroServiziReader.getDominio(idServizio.getSoggettoErogatore(), null, protocolFactory, requestInfo));
- }
-
- // aggiorno idServizio
- richiestaDelegata.setIdServizio(idServizio);
- if(identificativoPortaDelegata.getIdentificativiFruizione()!=null) {
- identificativoPortaDelegata.getIdentificativiFruizione().setIdServizio(idServizio);
- }
-
- // aggiorno informazioni dell'header di integrazione della risposta
- headerIntegrazioneRisposta = new HeaderIntegrazione(idTransazione);
- if(soggettoFruitore!=null) {
- headerIntegrazioneRisposta.getBusta().setTipoMittente(soggettoFruitore.getTipo());
- headerIntegrazioneRisposta.getBusta().setMittente(soggettoFruitore.getNome());
- }
- headerIntegrazioneRisposta.getBusta().setTipoDestinatario(richiestaDelegata.getIdServizio().getSoggettoErogatore().getTipo());
- headerIntegrazioneRisposta.getBusta().setDestinatario(richiestaDelegata.getIdServizio().getSoggettoErogatore().getNome());
- headerIntegrazioneRisposta.getBusta().setTipoServizio(richiestaDelegata.getIdServizio().getTipo());
- headerIntegrazioneRisposta.getBusta().setServizio(richiestaDelegata.getIdServizio().getNome());
- headerIntegrazioneRisposta.getBusta().setVersioneServizio(richiestaDelegata.getIdServizio().getVersione());
- headerIntegrazioneRisposta.getBusta().setAzione(richiestaDelegata.getIdServizio().getAzione());
- if (headerIntegrazioneRichiesta!=null && headerIntegrazioneRichiesta.getBusta() != null
- && headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() != null) {
- // per profilo asincrono asimmetrico e simmetrico
- headerIntegrazioneRisposta.getBusta().setRiferimentoMessaggio(headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio());
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e, "configurazionePdDReader.letturaDatiServizioServizioNonRiuscita(pd)");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
- msgDiag.setServizio(richiestaDelegata.getIdServizio());
- msgDiag.addKeywords(richiestaDelegata.getIdServizio());
-
-
-
-
-
- // Gestione CORS
-
- if(!effettuareGestioneCORS && StatoFunzionalita.ABILITATO.equals(cors.getStato()) &&
- richiestaDelegata!=null && richiestaDelegata.getIdServizio()!=null &&
- richiestaDelegata.getIdServizio().getAzione()==null) {
- if(ServiceBinding.REST.equals(requestInfo.getIntegrationServiceBinding())) {
- // in rest una risorsa deve essere riconsociuta
- if(StatoFunzionalita.ABILITATO.equals(cors.getStato()) && this.msgContext.isGestioneRisposta()) {
- effettuareGestioneCORS = true;
- }
- }
- else {
- boolean azioneErrata = false;
- Servizio infoServizio = null;
- try {
- infoServizio = registroServiziReader.getInfoServizio(soggettoFruitore, richiestaDelegata.getIdServizio(),null,false, true, requestInfo);
- } catch (DriverRegistroServiziAzioneNotFound e) {
- azioneErrata = true;
- } catch (Throwable e) {
- // ignore
- }
- if (infoServizio == null) {
- try {
- infoServizio = registroServiziReader.getInfoServizioCorrelato(soggettoFruitore,richiestaDelegata.getIdServizio(),null, true, requestInfo);
- } catch (DriverRegistroServiziAzioneNotFound e) {
- azioneErrata = true;
- } catch (Throwable e) {
- // ignore
- }
- }
- if(azioneErrata) {
- effettuareGestioneCORS = true;
- }
- }
- }
-
- boolean corsTrasparente = false;
-
- if(!effettuareGestioneCORS) {
- if(pddContext.containsKey(CostantiPdD.CORS_PREFLIGHT_REQUEST_SOAP)) {
- effettuareGestioneCORS = true;
- }
- else {
- // devo verificare se si tratta di una azione matched poichรจ รจ stato inserito un tipo http method 'qualsiasi'
- if(propertiesReader.isGestioneCORS_resourceHttpMethodQualsiasi_ricezioneContenutiApplicativi()) {
- if(cors!=null &&
- StatoFunzionalita.ABILITATO.equals(cors.getStato()) &&
- TipoGestioneCORS.GATEWAY.equals(cors.getTipo()) &&
- this.msgContext.isGestioneRisposta()) {
- if(idServizio!=null && idServizio.getAzione()!=null) {
- try {
- RegistroServiziManager registroServiziManager = RegistroServiziManager.getInstance();
- AccordoServizioParteSpecifica asps = registroServiziManager.getAccordoServizioParteSpecifica(idServizio, null, false, requestInfo);
- if(asps!=null) {
- AccordoServizioParteComune aspc = registroServiziManager.getAccordoServizioParteComune(IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune()), null, false, false, requestInfo);
- if(aspc!=null && org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(aspc.getServiceBinding())) {
- if(aspc.sizeResourceList()>0) {
- for (Resource resource : aspc.getResourceList()) {
- if(idServizio.getAzione().equals(resource.getNome())) {
- if(resource.getMethod()==null){
- effettuareGestioneCORS = true;
- }
- break;
- }
- }
- }
- }
- }
- }catch(Throwable tIgnore) {
- // ignore
- }
- }
- }
- }
- }
- }
-
- if(effettuareGestioneCORS) {
-
- if(TipoGestioneCORS.GATEWAY.equals(cors.getTipo())) {
-
- CORSFilter corsFilter = new CORSFilter(logCore, cors);
- try {
- CORSWrappedHttpServletResponse res = new CORSWrappedHttpServletResponse(false);
- corsFilter.doCORS(httpServletRequest, res, CORSRequestType.PRE_FLIGHT, true);
- if(this.msgContext.getResponseHeaders()==null) {
- this.msgContext.setResponseHeaders(new HashMap<>());
- }
- this.msgContext.getResponseHeaders().putAll(res.getHeadersValues());
- this.msgContext.setMessageResponse(res.buildMessage());
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.CORS_PREFLIGHT_REQUEST_VIA_GATEWAY, "true");
- }catch(Exception e) {
- // un eccezione non dovrebbe succedere
- msgDiag.logErroreGenerico(e, "gestioneCORS(pd)");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
-
- openspcoopstate.releaseResource();
- return;
-
- }
- else {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.CORS_PREFLIGHT_REQUEST_TRASPARENTE, "true");
- corsTrasparente = true;
-
- }
-
- }
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Autorizzazione canale ...");
- ConfigurazioneCanaliNodo configurazioneCanaliNodo = null;
- try {
- configurazioneCanaliNodo = configurazionePdDReader.getConfigurazioneCanaliNodo();
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e, "configurazionePdDReader.getConfigurazioneCanaliNodo()");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
- boolean canaleNonAutorizzato = false;
- try {
- if(configurazioneCanaliNodo!=null && configurazioneCanaliNodo.isEnabled()) {
-
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, "");
- msgDiag.logPersonalizzato("autorizzazioneCanale.inCorso");
-
- String canaleApiInvocata = null;
- if(portaDelegata!=null) {
- String canalePorta = portaDelegata.getCanale();
- if(canalePorta!=null && !"".equals(canalePorta)) {
- canaleApiInvocata = canalePorta;
- }
- else {
- try {
- AccordoServizioParteSpecifica asps = registroServiziReader.getAccordoServizioParteSpecifica(idServizio, null, false, requestInfo);
- if(asps!=null) {
- AccordoServizioParteComune aspc = registroServiziReader.getAccordoServizioParteComune(IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune()), null, false, false, requestInfo);
- if(aspc!=null) {
- String canaleApi = aspc.getCanale();
- if(canaleApi!=null && !"".equals(canaleApi)) {
- canaleApiInvocata = canaleApi;
- }
- }
- }
- }catch(DriverRegistroServiziNotFound notFound) {
- // saranno segnalati altri errori dovuti al non riconoscimento del servizio
- }
- }
-
- if(canaleApiInvocata==null || "".equals(canaleApiInvocata)) {
- canaleApiInvocata = configurazioneCanaliNodo.getCanaleDefault();
- }
-
- if(!configurazioneCanaliNodo.getCanaliNodo().contains(canaleApiInvocata)) {
- canaleNonAutorizzato = true;
- String dettaglio=" (nodo '"+configurazioneCanaliNodo.getIdNodo()+"':"+configurazioneCanaliNodo.getCanaliNodo()+" api-invocata:"+canaleApiInvocata+")";
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, dettaglio);
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_AUTORIZZAZIONE, "true");
- throw new Exception("L'API invocata richiede un canale differente da quelli associati al nodo; invocazione non autorizzata");
- }
- else {
- msgDiag.logPersonalizzato("autorizzazioneCanale.effettuata");
- }
-
- }
- // else {
- // // saranno segnalati altri errori dovuti al non riconoscimento della porta
- // }
-
- }
- } catch (Exception e) {
-
- String msgErrore = e.getMessage();
-
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, msgErrore);
- msgDiag.logPersonalizzato("autorizzazioneCanale.fallita");
-
- ErroreIntegrazione errore = canaleNonAutorizzato ? ErroriIntegrazione.ERRORE_404_AUTORIZZAZIONE_FALLITA_SA_ANONIMO.getErrore404_AutorizzazioneFallitaServizioApplicativoAnonimo(msgErrore) :
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE);
- IntegrationFunctionError integrationFunctionError = canaleNonAutorizzato ? IntegrationFunctionError.AUTHORIZATION_DENY : IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError, errore, e,null)));
- }
- return;
- }
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Identificazione PD specifica per azione del servizio ...");
-
- msgDiag.mediumDebug("Lettura azione associato alla PD invocata...");
- if(richiestaDelegata.getIdServizio().getAzione()!=null && portaDelegata!=null) {
- // verifico se esiste una porta delegata piu' specifica
- IdentificazionePortaDelegata identificazione = new IdentificazionePortaDelegata(logCore, protocolFactory,
- registroServiziReader, configurazionePdDReader, requestInfo,
- portaDelegata);
- String action = richiestaDelegata.getIdServizio().getAzione();
- if(identificazione.find(action)) {
- IDPortaDelegata idPD_action = identificazione.getIDPortaDelegata(action);
- if(idPD_action!=null) {
-
- requestMessage.addContextProperty(CostantiPdD.NOME_PORTA_INVOCATA, portaDelegata.getNome()); // prima di aggiornare la porta delegata
-
- identificativoPortaDelegata = idPD_action;
- portaDelegata = identificazione.getPortaDelegata(action);
- nomeUtilizzatoPerErrore = "Configurazione specifica per l'azione '"+action+"', porta '"+ identificativoPortaDelegata.getNome()+"'";
-
- // aggiornao dati che possiede la Porta Delegata ID Porta Delegata
- this.msgContext.getIntegrazione().setIdPD(identificativoPortaDelegata);
- msgDiag.addKeyword(CostantiPdD.KEY_PORTA_DELEGATA, identificativoPortaDelegata.getNome());
- msgDiag.updatePorta(identificativoPortaDelegata.getNome(), requestInfo);
- richiestaDelegata.setIdPortaDelegata(identificativoPortaDelegata);
- if(requestMessage.getTransportRequestContext()!=null) {
- requestMessage.getTransportRequestContext().setInterfaceName(identificativoPortaDelegata.getNome());
- }
-
- pddContext.removeObject(org.openspcoop2.core.constants.Costanti.PROPRIETA_CONFIGURAZIONE);
- try {
- Map<String, String> configProperties = configurazionePdDReader.getProprietaConfigurazione(portaDelegata);
- if (configProperties != null && !configProperties.isEmpty()) {
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.PROPRIETA_CONFIGURAZIONE, configProperties);
- }
- }catch(Exception e) {
- logError(logCore, "Errore durante la lettura delle proprietร di configurazione della porta delegata [" + portaDelegata.getNome() + "]: " + e.getMessage(), e);
- }
- }
- }else {
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.API_NON_INDIVIDUATA, "true");
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, identificazione.getErroreIntegrazione().getDescrizione(protocolFactory));
- msgDiag.logPersonalizzato("portaDelegataNonEsistente");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- IntegrationFunctionError integrationFunctionError = null;
- if(CodiceErroreIntegrazione.CODICE_401_PORTA_INESISTENTE.equals(identificazione.getErroreIntegrazione().getCodiceErrore())){
- integrationFunctionError = IntegrationFunctionError.API_OUT_UNKNOWN;
- }else{
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError, identificazione.getErroreIntegrazione(),null,null)));
- }
- return;
- }
- }
-
-
-
-
-
-
-
-
- // ------------- Informazioni Integrazione -----------------------------
-
- msgDiag.mediumDebug("Aggiungo informazioni di integrazione dinamica nel contesto ...");
-
- try {
- if(portaDelegata!=null) {
- configurazionePdDReader.setInformazioniIntegrazioneDinamiche(logCore, urlProtocolContext, pddContext, portaDelegata);
- }
- }
- catch (Exception e) {
- msgDiag.logErroreGenerico(e, "setInformazioniIntegrazioneDinamiche");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.BAD_REQUEST,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
-
-
-
-
-
-
-
- // ------------- Dump richiesta-----------------------------
-
- msgDiag.mediumDebug("Dump richiesta ...");
-
- DumpConfigurazione dumpConfig = null;
- try {
- dumpConfig = configurazionePdDReader.getDumpConfigurazione(portaDelegata);
- internalObjects.put(CostantiPdD.DUMP_CONFIG, dumpConfig);
- }
- catch (Exception e) {
- msgDiag.logErroreGenerico(e, "readDumpConfigurazione");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
-
- Dump dumpApplicativo = new Dump(identitaPdD,
- this.msgContext.getIdModulo(), null,
- soggettoFruitore, richiestaDelegata.getIdServizio(),
- this.msgContext.getTipoPorta(), msgDiag.getPorta(), inRequestContext.getPddContext(),
- openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta(),
- dumpConfig);
- dumpApplicativo.dumpRichiestaIngresso(requestMessage,inRequestContext.getConnettore().getUrlProtocolContext());
- internalObjects.put(CostantiPdD.DUMP_RICHIESTA_EFFETTUATO, true);
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Autenticazione ...");
-
-
- /* --------------- Gestione credenziali --------------- */
- if(RicezioneContenutiApplicativi.tipiGestoriCredenziali!=null){
- msgDiag.mediumDebug("Gestione personalizzata delle credenziali...");
-
- for (int i = 0; i < RicezioneContenutiApplicativi.tipiGestoriCredenziali.length; i++) {
- try {
-
- IGestoreCredenziali gestore = null;
- String classType = null;
- try {
- classType = className.getGestoreCredenziali(RicezioneContenutiApplicativi.tipiGestoriCredenziali[i]);
- gestore = (IGestoreCredenziali)loader.newInstance(classType);
- AbstractCore.init(gestore, pddContext, protocolFactory);
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante il caricamento della classe ["+ classType
- + "] da utilizzare per la gestione delle credenziali di tipo ["
- + RicezioneContenutiApplicativi.tipiGestoriCredenziali[i]+ "]: " + e.getMessage());
- }
-
- if (gestore != null) {
- Credenziali credenzialiRitornate = gestore.elaborazioneCredenziali(identitaPdD, inRequestContext.getConnettore(), requestMessage);
- if(credenzialiRitornate==null){
- throw new Exception("Credenziali non ritornate");
- }
- if(inRequestContext.getConnettore().getCredenziali().equals(credenzialiRitornate) == false){
- String nuoveCredenziali = credenzialiRitornate.toString();
- if(nuoveCredenziali.length()>0) {
- nuoveCredenziali = nuoveCredenziali.substring(0,(nuoveCredenziali.length()-1));
- }
- msgDiag.addKeyword(CostantiPdD.KEY_NUOVE_CREDENZIALI,nuoveCredenziali);
- String identita = gestore.getIdentitaGestoreCredenziali();
- if(identita==null){
- identita = "Gestore delle credenziali di tipo "+RicezioneContenutiApplicativi.tipiGestoriCredenziali[i];
- }
- msgDiag.addKeyword(CostantiPdD.KEY_IDENTITA_GESTORE_CREDENZIALI, identita);
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.IDENTITA_GESTORE_CREDENZIALI, identita);
- msgDiag.logPersonalizzato("gestoreCredenziali.nuoveCredenziali");
- // update credenziali
- inRequestContext.getConnettore().setCredenziali(credenzialiRitornate);
- credenziali = credenzialiRitornate;
- setCredenziali(credenziali, msgDiag);
- }
- } else {
- throw new Exception("non inizializzato");
- }
- }
- catch (Exception e) {
- logError(logCore, "Errore durante l'identificazione delle credenziali ["+ RicezioneContenutiApplicativi.tipiGestoriCredenziali[i]
- + "]: "+ e.getMessage(),e);
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_GESTORE_CREDENZIALI,RicezioneContenutiApplicativi.tipiGestoriCredenziali[i]);
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("gestoreCredenziali.errore");
- ErroreIntegrazione errore = null;
- IntegrationFunctionError integrationFunctionError = null;
- String wwwAuthenticateErrorHeader = null;
- if(e instanceof GestoreCredenzialiConfigurationException){
- errore = ErroriIntegrazione.ERRORE_431_GESTORE_CREDENZIALI_ERROR.
- getErrore431_ErroreGestoreCredenziali(RicezioneContenutiApplicativi.tipiGestoriCredenziali[i], e);
- GestoreCredenzialiConfigurationException ge = (GestoreCredenzialiConfigurationException) e;
- integrationFunctionError = ge.getIntegrationFunctionError();
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_AUTENTICAZIONE, "true");
- wwwAuthenticateErrorHeader = ge.getWwwAuthenticateErrorHeader();
- }else{
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_548_GESTORE_CREDENZIALI_NON_FUNZIONANTE);
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- OpenSPCoop2Message errorMsg = this.generatoreErrore.build(pddContext,integrationFunctionError, errore,e,null);
- if(wwwAuthenticateErrorHeader!=null) {
- errorMsg.forceTransportHeader(HttpConstants.AUTHORIZATION_RESPONSE_WWW_AUTHENTICATE, wwwAuthenticateErrorHeader);
- }
- this.msgContext.setMessageResponse(errorMsg);
- }
- return;
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /* ------------ GestioneToken ------------- */
-
- RicezioneContenutiApplicativiGestioneToken gestioneToken = new RicezioneContenutiApplicativiGestioneToken(msgDiag, logCore,
- portaDelegata, identificativoPortaDelegata,
- requestMessage,
- this.msgContext, this.generatoreErrore, inRequestContext,
- configurazionePdDReader,
- pddContext, idTransazione,
- openspcoopstate, transaction, requestInfo,
- protocolFactory,
- identitaPdD);
-
- GestioneTokenAutenticazione gestioneTokenAutenticazione = null;
- String token = null;
- if(!gestioneToken.process()) {
- return;
- }
- gestioneTokenAutenticazione = gestioneToken.getGestioneTokenAutenticazione();
- token = gestioneToken.getToken();
-
-
-
-
-
-
-
-
-
-
- /* ------------ Autenticazione ------------- */
-
- RicezioneContenutiApplicativiGestioneAutenticazione gestioneAutenticazione = new RicezioneContenutiApplicativiGestioneAutenticazione(msgDiag, logCore,
- portaDelegata, identificativoPortaDelegata,
- soggettoFruitore, credenziali, gestioneTokenAutenticazione, richiestaDelegata, proprietaErroreAppl,
- requestMessage,
- this.msgContext, this.generatoreErrore, inRequestContext, headerIntegrazioneRichiesta,
- configurazionePdDReader, registroServiziReader,
- pddContext, idTransazione, identitaPdD,
- openspcoopstate, transaction, requestInfo,
- protocolFactory);
-
- IDServizioApplicativo idApplicativoToken = null;
- ServizioApplicativo sa = null;
- String servizioApplicativo = null;
- InformazioniToken informazioniTokenNormalizzate = null;
-
- if(!gestioneAutenticazione.process()) {
- return;
- }
-
- idApplicativoToken = gestioneAutenticazione.getIdApplicativoToken();
- sa = gestioneAutenticazione.getSa();
- servizioApplicativo = gestioneAutenticazione.getServizioApplicativo();
- informazioniTokenNormalizzate = gestioneAutenticazione.getInformazioniTokenNormalizzate();
-
-
-
-
-
-
-
- /* --------------- Verifica tipo soggetto fruitore e tipo servizio rispetto al canale utilizzato --------------- */
- msgDiag.mediumDebug("Verifica canale utilizzato...");
- List<String> tipiSoggettiSupportatiCanale = protocolFactory.createProtocolConfiguration().getTipiSoggetti();
- List<String> tipiServiziSupportatiCanale = protocolFactory.createProtocolConfiguration().getTipiServizi(requestMessage.getServiceBinding());
- // Nota: se qualche informazione e' null verranno segnalati altri errori
- if(soggettoFruitore!=null && soggettoFruitore.getTipo()!=null &&
- tipiSoggettiSupportatiCanale.contains(soggettoFruitore.getTipo())==false){
- msgDiag.logPersonalizzato("protocolli.tipoSoggetto.fruitore.unsupported");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_436_TIPO_SOGGETTO_FRUITORE_NOT_SUPPORTED_BY_PROTOCOL.
- getErrore436_TipoSoggettoFruitoreNotSupportedByProtocol(soggettoFruitore,protocolFactory),null,null)));
- }
- return;
- }
- if(richiestaDelegata!=null && richiestaDelegata.getIdServizio()!=null &&
- richiestaDelegata.getIdServizio().getSoggettoErogatore()!=null &&
- richiestaDelegata.getIdServizio().getSoggettoErogatore().getTipo()!=null &&
- tipiSoggettiSupportatiCanale.contains(richiestaDelegata.getIdServizio().getSoggettoErogatore().getTipo())==false){
- msgDiag.logPersonalizzato("protocolli.tipoSoggetto.erogatore.unsupported");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_437_TIPO_SOGGETTO_EROGATORE_NOT_SUPPORTED_BY_PROTOCOL.
- getErrore437_TipoSoggettoErogatoreNotSupportedByProtocol(richiestaDelegata.getIdServizio().getSoggettoErogatore(),protocolFactory),null,null)));
- }
- return;
- }
- if(richiestaDelegata!=null && richiestaDelegata.getIdServizio()!=null &&
- richiestaDelegata.getIdServizio().getTipo()!=null &&
- tipiServiziSupportatiCanale.contains(richiestaDelegata.getIdServizio().getTipo())==false){
- msgDiag.logPersonalizzato("protocolli.tipoServizio.unsupported");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_438_TIPO_SERVIZIO_NOT_SUPPORTED_BY_PROTOCOL.
- getErrore438_TipoServizioNotSupportedByProtocol(requestMessage.getServiceBinding(),
- richiestaDelegata.getIdServizio(),protocolFactory),null,null)));
- }
- return;
- }
- if(idApplicativoToken!=null && idApplicativoToken.getIdSoggettoProprietario()!=null &&
- idApplicativoToken.getIdSoggettoProprietario().getTipo()!=null &&
- tipiSoggettiSupportatiCanale.contains(idApplicativoToken.getIdSoggettoProprietario().getTipo())==false){
- msgDiag.logPersonalizzato("protocolli.tipoSoggetto.applicativoToken.unsupported");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_449_TIPO_SOGGETTO_APPLICATIVO_TOKEN_NOT_SUPPORTED_BY_PROTOCOL.
- getErrore449_TipoSoggettoApplicativoTokenNotSupportedByProtocol(idApplicativoToken,protocolFactory),null,null)));
- }
- return;
- }
-
-
-
-
-
-
-
- /*
- * ---------------- Verifico che il servizio di RicezioneContenutiApplicativi sia abilitato ---------------------
- */
- boolean serviceIsEnabled = false;
- boolean portaEnabled = false;
- Exception serviceIsEnabledExceptionProcessamento = null;
- try{
- serviceIsEnabled = StatoServiziPdD.isEnabledPortaDelegata(soggettoFruitore, richiestaDelegata.getIdServizio());
- if(serviceIsEnabled){
- portaEnabled = configurazionePdDReader.isPortaAbilitata(portaDelegata);
- }
- }catch(Exception e){
- serviceIsEnabledExceptionProcessamento = e;
- }
- if (!serviceIsEnabled || !portaEnabled || serviceIsEnabledExceptionProcessamento!=null) {
- ErroreIntegrazione errore = null;
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.API_SUSPEND;
- if(serviceIsEnabledExceptionProcessamento!=null){
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO+ "] Identificazione stato servizio di ricezione contenuti applicativi non riuscita: "+serviceIsEnabledExceptionProcessamento.getMessage(),serviceIsEnabledExceptionProcessamento);
- msgDiag.logErroreGenerico("Identificazione stato servizio di ricezione contenuti applicativi non riuscita", "PD");
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione();
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }else{
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_SOSPENSIONE, "true");
-
- String msg = "Servizio di ricezione contenuti applicativi disabilitato";
- if(serviceIsEnabled){
- msg = "Porta Delegata ["+nomeUtilizzatoPerErrore+"] disabilitata";
- errore = ErroriIntegrazione.ERRORE_446_PORTA_SOSPESA.getErroreIntegrazione();
- }
- else {
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msg,CodiceErroreIntegrazione.CODICE_550_PD_SERVICE_NOT_ACTIVE);
- }
- logError(logCore, "["+ RicezioneContenutiApplicativi.ID_MODULO+ "] "+msg);
- msgDiag.logErroreGenerico(msg, "PD");
- }
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- OpenSPCoop2Message errorOpenSPCoopMsg = this.generatoreErrore.build(pddContext,integrationFunctionError,
- errore,serviceIsEnabledExceptionProcessamento,null);
- if(IntegrationFunctionError.API_SUSPEND.equals(integrationFunctionError) &&
- propertiesReader.isEnabledServiceUnavailableRetryAfterPDSuspend() &&
- propertiesReader.getServiceUnavailableRetryAfterSecondsPDSuspend()!=null &&
- propertiesReader.getServiceUnavailableRetryAfterSecondsPDSuspend()>0) {
- int seconds = propertiesReader.getServiceUnavailableRetryAfterSecondsPDSuspend();
- if(propertiesReader.getServiceUnavailableRetryAfterSecondsRandomBackoffPDSuspend()!=null &&
- propertiesReader.getServiceUnavailableRetryAfterSecondsRandomBackoffPDSuspend()>0) {
- seconds = seconds + ServicesUtils.getRandom().nextInt(propertiesReader.getServiceUnavailableRetryAfterSecondsRandomBackoffPDSuspend());
- }
- errorOpenSPCoopMsg.forceTransportHeader(HttpConstants.RETRY_AFTER, seconds+"");
- }
- this.msgContext.setMessageResponse(errorOpenSPCoopMsg);
- }
- return;
- }
-
-
-
-
-
-
-
-
-
-
- /* ------------ Gestione Attribute Authority ------------- */
-
- msgDiag.mediumDebug("Gestione Attribute Authority...");
- List<AttributeAuthority> attributeAuthorities = null;
- if(portaDelegata!=null) {
- attributeAuthorities = portaDelegata.getAttributeAuthorityList();
- }
- this.msgContext.getIntegrazione().setAttributeAuthoritiesFromObjectList(attributeAuthorities);
-
- if (attributeAuthorities == null || attributeAuthorities.isEmpty()) {
- msgDiag.logPersonalizzato("gestioneAADisabilitata");
-
- } else {
- transaction.getTempiElaborazione().startAttributeAuthority();
-
- try {
- msgDiag.logPersonalizzato("gestioneAAInCorso");
-
- org.openspcoop2.pdd.core.token.attribute_authority.pd.DatiInvocazionePortaDelegata datiInvocazione = new org.openspcoop2.pdd.core.token.attribute_authority.pd.DatiInvocazionePortaDelegata();
- datiInvocazione.setInfoConnettoreIngresso(inRequestContext.getConnettore());
- datiInvocazione.setState(openspcoopstate.getStatoRichiesta());
- datiInvocazione.setIdModulo(inRequestContext.getIdModulo());
- datiInvocazione.setMessage(requestMessage);
- Busta busta = new Busta(protocolFactory.getProtocol());
- if(soggettoFruitore!=null) {
- busta.setTipoMittente(soggettoFruitore.getTipo());
- busta.setMittente(soggettoFruitore.getNome());
- }
- if(richiestaDelegata!=null && richiestaDelegata.getIdServizio()!=null) {
- if(richiestaDelegata.getIdServizio().getSoggettoErogatore()!=null) {
- busta.setTipoDestinatario(richiestaDelegata.getIdServizio().getSoggettoErogatore().getTipo());
- busta.setDestinatario(richiestaDelegata.getIdServizio().getSoggettoErogatore().getNome());
- }
- busta.setTipoServizio(richiestaDelegata.getIdServizio().getTipo());
- busta.setServizio(richiestaDelegata.getIdServizio().getNome());
- busta.setVersioneServizio(richiestaDelegata.getIdServizio().getVersione());
- busta.setAzione(richiestaDelegata.getIdServizio().getAzione());
- if(sa!=null) {
- busta.setServizioApplicativoFruitore(sa.getNome());
- }
- }
- datiInvocazione.setBusta(busta);
- datiInvocazione.setRequestInfo(requestInfo);
- datiInvocazione.setIdPD(identificativoPortaDelegata);
- datiInvocazione.setPd(portaDelegata);
-
- GestioneAttributeAuthority gestioneAAEngine = new GestioneAttributeAuthority(logCore, idTransazione, pddContext, protocolFactory);
- List<InformazioniAttributi> esitiValidiRecuperoAttributi = new ArrayList<InformazioniAttributi>();
-
- for (AttributeAuthority aa : attributeAuthorities) {
-
- try {
- msgDiag.addKeyword(CostantiPdD.KEY_ATTRIBUTE_AUTHORITY_NAME, aa.getNome());
- msgDiag.addKeyword(CostantiPdD.KEY_ATTRIBUTE_AUTHORITY_ENDPOINT, "-");
-
- PolicyAttributeAuthority policyAttributeAuthority = configurazionePdDReader.getPolicyAttributeAuthority(false, aa.getNome(), requestInfo);
- datiInvocazione.setPolicyAttributeAuthority(policyAttributeAuthority);
-
- GestoreToken.validazioneConfigurazione(policyAttributeAuthority); // assicura che la configurazione sia corretta
-
- msgDiag.addKeyword(CostantiPdD.KEY_ATTRIBUTE_AUTHORITY_ENDPOINT, policyAttributeAuthority.getEndpoint());
-
- msgDiag.logPersonalizzato("gestioneAAInCorso.retrieve");
-
- EsitoRecuperoAttributi esitoRecuperoAttributi = gestioneAAEngine.readAttributes(datiInvocazione);
- if(esitoRecuperoAttributi.isValido()) {
-
- StringBuilder attributiRecuperati = new StringBuilder();
- if(esitoRecuperoAttributi.getInformazioniAttributi()!=null &&
- esitoRecuperoAttributi.getInformazioniAttributi().getAttributes()!=null &&
- !esitoRecuperoAttributi.getInformazioniAttributi().getAttributes().isEmpty()) {
- for (String attrName : esitoRecuperoAttributi.getInformazioniAttributi().getAttributesNames()) {
- if(attributiRecuperati.length()>0) {
- attributiRecuperati.append(",");
- }
- attributiRecuperati.append(attrName);
- }
- }
- msgDiag.addKeyword(CostantiPdD.KEY_ATTRIBUTES, attributiRecuperati.toString());
-
- if(esitoRecuperoAttributi.isInCache()) {
- msgDiag.logPersonalizzato("gestioneAAInCorso.retrieve.completataSuccesso.inCache");
- }
- else {
- msgDiag.logPersonalizzato("gestioneAAInCorso.retrieve.completataSuccesso");
- }
-
- esitiValidiRecuperoAttributi.add(esitoRecuperoAttributi.getInformazioniAttributi());
- }
- else {
-
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, esitoRecuperoAttributi.getDetails());
- msgDiag.logPersonalizzato("gestioneAAInCorso.retrieve.fallita");
-
- String msgErrore = "processo di gestione dell'attribute authority ["+ aa.getNome() + "] fallito: " + esitoRecuperoAttributi.getDetails();
- if(esitoRecuperoAttributi.getEccezioneProcessamento()!=null) {
- logError(logCore, msgErrore,esitoRecuperoAttributi.getEccezioneProcessamento());
- }
- else {
- logError(logCore, msgErrore);
- }
- }
-
- } catch (Throwable e) {
-
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, e.getMessage());
- msgDiag.logPersonalizzato("gestioneAAInCorso.retrieve.fallita");
- String msgErrore = "processo di gestione dell'attribute authority ["+ aa.getNome() + "] fallito: " + e.getMessage();
- logError(logCore, msgErrore,e);
-
- }
- }
-
- InformazioniAttributi informazioniAttributiNormalizzati = null;
- if(esitiValidiRecuperoAttributi!=null && esitiValidiRecuperoAttributi.size()>0) {
- informazioniAttributiNormalizzati = GestoreToken.normalizeInformazioniAttributi(esitiValidiRecuperoAttributi, attributeAuthorities);
- informazioniAttributiNormalizzati.setValid(true);
- }
- if(informazioniAttributiNormalizzati!=null) {
- pddContext.addObject(org.openspcoop2.pdd.core.token.Costanti.PDD_CONTEXT_ATTRIBUTI_INFORMAZIONI_NORMALIZZATE, informazioniAttributiNormalizzati);
-
- if(informazioniTokenNormalizzate!=null) {
- informazioniTokenNormalizzate.setAa(informazioniAttributiNormalizzati);
- }
- else {
- transaction.setInformazioniAttributi(informazioniAttributiNormalizzati);
- }
- }
-
- msgDiag.logPersonalizzato("gestioneAACompletata");
-
- } catch (Throwable e) {
-
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, e.getMessage());
- msgDiag.logPersonalizzato("gestioneAAFallita");
- logError(logCore, "processo di gestione delle attribute authorities fallito: " + e.getMessage(),e);
-
- }
- finally {
- transaction.getTempiElaborazione().endAttributeAuthority();
- }
-
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Inizializzazione connessione al database...");
-
-
-
- /*
- * ---------------- Inizializzazione Contesto di gestione della Richiesta ---------------------
- */
- String idMessageRequest = null;
-
- // Correlazione Applicativa
- msgDiag.mediumDebug("Gestione correlazione applicativa...");
- CorrelazioneApplicativa correlazionePD = null;
- try {
- correlazionePD = configurazionePdDReader.getCorrelazioneApplicativa(portaDelegata);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"getCorrelazioneApplicativa(pd)");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,null)));
- }
- return;
- }
-
- Busta busta = null;
- try {
- busta = new Busta(protocolFactory.getProtocol());
- if(soggettoFruitore!=null) {
- busta.setTipoMittente(soggettoFruitore.getTipo());
- busta.setMittente(soggettoFruitore.getNome());
- }
- if(richiestaDelegata!=null && richiestaDelegata.getIdServizio()!=null) {
- if(richiestaDelegata.getIdServizio().getSoggettoErogatore()!=null) {
- busta.setTipoDestinatario(richiestaDelegata.getIdServizio().getSoggettoErogatore().getTipo());
- busta.setDestinatario(richiestaDelegata.getIdServizio().getSoggettoErogatore().getNome());
- }
- busta.setTipoServizio(richiestaDelegata.getIdServizio().getTipo());
- busta.setServizio(richiestaDelegata.getIdServizio().getNome());
- busta.setVersioneServizio(richiestaDelegata.getIdServizio().getVersione());
- busta.setAzione(richiestaDelegata.getIdServizio().getAzione());
- if(sa!=null) {
- busta.setServizioApplicativoFruitore(sa.getNome());
- }
- }
- }catch(Throwable t) {
- // ignore
- }
-
- GestoreCorrelazioneApplicativaConfig caConfig = new GestoreCorrelazioneApplicativaConfig();
- caConfig.setState(openspcoopstate.getStatoRichiesta());
- caConfig.setAlog(logCore);
- caConfig.setSoggettoFruitore(richiestaDelegata.getIdSoggettoFruitore());
- caConfig.setIdServizio(richiestaDelegata.getIdServizio());
- caConfig.setBusta(busta);
- caConfig.setServizioApplicativo(servizioApplicativo);
- caConfig.setProtocolFactory(protocolFactory);
- caConfig.setTransaction(transaction);
- caConfig.setPddContext(pddContext);
- caConfig.setPd(portaDelegata);
- GestoreCorrelazioneApplicativa correlazioneApplicativa = new GestoreCorrelazioneApplicativa(caConfig);
-
- boolean correlazioneEsistente = false;
- String idCorrelazioneApplicativa = null;
- if (correlazionePD != null) {
- try {
- correlazioneApplicativa
- .verificaCorrelazione(correlazionePD, urlProtocolContext,requestMessage,headerIntegrazioneRichiesta,
- this.msgContext.getIdModulo().endsWith(IntegrationManager.ID_MODULO));
- idCorrelazioneApplicativa = correlazioneApplicativa.getIdCorrelazione();
-
- if(correlazioneApplicativa.isRiusoIdentificativo()) {
-
- if(openspcoopstate.resourceReleased()) {
- // inizializzo
- openspcoopstate.setUseConnection(true);
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(), idTransazione);
- correlazioneApplicativa.updateState(openspcoopstate.getStatoRichiesta());
- }
-
- correlazioneEsistente = correlazioneApplicativa.verificaCorrelazioneIdentificativoRichiesta();
- }
-
- if (correlazioneEsistente) {
- // Aggiornamento id richiesta
- idMessageRequest = correlazioneApplicativa.getIdBustaCorrelato();
- // Aggiornamento Informazioni Protocollo
- msgDiag.setIdMessaggioRichiesta(idMessageRequest);
-
- // MsgDiagnostico
- msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, idCorrelazioneApplicativa);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RICHIESTA, idMessageRequest);
- msgDiag.logPersonalizzato("correlazioneApplicativaEsistente");
- }
- } catch (Exception e) {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_CORRELAZIONE_APPLICATIVA_RICHIESTA, "true");
-
- msgDiag.logErroreGenerico(e,"CorrelazioneApplicativa");
- logError(logCore, "Riscontrato errore durante il controllo di correlazione applicativa: "+ e.getMessage(),e);
-
- ErroreIntegrazione errore = null;
- if(correlazioneApplicativa!=null){
- errore = correlazioneApplicativa.getErrore();
- }
- if(errore==null){
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_529_CORRELAZIONE_APPLICATIVA_RICHIESTA_NON_RIUSCITA);
- }
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- IntegrationFunctionError integrationFunctionError = null;
- if(CodiceErroreIntegrazione.CODICE_416_CORRELAZIONE_APPLICATIVA_RICHIESTA_ERRORE.equals(errore.getCodiceErrore())){
- integrationFunctionError = IntegrationFunctionError.APPLICATION_CORRELATION_IDENTIFICATION_REQUEST_FAILED;
- }
- else{
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError,errore,e,null)));
- }
- return;
- }
- }
- if (correlazioneEsistente == false) {
- // Costruzione ID.
- msgDiag.mediumDebug("Costruzione identificativo...");
- try {
-
- Imbustamento imbustatore = new Imbustamento(logCore, protocolFactory,openspcoopstate.getStatoRichiesta());
- idMessageRequest =
- imbustatore.buildID(identitaPdD,
- (String) this.msgContext.getPddContext().getObject(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE),
- propertiesReader.getGestioneSerializableDBAttesaAttiva(),
- propertiesReader.getGestioneSerializableDBCheckInterval(),
- RuoloMessaggio.RICHIESTA);
- if (idMessageRequest == null) {
- throw new Exception("Identificativo non costruito.");
- }
- // Aggiornamento Informazioni Protocollo
- msgDiag.setIdMessaggioRichiesta(idMessageRequest);
-
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"imbustatore.buildID(idMessageRequest)");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_507_COSTRUZIONE_IDENTIFICATIVO), e,null)));
- }
- return;
- }
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RICHIESTA, idMessageRequest);
-
- // Creazione Correlazione Applicativa
- if (correlazionePD!=null && idCorrelazioneApplicativa!=null && correlazioneApplicativa.isRiusoIdentificativo()) {
- msgDiag.mediumDebug("Applicazione correlazione applicativa...");
- try {
- // Applica correlazione
- correlazioneApplicativa.applicaCorrelazione(correlazionePD,idCorrelazioneApplicativa, idMessageRequest);
-
- // MsgDiagnostico
- msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, idCorrelazioneApplicativa);
- msgDiag.logPersonalizzato("correlazioneApplicativaInstaurata");
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"CreazioneCorrelazioneApplicativa");
-
- ErroreIntegrazione errore = null;
- if(correlazioneApplicativa!=null){
- errore = correlazioneApplicativa.getErrore();
- }
- if(errore==null){
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_529_CORRELAZIONE_APPLICATIVA_RICHIESTA_NON_RIUSCITA);
- }
-
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- IntegrationFunctionError integrationFunctionError = null;
- if(CodiceErroreIntegrazione.CODICE_416_CORRELAZIONE_APPLICATIVA_RICHIESTA_ERRORE.equals(errore.getCodiceErrore())){
- integrationFunctionError = IntegrationFunctionError.APPLICATION_CORRELATION_IDENTIFICATION_REQUEST_FAILED;
- }
- else{
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError,errore,null,null)));
- }
- return;
- }
- }
- }
- richiestaDelegata.setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
- msgDiag.setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
- this.msgContext.getIntegrazione().setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
- this.msgContext.setIdMessage(idMessageRequest);
- this.msgContext.getProtocol().setIdRichiesta(idMessageRequest);
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Gestione header integrazione della risposta...");
-
-
- /*
- * ------- Imposta Risposta dell'Header Trasporto o se l'invocazione e' stata attiva dall'IntegrationManager -------
- */
- msgDiag.mediumDebug("Gestione header integrazione della risposta...");
- headerIntegrazioneRisposta.getBusta().setID(idMessageRequest);
- boolean containsHeaderIntegrazioneTrasporto = false;
- for (String gestore : defaultGestoriIntegrazionePD) {
- if(CostantiConfigurazione.HEADER_INTEGRAZIONE_TRASPORTO.equals(gestore)){
- containsHeaderIntegrazioneTrasporto = true;
- }
- }
- if (containsHeaderIntegrazioneTrasporto
- || this.msgContext.getIdModulo().startsWith(RicezioneContenutiApplicativi.ID_MODULO+ IntegrationManager.ID_MODULO)) {
- try {
- Map<String, List<String>> propertiesIntegrazioneRisposta = new HashMap<>();
- IGestoreIntegrazionePD gestore = null;
- try {
- gestore = (IGestoreIntegrazionePD) pluginLoader.newIntegrazionePortaDelegata(CostantiConfigurazione.HEADER_INTEGRAZIONE_TRASPORTO);
- }catch(Exception e){
- throw e;
- }
- if(gestore!=null){
- String classType = null;
- try {
- classType = gestore.getClass().getName();
- AbstractCore.init(gestore, pddContext, protocolFactory);
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante l'inizializzazione della classe ["+ classType
- + "] da utilizzare per la gestione dell'integrazione delle fruizioni di tipo ["+ CostantiConfigurazione.HEADER_INTEGRAZIONE_TRASPORTO + "]: " + e.getMessage());
- }
- OutResponsePDMessage outResponsePDMessage = new OutResponsePDMessage();
- outResponsePDMessage.setPortaDelegata(portaDelegata);
- outResponsePDMessage.setHeaders(propertiesIntegrazioneRisposta);
- outResponsePDMessage.setServizio(richiestaDelegata.getIdServizio());
- outResponsePDMessage.setSoggettoMittente(soggettoFruitore);
- gestore.setOutResponseHeader(headerIntegrazioneRisposta, outResponsePDMessage);
- this.msgContext.setResponseHeaders(propertiesIntegrazioneRisposta);
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"setHeaderIntegrazioneRisposta");
- }
- }
-
-
-
-
-
- /*
- * --------- Informazioni protocollo ----------
- */
- IBustaBuilder<?> bustaBuilder = protocolFactory.createBustaBuilder(openspcoopstate.getStatoRichiesta());
- idServizio = richiestaDelegata.getIdServizio();
- this.msgContext.getProtocol().setFruitore(soggettoFruitore);
- this.msgContext.getProtocol().setErogatore(idServizio.getSoggettoErogatore());
- this.msgContext.getProtocol().setTipoServizio(idServizio.getTipo());
- this.msgContext.getProtocol().setServizio(idServizio.getNome());
- this.msgContext.getProtocol().setVersioneServizio(idServizio.getVersione());
- this.msgContext.getProtocol().setAzione(idServizio.getAzione());
- this.msgContext.getProtocol().setIdRichiesta(idMessageRequest);
-
-
-
-
- /*
- * --------- Dati di identificazione ----------
- */
-
- IDServizioApplicativo idServizioApplicativo = new IDServizioApplicativo();
- idServizioApplicativo.setNome(servizioApplicativo);
- idServizioApplicativo.setIdSoggettoProprietario(soggettoFruitore);
-
-
-
-
-
-
-
-
-
- /* -------------- Identificazione servizio ------------------ */
- String infoSearch = null;
- try{
- infoSearch = IDServizioFactory.getInstance().getUriFromIDServizio(idServizio);
- }catch(Exception e){
- infoSearch = idServizio.toString(false);
- }
- if (idServizio.getAzione() != null)
- infoSearch = infoSearch + " azione " + idServizio.getAzione();
-
- // Cerco nome del registro su cui cercare
- msgDiag.addKeyword(CostantiPdD.KEY_INFO_SERVIZIO_BUSTA,infoSearch );
- msgDiag.mediumDebug("Ricerca nome registro ["+infoSearch+"]...");
- String nomeRegistroForSearch = null;
- try {
- nomeRegistroForSearch = configurazionePdDReader.getRegistroForImbustamento(soggettoFruitore, idServizio, false, requestInfo);
- } catch (Exception e) {
- logError(logCore, "Connettore associato al servizio non trovato: "+e.getMessage(),e);
- msgDiag.addKeywordErroreProcessamento(e,"connettore associato al servizio non trovato");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_514_ROUTING_CONFIGURATION_ERROR), e,null)));
- }
- return;
- }
-
- // Gestisco riferimento asincrono
- String riferimentoServizioCorrelato_ricercaSolamenteServizioCorrelato = null;
- boolean supportoProfiliAsincroni = protocolConfig.isSupportato(requestInfo.getProtocolServiceBinding(),ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)
- || protocolConfig.isSupportato(requestInfo.getProtocolServiceBinding(),ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
- if(supportoProfiliAsincroni) {
- if (headerIntegrazioneRichiesta.getBusta() != null && headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() != null)
- riferimentoServizioCorrelato_ricercaSolamenteServizioCorrelato = headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio();
- if(riferimentoServizioCorrelato_ricercaSolamenteServizioCorrelato==null){
- // FIX compatibilita integrazione asincroni con versioni precedente a 1.4
- // L'integrazione era possibile anche tramite info integrazione 'Collaborazione'
- if(propertiesReader.isIntegrazioneAsincroniConIdCollaborazioneEnabled()){
- if (headerIntegrazioneRichiesta.getBusta() != null && headerIntegrazioneRichiesta.getBusta().getIdCollaborazione() != null){
- // utilizzo l'informazione come integrazione asincrona SOLO se il servizio e' correlato.
- Servizio infoServizioTmpVerificaCorrelato = null;
- try{
- infoServizioTmpVerificaCorrelato = registroServiziReader.getInfoServizioCorrelato(soggettoFruitore,idServizio, nomeRegistroForSearch, true, requestInfo);
- }catch(Exception e){
- logDebug(logCore, "Verifica servizio ["+infoSearch+"] se e' correlato, fallita: "+e.getMessage());
- try{
- infoServizioTmpVerificaCorrelato = registroServiziReader.getInfoServizioAzioneCorrelata(soggettoFruitore, idServizio,nomeRegistroForSearch, true, requestInfo);
- }catch(Exception eCorrelato){
- logDebug(logCore, "Verifica servizio ["+infoSearch+"] se e' correlato rispetto all'azione, fallita: "+e.getMessage());
- }
- }
- if(infoServizioTmpVerificaCorrelato!=null){
- // Il servizio e' correlato!
- riferimentoServizioCorrelato_ricercaSolamenteServizioCorrelato = headerIntegrazioneRichiesta.getBusta().getIdCollaborazione();
- }
- }
- }
- }
- }
- if (riferimentoServizioCorrelato_ricercaSolamenteServizioCorrelato != null) {
- infoSearch = "Servizio correlato " + infoSearch;
- } else {
- infoSearch = "Servizio " + infoSearch;
- }
- infoSearch = "Ricerca nel registro dei servizi di: " + infoSearch;
- if (riferimentoServizioCorrelato_ricercaSolamenteServizioCorrelato != null)
- infoSearch = infoSearch + " (idServizioCorrelato: "+ riferimentoServizioCorrelato_ricercaSolamenteServizioCorrelato + ")";
- msgDiag.addKeyword(CostantiPdD.KEY_INFO_SERVIZIO_BUSTA,infoSearch );
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioInCorso");
-
- // Effettuo ricerca
- boolean isServizioCorrelato = false;
- String invocazioneAzioneErrata = null;
- String portTypeErrato = null;
- boolean ricercaConErrore = false;
- boolean servizioCorrelatoNonTrovato = false;
- boolean servizioNonTrovato = false;
- Servizio infoServizio = null;
- Exception eServiceNotFound = null;
- try {
- // RiferimentoServizioCorrelato presente: cerco solo come servizio
- // correlato.
- if (riferimentoServizioCorrelato_ricercaSolamenteServizioCorrelato != null) {
- String erroreRicerca = null;
- // Ricerca come servizio correlato
- msgDiag.mediumDebug("Ricerca servizio correlato ...");
- try {
- infoServizio = registroServiziReader.getInfoServizioCorrelato(soggettoFruitore,idServizio, nomeRegistroForSearch, true, requestInfo);
- isServizioCorrelato = true;
- } catch (DriverRegistroServiziAzioneNotFound e) {
- boolean throwFault = true;
- if(corsTrasparente) {
- try {
- infoServizio = registroServiziReader.getInfoServizioCorrelato(soggettoFruitore,idServizio, nomeRegistroForSearch, false, requestInfo);
- isServizioCorrelato = true;
- throwFault = false;
- }catch(Throwable ignore) {
- // ignore
- }
- }
- if(throwFault) {
- invocazioneAzioneErrata = e.getMessage();
- throw e;
- }
- } catch (DriverRegistroServiziNotFound e) {
- erroreRicerca = "\nRicerca come servizio correlato-> "+ e.getMessage();
- }
- // Ricerca come servizio e azione correlata se ho un profilo
- // asincrono asimmetrico (check del profilo interno al metodo)
- if (infoServizio == null && (idServizio.getAzione() != null)) {
- msgDiag.mediumDebug("Ricerca servizio con azione correlata...");
- try {
- infoServizio = registroServiziReader.getInfoServizioAzioneCorrelata(soggettoFruitore, idServizio,nomeRegistroForSearch, true, requestInfo);
- isServizioCorrelato = true;
- } catch (DriverRegistroServiziAzioneNotFound e) {
- boolean throwFault = true;
- if(corsTrasparente) {
- try {
- infoServizio = registroServiziReader.getInfoServizioAzioneCorrelata(soggettoFruitore, idServizio,nomeRegistroForSearch, false, requestInfo);
- isServizioCorrelato = true;
- throwFault = false;
- }catch(Throwable ignore) {
- // ignore
- }
- }
- if(throwFault) {
- invocazioneAzioneErrata = e.getMessage();
- throw e;
- }
- } catch (DriverRegistroServiziNotFound e) {
- erroreRicerca = erroreRicerca+ "\nRicerca come servizio correlato -> "+ e.getMessage();
- }
- }
- // Se non trovato genero errore
- msgDiag.highDebug("Controllo dati individuati ...");
- if (infoServizio == null && erroreRicerca == null)
- throw new DriverRegistroServiziNotFound(
- "Servizio Correlato non trovato ne tramite la normale ricerca, ne tramite la ricerca per azione correlata (solo se profilo e' asincrono asimmetrico)");
- else if (infoServizio == null)
- throw new DriverRegistroServiziNotFound(erroreRicerca);
- }
- // RiferimentoServizioCorrelato non presente: cerco sia come
- // servizio, che casomai come servizio correlato.
- else {
- String erroreRicerca = null;
- // Ricerca come servizio
- msgDiag.mediumDebug("Ricerca servizio ...");
- try {
- infoServizio = registroServiziReader.getInfoServizio(soggettoFruitore, idServizio,nomeRegistroForSearch,true, true, requestInfo);
- } catch (DriverRegistroServiziAzioneNotFound e) {
- boolean throwFault = true;
- if(corsTrasparente) {
- try {
- infoServizio = registroServiziReader.getInfoServizio(soggettoFruitore, idServizio,nomeRegistroForSearch,true, false, requestInfo);
- throwFault = false;
- }catch(Throwable ignore) {
- // ignore
- }
- }
- if(throwFault) {
- invocazioneAzioneErrata = e.getMessage();
- throw e;
- }
- } catch (DriverRegistroServiziNotFound e) {
- erroreRicerca = "\nRicerca come servizio -> "+ e.getMessage();
- }
- // Ricerca come servizio correlato
- if (infoServizio == null) {
- msgDiag.mediumDebug("Ricerca servizio correlato...");
- try {
- infoServizio = registroServiziReader.getInfoServizioCorrelato(soggettoFruitore,idServizio, nomeRegistroForSearch, true, requestInfo);
- isServizioCorrelato = true;
- } catch (DriverRegistroServiziAzioneNotFound e) {
- boolean throwFault = true;
- if(corsTrasparente) {
- try {
- infoServizio = registroServiziReader.getInfoServizioCorrelato(soggettoFruitore,idServizio, nomeRegistroForSearch, false, requestInfo);
- isServizioCorrelato = true;
- throwFault = false;
- }catch(Throwable ignore) {
- // ignore
- }
- }
- if(throwFault) {
- invocazioneAzioneErrata = e.getMessage();
- throw e;
- }
- } catch (DriverRegistroServiziNotFound e) {
- erroreRicerca = erroreRicerca+ "\nRicerca come servizio correlato -> "+ e.getMessage();
- }
- }
- // Se non trovato genero errore
- if (infoServizio == null && erroreRicerca == null)
- throw new DriverRegistroServiziNotFound(
- "Servizio non trovato ne tramite la normale ricerca, ne tramite la ricerca per servizio correlato");
- else if (infoServizio == null)
- throw new DriverRegistroServiziNotFound(erroreRicerca);
- }
- } catch (DriverRegistroServiziNotFound e) {
- eServiceNotFound = e;
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- servizioNonTrovato = true;
- } catch (DriverRegistroServiziAzioneNotFound e) {
- eServiceNotFound = e;
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- // viene impostata la variabile invocazioneAzioneErrata
- } catch (DriverRegistroServiziPortTypeNotFound e) {
- eServiceNotFound = e;
- msgDiag.addKeywordErroreProcessamento(e,"configurazione registro dei servizi errata");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- portTypeErrato = "Configurazione del registro dei Servizi errata: "+ e.getMessage();
- } catch(DriverRegistroServiziCorrelatoNotFound e){
- eServiceNotFound = e;
- msgDiag.addKeywordErroreProcessamento(e,"correlazione asincrona non rilevata");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- servizioCorrelatoNonTrovato = true;
- }
- catch (Exception e) {
- eServiceNotFound = e;
- msgDiag.addKeywordErroreProcessamento(e,"errore generale");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- logError(logCore, "Ricerca servizio fallita",e);
- ricercaConErrore = true;
- }
- // Segnalo eventuali errori di servizio non trovato / errato
- if (infoServizio == null) {
- if (servizioNonTrovato == false && ricercaConErrore == false && servizioCorrelatoNonTrovato==false && invocazioneAzioneErrata == null) {
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO , "servizio non esistente" );
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- servizioNonTrovato = true;
- }
- ErroreIntegrazione erroreIntegrazione = null;
- IntegrationFunctionError integrationFunctionError = null;
- if (invocazioneAzioneErrata != null) {
-
- String azione = "";
- if(idServizio.getAzione()!=null) {
- azione = "(azione:"+ idServizio.getAzione()+ ") ";
- }
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.OPERAZIONE_NON_INDIVIDUATA, "true");
-
- erroreIntegrazione = ErroriIntegrazione.ERRORE_423_SERVIZIO_CON_AZIONE_SCORRETTA.
- getErrore423_ServizioConAzioneScorretta(azione+ invocazioneAzioneErrata);
- integrationFunctionError = IntegrationFunctionError.OPERATION_UNDEFINED;
- } else if (portTypeErrato != null) {
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(portTypeErrato, CodiceErroreIntegrazione.CODICE_540_REGISTRO_SERVIZI_MAL_CONFIGURATO);
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- } else if (servizioNonTrovato) {
- erroreIntegrazione = ErroriIntegrazione.ERRORE_405_SERVIZIO_NON_TROVATO.getErroreIntegrazione();
- integrationFunctionError = IntegrationFunctionError.NOT_FOUND;
- } else if (ricercaConErrore) {
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_534_REGISTRO_DEI_SERVIZI_NON_DISPONIBILE);
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- } else if (servizioCorrelatoNonTrovato){
- erroreIntegrazione = ErroriIntegrazione.ERRORE_408_SERVIZIO_CORRELATO_NON_TROVATO.getErroreIntegrazione();
- //integrationFunctionError = IntegrationFunctionError.CORRELATION_INFORMATION_NOT_FOUND; in questo caso si tratta di un errore nella configurazione
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- else {
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_500_ERRORE_INTERNO);
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError,erroreIntegrazione,eServiceNotFound,null)));
- }
- return;
- }
- msgDiag.highDebug("Ricerca servizio terminata");
- infoServizio.setCorrelato(isServizioCorrelato);
- this.msgContext.getProtocol().setProfiloCollaborazione(infoServizio.getProfiloDiCollaborazione(),null); // il valore verra' serializzato solo successivamente nella busta
- msgDiag.addKeyword(CostantiPdD.KEY_PROFILO_COLLABORAZIONE, traduttore.toString(infoServizio.getProfiloDiCollaborazione()));
- if(infoServizio!=null && infoServizio.getIdAccordo()!=null){
- this.msgContext.getProtocol().setIdAccordo(infoServizio.getIdAccordo());
- richiestaDelegata.setIdAccordo(infoServizio.getIdAccordo());
- try{
- idServizio.setUriAccordoServizioParteComune(IDAccordoFactory.getInstance().getUriFromIDAccordo(infoServizio.getIdAccordo()));
- }catch(Exception e){
- // ignore
- }
- }
- msgDiag.highDebug("Convert infoServizio to Busta ...");
- Busta bustaRichiesta = infoServizio.convertToBusta(protocolFactory.getProtocol(), soggettoFruitore);
- if(sa!=null) {
- bustaRichiesta.setServizioApplicativoFruitore(sa.getNome());
- }
- msgDiag.highDebug("Convert infoServizio to Busta terminata");
- inRequestPDMessage.setBustaRichiesta(bustaRichiesta);
-
- // Aggiorno eventuale valore dipendete dal profilo (PDC)
- if(this.msgContext.getProtocol()!=null && idServizio.getVersione()!=null) {
- if(this.msgContext.getProtocol().getVersioneServizio()==null) {
- this.msgContext.getProtocol().setVersioneServizio(idServizio.getVersione());
- }
- else if(this.msgContext.getProtocol().getVersioneServizio().intValue()!=idServizio.getVersione().intValue()) {
- this.msgContext.getProtocol().setVersioneServizio(idServizio.getVersione());
- }
- }
-
-
-
-
-
-
-
- /* ------------ Autorizzazione ------------- */
-
- String tipoAutorizzazione = null;
- String tipoAutorizzazioneContenuto = null;
- try {
- tipoAutorizzazione = configurazionePdDReader.getAutorizzazione(portaDelegata);
- tipoAutorizzazioneContenuto = configurazionePdDReader.getAutorizzazioneContenuto(portaDelegata);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e, "letturaAutenticazioneTokenAutorizzazione");
- logError(logCore, msgDiag.getMessaggio_replaceKeywords("letturaAutenticazioneTokenAutorizzazione"),e);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE), e,null)));
- }
- return;
- }
-
- DatiInvocazionePortaDelegata datiInvocazione = new DatiInvocazionePortaDelegata();
- datiInvocazione.setBusta(bustaRichiesta);
- datiInvocazione.setToken(token);
- datiInvocazione.setPddContext(pddContext);
- datiInvocazione.setInfoConnettoreIngresso(inRequestContext.getConnettore());
- datiInvocazione.setIdServizio(richiestaDelegata.getIdServizio());
- datiInvocazione.setState(openspcoopstate.getStatoRichiesta());
- datiInvocazione.setIdPD(identificativoPortaDelegata);
- datiInvocazione.setPd(portaDelegata);
- datiInvocazione.setIdServizioApplicativo(idServizioApplicativo);
- datiInvocazione.setServizioApplicativo(sa);
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Autorizzazione del servizio applicativo...");
-
- msgDiag.mediumDebug("Autorizzazione del servizio applicativo...");
- this.msgContext.getIntegrazione().setTipoAutorizzazione(tipoAutorizzazione);
- if(tipoAutorizzazione!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTORIZZAZIONE, tipoAutorizzazione);
- }
- if (CostantiConfigurazione.AUTORIZZAZIONE_NONE.equalsIgnoreCase(tipoAutorizzazione) == false) {
-
- transaction.getTempiElaborazione().startAutorizzazione();
- try {
-
- msgDiag.logPersonalizzato("autorizzazioneInCorso");
-
- ErroreIntegrazione errore = null;
- Exception eAutorizzazione = null;
- OpenSPCoop2Message errorMessageAutorizzazione = null;
- String wwwAuthenticateErrorHeader = null;
- boolean detailsSet = false;
- IntegrationFunctionError integrationFunctionError = null;
- try {
- EsitoAutorizzazionePortaDelegata esito =
- GestoreAutorizzazione.verificaAutorizzazionePortaDelegata(tipoAutorizzazione, datiInvocazione, pddContext, protocolFactory, requestMessage, logCore);
- CostantiPdD.addKeywordInCache(msgDiag, esito.isEsitoPresenteInCache(),
- pddContext, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTORIZZAZIONE);
- if(esito.getDetails()==null){
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, "");
- }else{
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, " ("+esito.getDetails()+")");
- }
- detailsSet = true;
- if (esito.isAutorizzato() == false) {
- errore = esito.getErroreIntegrazione();
- eAutorizzazione = esito.getEccezioneProcessamento();
- errorMessageAutorizzazione = esito.getErrorMessage();
- wwwAuthenticateErrorHeader = esito.getWwwAuthenticateErrorHeader();
- integrationFunctionError = esito.getIntegrationFunctionError();
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_AUTORIZZAZIONE, "true");
- }
- else{
- msgDiag.logPersonalizzato("autorizzazioneEffettuata");
- }
-
- } catch (Exception e) {
- CostantiPdD.addKeywordInCache(msgDiag, false,
- pddContext, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTORIZZAZIONE);
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento("processo di autorizzazione ["
- + tipoAutorizzazione + "] fallito, " + e.getMessage(),CodiceErroreIntegrazione.CODICE_504_AUTORIZZAZIONE);
- eAutorizzazione = e;
- logError(logCore, "processo di autorizzazione ["
- + tipoAutorizzazione + "] fallito, " + e.getMessage(),e);
- }
- if (errore != null) {
- if(!detailsSet) {
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, "");
- }
- String descrizioneErrore = null;
- try{
- descrizioneErrore = errore.getDescrizione(protocolFactory);
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, descrizioneErrore);
- }catch(Exception e){
- logError(logCore, "getDescrizione Error:"+e.getMessage(),e);
- }
- msgDiag.logPersonalizzato("servizioApplicativoFruitore.nonAutorizzato");
- String errorMsg = "Riscontrato errore durante il processo di Autorizzazione per il messaggio con identificativo ["+idMessageRequest+"]: "+descrizioneErrore;
- if(eAutorizzazione!=null){
- logError(logCore, errorMsg,eAutorizzazione);
- }
- else{
- logError(logCore, errorMsg);
- }
- openspcoopstate.releaseResource();
-
- if (this.msgContext.isGestioneRisposta()) {
-
- if(errorMessageAutorizzazione!=null) {
- this.msgContext.setMessageResponse(errorMessageAutorizzazione);
- }
- else {
-
- if(CodiceErroreIntegrazione.CODICE_404_AUTORIZZAZIONE_FALLITA.equals(errore.getCodiceErrore()) ||
- CodiceErroreIntegrazione.CODICE_445_TOKEN_AUTORIZZAZIONE_FALLITA.equals(errore.getCodiceErrore())){
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.AUTHORIZATION;
- }
- }else{
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- }
-
- OpenSPCoop2Message errorOpenSPCoopMsg = (this.generatoreErrore.build(pddContext,integrationFunctionError,errore,
- eAutorizzazione,null));
-
- if(wwwAuthenticateErrorHeader!=null) {
- errorOpenSPCoopMsg.forceTransportHeader(HttpConstants.AUTHORIZATION_RESPONSE_WWW_AUTHENTICATE, wwwAuthenticateErrorHeader);
- }
-
- this.msgContext.setMessageResponse(errorOpenSPCoopMsg);
-
- }
- }
- return;
- }
- }finally {
- transaction.getTempiElaborazione().endAutorizzazione();
- }
- }
- else{
- msgDiag.logPersonalizzato("autorizzazioneDisabilitata");
- }
-
-
-
-
-
-
-
-
-
-
-
-
- /* -------- Controlli Header di Integrazione ------------- */
-
- if(infoServizio.getIdRiferimentoRichiesta() &&
- protocolConfig.isIntegrationInfoRequired(TipoPdD.DELEGATA, requestInfo.getProtocolServiceBinding(),FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA)) {
- String riferimentoRichiesta = null;
- if (headerIntegrazioneRichiesta!=null &&
- headerIntegrazioneRichiesta.getBusta() != null && headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() != null) {
- riferimentoRichiesta = headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio();
- this.msgContext.getProtocol().setRiferimentoAsincrono(riferimentoRichiesta);
- }
- if(riferimentoRichiesta==null) {
- StringBuilder bf = new StringBuilder();
- for (int i = 0; i < tipiIntegrazionePD.length; i++) {
- if(i>0) {
- bf.append(",");
- }
- bf.append(tipiIntegrazionePD[i]);
- }
- msgDiag.addKeyword(CostantiPdD.KEY_TIPI_INTEGRAZIONE ,bf.toString() );
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_CONTENUTI_APPLICATIVI,"riferimentoIdRichiesta.nonFornito");
- ErroreIntegrazione erroreIntegrazione = ErroriIntegrazione.ERRORE_442_RIFERIMENTO_ID_MESSAGGIO.getErroreIntegrazione();
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.CORRELATION_INFORMATION_NOT_FOUND;
-
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError,erroreIntegrazione,null,null)));
- }
- return;
-
- }
- }
-
-
-
-
-
- /* -------- Profilo di Gestione ------------- */
- try {
- String profiloGestione = registroServiziReader.getProfiloGestioneFruizioneServizio(idServizio,nomeRegistroForSearch, requestInfo);
- richiestaDelegata.setProfiloGestione(profiloGestione);
- msgDiag.mediumDebug("Profilo di gestione ["+ RicezioneContenutiApplicativi.ID_MODULO+ "] della busta: " + profiloGestione);
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e,"analisi del profilo di gestione fallita");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- logError(logCore, "Identificazione Profilo Gestione fallita",e);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,null)));
- }
- return;
- }
-
-
-
-
- /* -------- OpenSPCoop2Message Update ------------- */
- try {
- msgDiag.mediumDebug("Aggiornamento del messaggio");
- requestMessage = protocolFactory.createProtocolManager().updateOpenSPCoop2MessageRequest(requestMessage, bustaRichiesta,
- protocolFactory.getCachedRegistryReader(registroServiziReader, requestInfo));
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e,"Aggiornamento messaggio fallito");
- msgDiag.logErroreGenerico(e,"ProtocolManager.updateOpenSPCoop2Message");
- logError(logCore, "ProtocolManager.updateOpenSPCoop2Message error: "+e.getMessage(),e);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,null)));
- }
- return;
- }
-
-
-
-
- /* -------- Indirizzi Risposta ------------- */
-
- String indirizzoFruitore = null;
- String indirizzoErogatore = null;
- IProtocolConfiguration protocolConfiguration = protocolFactory.createProtocolConfiguration();
- if(protocolConfiguration.isSupportoIndirizzoRisposta()){
- try {
- Connettore connettoreFruitore = null;
- try{
- connettoreFruitore = registroServiziReader.getConnettore(soggettoFruitore, nomeRegistroForSearch, requestInfo);
- }catch(org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound dNotFound){
- // ignore
- }
- if(connettoreFruitore!=null && !CostantiConfigurazione.DISABILITATO.equals(connettoreFruitore.getTipo())){
- if(connettoreFruitore.getProperties()!=null && connettoreFruitore.getProperties().containsKey(CostantiConnettori.CONNETTORE_LOCATION)){
- indirizzoFruitore = connettoreFruitore.getProperties().get(CostantiConnettori.CONNETTORE_LOCATION);
- }
- }
- msgDiag.mediumDebug("Indirizzo Risposta del soggetto fruitore ["+ soggettoFruitore+ "]: " + indirizzoFruitore);
-
- Connettore connettoreErogatore = null;
- try{
- connettoreErogatore = registroServiziReader.getConnettore(idServizio.getSoggettoErogatore(), nomeRegistroForSearch, requestInfo);
- }catch(org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound dNotFound){
- // ignore
- }
- if(connettoreErogatore!=null && !CostantiConfigurazione.DISABILITATO.equals(connettoreErogatore.getTipo())){
- if(connettoreErogatore.getProperties()!=null && connettoreErogatore.getProperties().containsKey(CostantiConnettori.CONNETTORE_LOCATION)){
- indirizzoErogatore = connettoreErogatore.getProperties().get(CostantiConnettori.CONNETTORE_LOCATION);
- }
- }
- msgDiag.mediumDebug("Indirizzo Risposta del soggetto erogatore ["+ idServizio.getSoggettoErogatore()+ "]: " + indirizzoErogatore);
-
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e,"recupero degli indirizzi di risposta per i soggetti fallita");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioFallita");
- logError(logCore, "Identificazione Indirizzo Risposta fallita",e);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,null)));
- }
- return;
- }
- this.msgContext.getProtocol().setIndirizzoFruitore(indirizzoFruitore);
- this.msgContext.getProtocol().setIndirizzoErogatore(indirizzoErogatore);
- }
-
-
- /* ---- Ricerca registro dei servizi terminata con successo --- */
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO,"registroServizi.ricercaServizioEffettuata");
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- // ------------- in-protocol-handler -----------------------------
- try{
- InRequestProtocolContext inRequestProtocolContext = new InRequestProtocolContext(inRequestContext);
- if(inRequestProtocolContext.getStato()==null) {
- inRequestProtocolContext.setStato(openspcoopstate.getStatoRichiesta());
- }
- if(inRequestProtocolContext.getConnettore()!=null){
- inRequestProtocolContext.getConnettore().setCredenziali(credenziali);
- }
- inRequestProtocolContext.setProtocollo(this.msgContext.getProtocol());
- inRequestProtocolContext.setIntegrazione(this.msgContext.getIntegrazione());
- GestoreHandlers.inRequestProtocol(inRequestProtocolContext, msgDiag, logCore);
- }catch(Exception e){
- ErroreIntegrazione erroreIntegrazione = null;
- IntegrationFunctionError integrationFunctionError = null;
- if(e instanceof HandlerException){
- HandlerException he = (HandlerException) e;
- if(he.isEmettiDiagnostico()){
- msgDiag.logErroreGenerico(e,he.getIdentitaHandler());
- }
- logError(logCore, "Gestione InRequestProtocolHandler non riuscita ("+he.getIdentitaHandler()+"): " + he);
- if(this.msgContext.isGestioneRisposta()){
- erroreIntegrazione = he.convertToErroreIntegrazione();
- integrationFunctionError = he.getIntegrationFunctionError();
- }
- }else{
- msgDiag.logErroreGenerico(e,"InvocazioneInRequestHandler");
- logError(logCore, "Gestione InRequestProtocolHandler non riuscita: " + e);
- }
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- if(erroreIntegrazione==null){
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_558_HANDLER_IN_PROTOCOL_REQUEST);
- }
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- OpenSPCoop2Message responseMessageError = this.generatoreErrore.build(pddContext,integrationFunctionError,erroreIntegrazione,e,null);
- if(e instanceof HandlerException){
- HandlerException he = (HandlerException) e;
- he.customized(responseMessageError);
- }
- this.msgContext.setMessageResponse(responseMessageError);
- }
- return;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
- /* -------------------------- Implementazione PdD Soggetti busta -------------------------------*/
- String implementazionePdDMittente = null;
- String implementazionePdDDestinatario = null;
- String idPdDMittente = null;
- String idPdDDestinatario = null;
- msgDiag.mediumDebug("Ricerca implementazione della porta di dominio dei soggetti...");
- try{
- implementazionePdDMittente = registroServiziReader.getImplementazionePdD(soggettoFruitore, null, requestInfo);
- implementazionePdDDestinatario = registroServiziReader.getImplementazionePdD(idServizio.getSoggettoErogatore(), null, requestInfo);
- idPdDMittente = registroServiziReader.getIdPortaDominio(soggettoFruitore, null, requestInfo);
- idPdDDestinatario = registroServiziReader.getIdPortaDominio(idServizio.getSoggettoErogatore(), null, requestInfo);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"ricercaImplementazioniPdD");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_534_REGISTRO_DEI_SERVIZI_NON_DISPONIBILE),e,null)));
- }
- return;
- }
- msgDiag.mediumDebug("ImplementazionePdD soggetto ("+soggettoFruitore.toString()+") e' ["+implementazionePdDMittente+"], soggetto ("
- +idServizio.getSoggettoErogatore().toString()+") e' ["+implementazionePdDDestinatario+"]");
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Controllo validazione xsd abilitata/disabilitata...");
-
-
-
- /* ------------ Validazione Contenuti Applicativi ------------- */
- msgDiag.mediumDebug("Controllo validazione xsd abilitata/disabilitata...");
- ValidazioneContenutiApplicativi validazioneContenutoApplicativoApplicativo = null;
- List<Proprieta> proprietaPorta = null;
- try {
- validazioneContenutoApplicativoApplicativo = configurazionePdDReader.getTipoValidazioneContenutoApplicativo(portaDelegata,implementazionePdDDestinatario, true);
- proprietaPorta = portaDelegata.getProprietaList();
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"getTipoValidazioneContenutoApplicativo(pd,"+implementazionePdDDestinatario+")");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,null)));
- }
- return;
- }
- if(validazioneContenutoApplicativoApplicativo!=null && validazioneContenutoApplicativoApplicativo.getTipo()!=null){
- String tipo = ValidatoreMessaggiApplicativi.getTipo(validazioneContenutoApplicativoApplicativo);
- this.msgContext.getIntegrazione().setTipoValidazioneContenuti(tipo);
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_VALIDAZIONE_CONTENUTI, tipo);
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS_VALIDAZIONE_CONTENUTI,"");
- }
- if (
- (validazioneContenutoApplicativoApplicativo!=null)
- &&
- (
- CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.equals(validazioneContenutoApplicativoApplicativo.getStato())
- ||
- CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato())
- )
- ) {
- transaction.getTempiElaborazione().startValidazioneRichiesta();
- ByteArrayInputStream binXSD = null;
- try {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRichiestaInCorso");
-
- boolean readInterface = CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(validazioneContenutoApplicativoApplicativo.getTipo());
-
- if(ServiceBinding.SOAP.equals(requestMessage.getServiceBinding())){
-
- // Accept mtom message
- List<MtomXomReference> xomReferences = null;
- if(StatoFunzionalita.ABILITATO.equals(validazioneContenutoApplicativoApplicativo.getAcceptMtomMessage())){
- msgDiag.mediumDebug("Validazione xsd della richiesta (mtomFastUnpackagingForXSDConformance)...");
- if(ServiceBinding.SOAP.equals(requestMessage.getServiceBinding())==false){
- throw new Exception("Funzionalita 'AcceptMtomMessage' valida solamente per Service Binding SOAP");
- }
- xomReferences = requestMessage.castAsSoap().mtomFastUnpackagingForXSDConformance();
- }
-
- // Init Validatore
- msgDiag.mediumDebug("Validazione xsd della richiesta (initValidator)...");
- ValidatoreMessaggiApplicativi validatoreMessaggiApplicativi = new ValidatoreMessaggiApplicativi(
- registroServiziReader, richiestaDelegata.getIdServizio(), requestMessage,readInterface,
- propertiesReader.isValidazioneContenutiApplicativiRpcLiteralXsiTypeGestione(),
- proprietaPorta,
- pddContext);
-
- // Validazione WSDL
- if (CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(validazioneContenutoApplicativoApplicativo.getTipo())
- || CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.equals(validazioneContenutoApplicativoApplicativo.getTipo())) {
- msgDiag.mediumDebug("Validazione wsdl della richiesta ...");
- validatoreMessaggiApplicativi.validateWithWsdlLogicoImplementativo(true);
- }
-
- // Validazione XSD
- msgDiag.mediumDebug("Validazione xsd della richiesta (validazione)...");
- validatoreMessaggiApplicativi.validateWithWsdlDefinitorio(true);
-
- // Validazione WSDL (Restore Original Document)
- if (CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(validazioneContenutoApplicativoApplicativo.getTipo())
- || CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.equals(validazioneContenutoApplicativoApplicativo.getTipo())) {
- if(propertiesReader.isValidazioneContenutiApplicativiRpcLiteralXsiTypeGestione() &&
- propertiesReader.isValidazioneContenutiApplicativiRpcLiteralXsiTypeRipulituraDopoValidazione()){
- msgDiag.mediumDebug("Ripristino elementi modificati per supportare validazione wsdl della richiesta ...");
- validatoreMessaggiApplicativi.restoreOriginalDocument(true);
- }
- }
-
- // Ripristino struttura messaggio con xom
- if(xomReferences!=null && xomReferences.size()>0){
- msgDiag.mediumDebug("Validazione xsd della richiesta (mtomRestoreAfterXSDConformance)...");
- if(ServiceBinding.SOAP.equals(requestMessage.getServiceBinding())==false){
- throw new Exception("Funzionalita 'AcceptMtomMessage' valida solamente per Service Binding SOAP");
- }
- requestMessage.castAsSoap().mtomRestoreAfterXSDConformance(xomReferences);
- }
-
- }
- else {
-
- // Init Validatore
- msgDiag.mediumDebug("Validazione della richiesta (initValidator)...");
- ValidatoreMessaggiApplicativiRest validatoreMessaggiApplicativi =
- new ValidatoreMessaggiApplicativiRest(registroServiziReader, richiestaDelegata.getIdServizio(), requestMessage, readInterface, proprietaPorta,
- protocolFactory, pddContext);
-
- if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD.equals(validazioneContenutoApplicativoApplicativo.getTipo()) &&
- requestMessage.castAsRest().hasContent()) {
-
- // Validazione XSD
- msgDiag.mediumDebug("Validazione xsd della richiesta ...");
- validatoreMessaggiApplicativi.validateWithSchemiXSD(true);
-
- }
- else {
-
- // Validazione Interface
- validatoreMessaggiApplicativi.validateRequestWithInterface(false);
-
- }
-
- }
-
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRichiestaEffettuata");
-
- } catch (ValidatoreMessaggiApplicativiException ex) {
- msgDiag.addKeywordErroreProcessamento(ex);
- logError(logCore, "[ValidazioneContenutiApplicativi Richiesta] "+ex.getMessage(),ex);
- if (CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato())) {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRichiestaNonRiuscita.warningOnly");
- }
- else {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRichiestaNonRiuscita");
- }
- if (CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato()) == false) {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_VALIDAZIONE_RICHIESTA, "true");
-
- // validazione abilitata
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- IntegrationFunctionError integrationFunctionError = null;
- if(ex.getErrore()!=null &&
- (
- //CodiceErroreIntegrazione.CODICE_417_COSTRUZIONE_VALIDATORE_TRAMITE_INTERFACCIA_FALLITA.equals(ex.getErrore().getCodiceErrore()) ||
- CodiceErroreIntegrazione.CODICE_418_VALIDAZIONE_RICHIESTA_TRAMITE_INTERFACCIA_FALLITA.equals(ex.getErrore().getCodiceErrore())
- )
- ){
- integrationFunctionError = IntegrationFunctionError.INVALID_REQUEST_CONTENT;
- }
- else{
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError, ex.getErrore(),ex,null)));
- }
- return;
- }
- } catch (Exception ex) {
- msgDiag.addKeywordErroreProcessamento(ex);
- logError(logCore, "Riscontrato errore durante la validazione xsd della richiesta applicativa",ex);
- if (CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato())) {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRichiestaNonRiuscita.warningOnly");
- }
- else {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRichiestaNonRiuscita");
- }
- if (CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato()) == false) {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_VALIDAZIONE_RICHIESTA, "true");
-
- // validazione abilitata
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_531_VALIDAZIONE_TRAMITE_INTERFACCIA_FALLITA),ex,null)));
- }
- return;
- }
- } finally {
- transaction.getTempiElaborazione().endValidazioneRichiesta();
- if (binXSD != null) {
- try {
- binXSD.close();
- } catch (Exception e) {
- // ignore
- }
- }
- }
- }
- else{
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRichiestaDisabilitata");
- }
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Autorizzazione del servizio applicativo...");
-
-
-
- /* ------------ Autorizzazione per Contenuto ------------- */
- msgDiag.mediumDebug("Autorizzazione del servizio applicativo...");
- this.msgContext.getIntegrazione().setTipoAutorizzazioneContenuto(tipoAutorizzazioneContenuto);
- if(tipoAutorizzazioneContenuto!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTORIZZAZIONE_CONTENUTO, tipoAutorizzazioneContenuto);
- }
- if (CostantiConfigurazione.AUTORIZZAZIONE_NONE.equalsIgnoreCase(tipoAutorizzazioneContenuto) == false) {
-
- transaction.getTempiElaborazione().startAutorizzazioneContenuti();
- try {
-
- msgDiag.logPersonalizzato("autorizzazioneContenutiApplicativiInCorso");
-
- ErroreIntegrazione errore = null;
- Exception eAutorizzazione = null;
- boolean detailsSet = false;
- IntegrationFunctionError integrationFunctionError = null;
- try {
- // Controllo Autorizzazione
- EsitoAutorizzazionePortaDelegata esito =
- GestoreAutorizzazione.verificaAutorizzazioneContenutoPortaDelegata(tipoAutorizzazioneContenuto, datiInvocazione, pddContext, protocolFactory, requestMessage, logCore);
- CostantiPdD.addKeywordInCache(msgDiag, esito.isEsitoPresenteInCache(),
- pddContext, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTORIZZAZIONE_CONTENUTI);
- if(esito.getDetails()==null){
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, "");
- }else{
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, " ("+esito.getDetails()+")");
- }
- detailsSet = true;
- if (esito.isAutorizzato() == false) {
- errore = esito.getErroreIntegrazione();
- eAutorizzazione = esito.getEccezioneProcessamento();
- integrationFunctionError = esito.getIntegrationFunctionError();
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_AUTORIZZAZIONE, "true");
- }
- else{
- msgDiag.logPersonalizzato("autorizzazioneContenutiApplicativiEffettuata");
- }
- } catch (Exception e) {
- CostantiPdD.addKeywordInCache(msgDiag, false,
- pddContext, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTORIZZAZIONE_CONTENUTI);
- String msgErroreAutorizzazione = "processo di autorizzazione ["
- + tipoAutorizzazioneContenuto + "] fallito, " + e.getMessage();
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErroreAutorizzazione, CodiceErroreIntegrazione.CODICE_542_AUTORIZZAZIONE_CONTENUTO);
- eAutorizzazione = e;
- logError(logCore, msgErroreAutorizzazione,e);
- }
- if (errore != null) {
- if(!detailsSet) {
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, "");
- }
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, errore.getDescrizione(protocolFactory));
- msgDiag.logPersonalizzato("servizioApplicativoFruitore.contenuto.nonAutorizzato");
- openspcoopstate.releaseResource();
-
- if (this.msgContext.isGestioneRisposta()) {
- if(CodiceErroreIntegrazione.CODICE_404_AUTORIZZAZIONE_FALLITA.equals(errore.getCodiceErrore()) ||
- CodiceErroreIntegrazione.CODICE_428_AUTORIZZAZIONE_CONTENUTO_FALLITA.equals(errore.getCodiceErrore())){
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.CONTENT_AUTHORIZATION_DENY;
- }
- }else{
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- }
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError,errore,
- eAutorizzazione,null)));
- }
- return;
- }
- }finally {
- transaction.getTempiElaborazione().endAutorizzazioneContenuti();
- }
- }
- else{
- msgDiag.logPersonalizzato("autorizzazioneContenutiApplicativiDisabilitata");
- }
-
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Controllo tipo di invocazione (riferimento/normale)...");
-
-
-
- /*
- * ------------ Check tipo di invocazione PD (x riferimento) -------------
- */
- msgDiag.mediumDebug("Controllo tipo di invocazione (riferimento/normale)...");
- boolean invocazionePDPerRiferimento = false;
- try {
- invocazionePDPerRiferimento = configurazionePdDReader.invocazionePortaDelegataPerRiferimento(sa);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"invocazionePortaDelegataPerRiferimento(sa)");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,null)));
- }
- return;
- }
- if (invocazionePDPerRiferimento) {
- if (this.msgContext.isInvocazionePDPerRiferimento() == false) {
- msgDiag.logPersonalizzato("portaDelegataInvocabilePerRiferimento.riferimentoNonPresente");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.BAD_REQUEST,
- ErroriIntegrazione.ERRORE_412_PD_INVOCABILE_SOLO_PER_RIFERIMENTO.
- getErroreIntegrazione(),null,null)));
- }
- return;
- }
-
- try {
- if(openspcoopstate.resourceReleased()) {
- // inizializzo
- openspcoopstate.setUseConnection(true);
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(), idTransazione);
- }
- }catch (Exception e) {
- msgDiag.logErroreGenerico(e,"openspcoopstate.initResource() 'invocazionePerRiferimento'");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION), e,null)));
- }
- return;
- }
-
- // eventuale sbustamento delle informazioni di protocollo se richieste dal servizio applicativo
- GestoreMessaggi gestoreMessaggio = new GestoreMessaggi(openspcoopstate, true,this.msgContext.getIdInvocazionePDPerRiferimento(),Costanti.INBOX,msgDiag,this.msgContext.getPddContext());
- try{
- boolean sbustamento_informazioni_protocollo =
- gestoreMessaggio.sbustamentoInformazioniProtocollo(servizioApplicativo,false);
- if(sbustamento_informazioni_protocollo){
- // attachments non gestiti!
- ProprietaManifestAttachments proprietaManifest = propertiesReader.getProprietaManifestAttachments("standard");
- proprietaManifest.setGestioneManifest(false);
- ProtocolMessage protocolMessage = bustaBuilder.sbustamento(requestMessage, pddContext,
- bustaRichiesta, RuoloMessaggio.RICHIESTA, proprietaManifest,
- FaseSbustamento.PRE_INVIO_RICHIESTA_PER_RIFERIMENTO, requestInfo.getIntegrationServiceBinding(), requestInfo.getBindingConfig());
- if(protocolMessage!=null) {
- requestMessage = protocolMessage.getMessage(); // updated
- }
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"invocazionePortaDelegataPerRiferimento.sbustamentoProtocolHeader()");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,null)));
- }
- return;
- }
-
- } else {
- if (this.msgContext.isInvocazionePDPerRiferimento()) {
- msgDiag.logPersonalizzato("portaDelegataInvocabileNormalmente.riferimentoPresente");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.BAD_REQUEST,
- ErroriIntegrazione.ERRORE_413_PD_INVOCABILE_SOLO_SENZA_RIFERIMENTO.
- getErroreIntegrazione(),null,null)));
- }
- return;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Controllo non esistenza di una busta ...");
-
-
-
-
- /* ------------ Controllo che il messaggio non contenga una busta */
- msgDiag.mediumDebug("Controllo non esistenza di una busta ...");
- ValidazioneSintattica validatoreSintattico = new ValidazioneSintattica(pddContext, openspcoopstate.getStatoRichiesta(),requestMessage, protocolFactory);
- boolean esisteProtocolloMsgRichiesta = false;
- boolean esisteProtocolloMsgRichiestaExit = false;
- try{
- esisteProtocolloMsgRichiesta = validatoreSintattico.
- verifyProtocolPresence(this.msgContext.getTipoPorta(),infoServizio.getProfiloDiCollaborazione(),RuoloMessaggio.RICHIESTA);
- } catch (Exception e){
- msgDiag.logErroreGenerico(e,"controlloEsistenzaBusta");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,null)));
- }
- esisteProtocolloMsgRichiestaExit = true;
- } finally {
- if(esisteProtocolloMsgRichiesta) {
- msgDiag.logPersonalizzato("richiestaContenenteBusta");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTEROPERABILITY_PROFILE_REQUEST_ALREADY_EXISTS,
- ErroriIntegrazione.ERRORE_420_BUSTA_PRESENTE_RICHIESTA_APPLICATIVA.
- getErroreIntegrazione(),null,null)));
- }
- esisteProtocolloMsgRichiestaExit = true;
- }
- // *** GB ***
- if(validatoreSintattico!=null){
- validatoreSintattico.setHeaderSOAP(null);
- }
- validatoreSintattico = null;
- // *** GB ***
- }
- if(esisteProtocolloMsgRichiestaExit) {
- return;
- }
-
-
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Recupero configurazione per salvataggio risposta in cache ...");
- msgDiag.mediumDebug("Recupero configurazione per salvataggio risposta in cache ...");
- try{
- ResponseCachingConfigurazione responseCachingConfig = configurazionePdDReader.getConfigurazioneResponseCaching(portaDelegata);
- if(responseCachingConfig!=null && StatoFunzionalita.ABILITATO.equals(responseCachingConfig.getStato())) {
-
- transaction.getTempiElaborazione().startResponseCachingCalcoloDigest();
- try {
-
- msgDiag.mediumDebug("Calcolo digest per salvataggio risposta ...");
-
- HashGenerator hashGenerator = new HashGenerator(propertiesReader.getCachingResponseDigestAlgorithm());
- String digest = hashGenerator.buildKeyCache(requestMessage, requestInfo, responseCachingConfig);
- requestMessage.addContextProperty(CostantiPdD.RESPONSE_CACHE_REQUEST_DIGEST, digest);
-
- }finally {
- transaction.getTempiElaborazione().endResponseCachingCalcoloDigest();
- }
- }
- } catch (Exception e){
- msgDiag.logErroreGenerico(e,"calcoloDigestSalvataggioRisposta");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_561_DIGEST_REQUEST),e,null)));
- }
- return;
- }
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Update/Delete Header di integrazione se necessario");
-
-
-
-
-
- /*
- * ------- Update/Delete Header di integrazione se necessario -------
- */
- // L'header di integrazione SOAP non e' cancellato se presente.
- // Deve allora essere aggiornato ai valori letti
-
- for (int i = 0; i < tipiIntegrazionePD.length; i++) {
- try {
- IGestoreIntegrazionePD gestore = null;
- try {
- gestore = (IGestoreIntegrazionePD) pluginLoader.newIntegrazionePortaDelegata(tipiIntegrazionePD[i]);
- }catch(Exception e){
- throw e;
- }
- if(gestore!=null){
- String classType = null;
- try {
- classType = gestore.getClass().getName();
- AbstractCore.init(gestore, pddContext, protocolFactory);
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante l'inizializzazione della classe ["+ classType
- + "] da utilizzare per la gestione dell'integrazione delle fruizioni (Update/Delete) di tipo ["+ tipiIntegrazionePD[i] + "]: " + e.getMessage());
- }
- if (gestore instanceof IGestoreIntegrazionePDSoap) {
- if(propertiesReader.deleteHeaderIntegrazioneRequestPD()){
- // delete
- ((IGestoreIntegrazionePDSoap)gestore).deleteInRequestHeader(inRequestPDMessage);
- }
- else{
- // update
- String servizioApplicativoDaInserireHeader = null;
- if(CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO.equals(servizioApplicativo)==false){
- servizioApplicativoDaInserireHeader = servizioApplicativo;
- }
- ((IGestoreIntegrazionePDSoap)gestore).updateInRequestHeader(inRequestPDMessage, idServizio,
- idMessageRequest, servizioApplicativoDaInserireHeader, idCorrelazioneApplicativa);
- }
- }
- }
- } catch (Exception e) {
- if(propertiesReader.deleteHeaderIntegrazioneRequestPD()){
- msgDiag.logErroreGenerico(e,"deleteHeaderIntegrazione("+ tipiIntegrazionePD[i]+")");
- }else{
- msgDiag.logErroreGenerico(e,"updateHeaderIntegrazione("+ tipiIntegrazionePD[i]+")");
- }
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_541_GESTIONE_HEADER_INTEGRAZIONE),e,null)));
- }
- return;
- }
- }
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Gestione Funzionalita' speciali per Attachments (Manifest)");
-
-
-
-
-
- /*
- * ------------ Gestione Funzionalita' speciali per Attachments (Manifest) -------------
- */
- boolean allegaBody = false;
- boolean scartaBody = false;
- try {
- allegaBody = configurazionePdDReader.isAllegaBody(portaDelegata);
- scartaBody = configurazionePdDReader.isScartaBody(portaDelegata);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"configurazionePdDReader.isAllega/ScartaBody(pd)");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,null)));
- }
- return;
- }
- if (scartaBody) {
- IntegrationFunctionError integrationFunctionError = null;
- try {
- if(ServiceBinding.SOAP.equals(requestMessage.getServiceBinding())==false){
- integrationFunctionError = IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL;
- throw new Exception("Funzionalita 'ScartaBody' valida solamente per Service Binding SOAP");
- }
-
- // E' permesso SOLO per messaggi con attachment
- if (requestMessage.castAsSoap().countAttachments() <= 0) {
- throw new Exception("La funzionalita' e' permessa solo per messaggi SOAP With Attachments");
- }
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("funzionalitaScartaBodyNonEffettuabile");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.BAD_REQUEST;
- }
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,integrationFunctionError,
- ErroriIntegrazione.ERRORE_425_SCARTA_BODY.
- getErrore425_ScartaBody(e.getMessage()),e,null)));
- }
- return;
- }
- }
- if (allegaBody) {
- try {
- TunnelSoapUtils.allegaBody(requestMessage, propertiesReader.getHeaderSoapActorIntegrazione());
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("funzionalitaAllegaBodyNonEffettuabile");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.BAD_REQUEST,
- ErroriIntegrazione.ERRORE_424_ALLEGA_BODY.
- getErrore424_AllegaBody(e.getMessage()), e,null)));
- }
- return;
- }
- }
-
-
-
-
-
-
-
-
-
-
- /* ------------- Modalita' di gestione ---------------------------- */
-
- // Versione OneWay
- boolean oneWayStateless = false;
- boolean oneWayVersione11 = false;
- // Versione Sincrono
- boolean sincronoStateless = false;
- // Asincrono stateless
- boolean asincronoStateless = false;
-
- // Gestione stateless
- boolean portaStateless = false; // vero se almeno uno dei precedenti e' vero
- try {
- if(propertiesReader.isServerJ2EE()==false){
- // Stateless obbligatorio in server di tipo web (non j2ee)
- oneWayStateless = true;
- sincronoStateless = true;
- asincronoStateless = true;
- }
- else if (ProfiloDiCollaborazione.ONEWAY.equals(infoServizio.getProfiloDiCollaborazione())) {
- oneWayStateless = configurazionePdDReader.isModalitaStateless(portaDelegata, infoServizio.getProfiloDiCollaborazione());
- } else if (ProfiloDiCollaborazione.SINCRONO.equals(infoServizio.getProfiloDiCollaborazione())) {
- sincronoStateless = configurazionePdDReader.isModalitaStateless(portaDelegata, infoServizio.getProfiloDiCollaborazione());
- } else if(ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione()) ||
- ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione())){
- asincronoStateless = configurazionePdDReader.isModalitaStateless(portaDelegata, infoServizio.getProfiloDiCollaborazione());
- }
- oneWayVersione11 = propertiesReader.isGestioneOnewayStateful_1_1()
- && ProfiloDiCollaborazione.ONEWAY.equals(infoServizio.getProfiloDiCollaborazione())
- && !oneWayStateless;
- if (oneWayStateless || sincronoStateless || asincronoStateless || oneWayVersione11) {
- openspcoopstate = OpenSPCoopState.toStateless(((OpenSPCoopStateful)openspcoopstate), openspcoopstate.isUseConnection());
- portaStateless = true;
- if(oneWayVersione11==false){
- this.msgContext.getIntegrazione().setGestioneStateless(true);
- }else{
- this.msgContext.getIntegrazione().setGestioneStateless(false);
- }
- }else{
- this.msgContext.getIntegrazione().setGestioneStateless(false);
- }
-
- if(!portaStateless || oneWayVersione11) {
- if(!openspcoopstate.isUseConnection() &&
- (openspcoopstate instanceof OpenSPCoopStateful || oneWayVersione11)) {
- if(openspcoopstate.resourceReleased()) {
- // inizializzo
- openspcoopstate.setUseConnection(true);
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(), idTransazione);
- }
- }
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"GestioneStatelessStateful");
- logError(logCore, "Analisi modalita di gestione STATEFUL/STATELESS non riuscita: "+ e);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,null)));
- }
- return;
- }
-
-
-
-
-
-
-
-
- /* ------------- Modalita' di forward ---------------------------- */
-
- // Versione OneWay
- boolean localForward = false;
- LocalForwardEngine localForwardEngine = null;
- LocalForwardParameter localForwardParameter = null;
- PortaApplicativa pa = null;
- try {
- localForward = configurazionePdDReader.isLocalForwardMode(portaDelegata);
-
- if(localForward){
-
- String erroreConfigurazione = null;
-
- String prefix = "( Servizio "+IDServizioFactory.getInstance().getUriFromIDServizio(idServizio)+" ) ";
-
- if(ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione()) ||
- ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione())){
- erroreConfigurazione = "profilo di collaborazione "+infoServizio.getProfiloDiCollaborazione().getEngineValue()+" non supportato";
- }
-
- if(erroreConfigurazione==null){
- if (ProfiloDiCollaborazione.SINCRONO.equals(infoServizio.getProfiloDiCollaborazione())) {
- if(sincronoStateless==false){
- erroreConfigurazione = "profilo di collaborazione "+infoServizio.getProfiloDiCollaborazione().getEngineValue()+" non supportato nella modalitร stateful";
- }
- }
- }
-
- if(erroreConfigurazione==null){
- if(configurazionePdDReader.existsSoggetto(idServizio.getSoggettoErogatore(), requestInfo)==false){
- erroreConfigurazione = "il soggetto erogatore non risulta essere gestito localmente dalla Porta";
- }
- }
-
- RichiestaApplicativa ra = null;
- IDPortaApplicativa idPA = null;
- if(erroreConfigurazione==null){
- String nomePA = configurazionePdDReader.getLocalForwardNomePortaApplicativa(portaDelegata);
- if(nomePA==null){
- try{
- List<PortaApplicativa> list = configurazionePdDReader.getPorteApplicative(idServizio, false);
- if(list.size()<=0){
- throw new DriverConfigurazioneNotFound("NotFound");
- }
- if(list.size()>1){
- StringBuilder bf = new StringBuilder();
- for (PortaApplicativa portaApplicativa : list) {
- if(bf.length()>0) {
- bf.append(",");
- }
- bf.append(portaApplicativa.getNome());
- }
- throw new Exception("Esiste piรน di una porta applicativa indirizzabile tramite il servizio ["+idServizio+"] indicato nella porta delegata ["+
- nomeUtilizzatoPerErrore+"]: "+bf.toString());
- }
- idPA = configurazionePdDReader.convertToIDPortaApplicativa(list.get(0));
- }catch(DriverConfigurazioneNotFound n){
- erroreConfigurazione = "Non esiste alcuna porta applicativa indirizzabile tramite il servizio ["+idServizio+"] indicato nella porta delegata ["+
- nomeUtilizzatoPerErrore+"]";
- }catch(Exception e){
- erroreConfigurazione = e.getMessage();
- }
- }
- else{
- try{
- idPA = configurazionePdDReader.getIDPortaApplicativa(nomePA, requestInfo, protocolFactory);
- }catch(Exception e){
- erroreConfigurazione = e.getMessage();
- }
- }
- }
-
- if(erroreConfigurazione==null){
- ra = new RichiestaApplicativa(soggettoFruitore,idServizio.getSoggettoErogatore(), idPA);
- ra.setIntegrazione(this.msgContext.getIntegrazione());
- ra.setProtocol(this.msgContext.getProtocol());
- pa = configurazionePdDReader.getPortaApplicativaSafeMethod(ra.getIdPortaApplicativa(), requestInfo);
- if(pa.sizeServizioApplicativoList()<=0){
- erroreConfigurazione = "non risultano registrati servizi applicativi erogatori associati alla porta applicativa ("+pa.getNome()
- +") relativa al servizio richiesto";
- }
- }
-
-
- if(erroreConfigurazione!=null){
- erroreConfigurazione = prefix + erroreConfigurazione;
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO,erroreConfigurazione);
- msgDiag.logPersonalizzato("localForward.configError");
-
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_435_LOCAL_FORWARD_CONFIG_NON_VALIDA.
- getErrore435_LocalForwardConfigNonValida(erroreConfigurazione),null,null)));
- }
- return;
- }
-
- localForwardParameter = new LocalForwardParameter();
- localForwardParameter.setLog(logCore);
- localForwardParameter.setConfigurazionePdDReader(configurazionePdDReader);
- localForwardParameter.setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
- localForwardParameter.setIdentitaPdD(identitaPdD);
- localForwardParameter.setIdModulo(this.msgContext.getIdModulo());
- localForwardParameter.setIdRequest(idMessageRequest);
- localForwardParameter.setImplementazionePdDDestinatario(implementazionePdDDestinatario);
- localForwardParameter.setImplementazionePdDMittente(implementazionePdDMittente);
- localForwardParameter.setIdPdDMittente(idPdDMittente);
- localForwardParameter.setIdPdDDestinatario(idPdDDestinatario);
- localForwardParameter.setInfoServizio(infoServizio);
- localForwardParameter.setMsgDiag(msgDiag);
- localForwardParameter.setOpenspcoopstate(openspcoopstate);
- localForwardParameter.setPddContext(inRequestContext.getPddContext());
- localForwardParameter.setProtocolFactory(protocolFactory);
- localForwardParameter.setRichiestaDelegata(richiestaDelegata);
- localForwardParameter.setStateless(portaStateless);
- localForwardParameter.setOneWayVersione11(oneWayVersione11);
- localForwardParameter.setIdPortaApplicativaIndirizzata(idPA);
-
- localForwardEngine = new LocalForwardEngine(localForwardParameter);
-
- }
-
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"GestioneLocalForward");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_554_LOCAL_FORWARD_ERROR),e,null)));
- }
- return;
- }
-
-
- if(localForward){
- try {
- if(localForwardEngine.processRequest(requestMessage)==false){
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse(localForwardEngine.getResponseMessageError());
- }
- return;
- }
- if(localForwardEngine.getRequestMessageAfterProcess()!=null){
- // Messaggio aggiornato
- requestMessage = localForwardEngine.getRequestMessageAfterProcess();
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"GestioneLocalForward.processRequest");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_555_LOCAL_FORWARD_PROCESS_REQUEST_ERROR),e,null)));
- }
- return;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Controllo presenza del messaggio gia' in gestione...");
-
-
-
-
-
- /* ---------------- Controllo esistenza messaggio --------------------- */
- msgDiag.mediumDebug("Controllo presenza del messaggio gia' in gestione...");
- GestoreMessaggi msgRequest = null;
- String tipoMessaggio = Costanti.OUTBOX;
- if(localForward){
- tipoMessaggio = Costanti.INBOX;
- }
- msgRequest = new GestoreMessaggi(openspcoopstate, true,idMessageRequest, tipoMessaggio, msgDiag, inRequestContext.getPddContext());
- msgRequest.setOneWayVersione11(oneWayVersione11);
- RepositoryBuste repositoryBuste = new RepositoryBuste(openspcoopstate.getStatoRichiesta(), true, protocolFactory);
- try {
- if (msgRequest.existsMessage_noCache()) {
- // Se il proprietario attuale e' GestoreMessaggi, forzo
- // l'eliminazione e continuo a processare il messaggio.
- String proprietarioMessaggio = msgRequest.getProprietario(this.msgContext.getIdModulo());
- if (TimerGestoreMessaggi.ID_MODULO.equals(proprietarioMessaggio)) {
- msgDiag.logPersonalizzato("messaggioInGestione.marcatoDaEliminare");
- String msg = msgDiag.getMessaggio_replaceKeywords("messaggioInGestione.marcatoDaEliminare");
- if(propertiesReader.isMsgGiaInProcessamentoUseLock()) {
- msgRequest._deleteMessageWithLock(msg,propertiesReader.getMsgGiaInProcessamentoAttesaAttiva(),propertiesReader.getMsgGiaInProcessamentoCheckInterval());
- }
- else {
- msgRequest.deleteMessageByNow();
- }
- }
- // Altrimenti genero errore messaggio precedente ancora in
- // processamento
- else {
- msgDiag.addKeyword(CostantiPdD.KEY_PROPRIETARIO_MESSAGGIO, proprietarioMessaggio);
- msgDiag.logPersonalizzato("messaggioInGestione");
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.RICHIESTA_DUPLICATA, "true");
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.CONFLICT_IN_QUEUE,
- ErroriIntegrazione.ERRORE_537_BUSTA_GIA_RICEVUTA.get537_BustaGiaRicevuta(idMessageRequest),null,null)));
- }
- return;
- }
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"ControlloPresenzaMessaggioGiaInGestione");
- logError(logCore, "Controllo/gestione presenza messaggio gia in gestione non riuscito",e);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_537_BUSTA_GIA_RICEVUTA), e,null)));
- }
- return;
- }
-
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Registrazione messaggio di richiesta nel RepositoryMessaggi...");
-
-
-
-
-
- /*
- * ---------------- Creo sessione di gestione del messaggio ricevuto Il
- * messaggio viene assegnato al modulo 'Imbustamento' (futuro
- * proprietario) ---------------------
- */
- msgDiag.mediumDebug("Registrazione messaggio di richiesta nel RepositoryMessaggi...");
- IProtocolVersionManager moduleManager = protocolFactory.createProtocolVersionManager(richiestaDelegata.getProfiloGestione());
- boolean richiestaAsincronaSimmetricaStateless = false;
- try {
-
- // In caso di richiestaAsincronaSimmetrica e openspcoop stateless,
- // Devo comunque salvare le informazioni sul msg della richiesta.
- // Tali informazioni servono per il check nel modulo RicezioneBuste, per verificare di gestire la risposta
- // solo dopo aver terminato di gestire la richiesta con relativa ricevuta.
- if(ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione()) && portaStateless){
-
- if (StatoFunzionalitaProtocollo.ABILITATA.equals(moduleManager.getCollaborazione(infoServizio))) {
- // Se presente riferimentoMessaggio utilizzo quello come riferimento asincrono per la risposta.
- if (headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() != null) {
- richiestaAsincronaSimmetricaStateless = false;
- } else if (headerIntegrazioneRichiesta.getBusta().getIdCollaborazione() != null) {
- // Utilizzo Collaborazione come riferimentoServizioCorrelato
- // Tanto nelle linee guida non possono esistere piu' istanze con la stessa collaborazione, e' stata deprecata.
- // Per igni istanza asincrona (richiesta/risposta) la richiesta genera una collaborazione a capostipite
- richiestaAsincronaSimmetricaStateless = false;
- }else{
- richiestaAsincronaSimmetricaStateless = true;
- }
- } else {
- richiestaAsincronaSimmetricaStateless = headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() == null;
- }
- }
-
-
- // Salvataggio messaggio
- msgRequest.registraMessaggio(requestMessage, dataIngressoRichiesta,
- (oneWayStateless || sincronoStateless || asincronoStateless),
- idCorrelazioneApplicativa);
- if(localForward){
- msgRequest.aggiornaProprietarioMessaggio(org.openspcoop2.pdd.mdb.ConsegnaContenutiApplicativi.ID_MODULO);
- }else{
- msgRequest.aggiornaProprietarioMessaggio(org.openspcoop2.pdd.mdb.Imbustamento.ID_MODULO);
- }
-
- if(richiestaAsincronaSimmetricaStateless){
- if(openspcoopstate.resourceReleased()) {
- // inizializzo
- openspcoopstate.setUseConnection(true);
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(), idTransazione);
- }
- msgRequest.registraInformazioniMessaggio_statelessEngine(dataIngressoRichiesta, org.openspcoop2.pdd.mdb.Imbustamento.ID_MODULO,
- idCorrelazioneApplicativa);
- }
-
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"msgRequest.aggiornaProprietarioMessaggio");
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata su fileSystem
- // Rilascio Connessione DB
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_508_SAVE_REQUEST_MSG), e,null)));
- }
- return;
- }
- msgDiag.mediumDebug("Registrazione busta di richiesta nel RepositoryBuste...");
- try {
- if( (!portaStateless) || oneWayVersione11){
- // E' gia registrata se siamo in un contesto di correlazione applicativa
- if (repositoryBuste.isRegistrata(idMessageRequest,tipoMessaggio)) {
- try{
- if(localForward){
- repositoryBuste.aggiornaBustaIntoInBox(idMessageRequest, soggettoFruitore, richiestaDelegata.getIdServizio(),
- propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),
- infoServizio.getProfiloDiCollaborazione(), infoServizio.getConfermaRicezione(), infoServizio.getInoltro());
- }else{
- repositoryBuste.aggiornaBustaIntoOutBox(idMessageRequest, soggettoFruitore, richiestaDelegata.getIdServizio(),
- propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),
- infoServizio.getProfiloDiCollaborazione(), infoServizio.getConfermaRicezione(), infoServizio.getInoltro());
- }
- repositoryBuste.impostaUtilizzoPdD(idMessageRequest,tipoMessaggio);
- }catch(Exception e){
- if(propertiesReader.isMsgGiaInProcessamentoUseLock()) {
- String tipo = Costanti.OUTBOX;
- if(localForward){
- tipo = Costanti.INBOX;
- }
- String causa = "Aggiornamento dati busta con id ["+idMessageRequest+"] tipo["+tipo+"] non riuscito: "+e.getMessage();
- try{
- GestoreMessaggi.acquireLock(msgRequest,TimerLock.newInstance(TipoLock._getLockGestioneRepositoryMessaggi()),msgDiag, causa, propertiesReader.getMsgGiaInProcessamentoAttesaAttiva(), propertiesReader.getMsgGiaInProcessamentoCheckInterval());
- // errore che puo' avvenire a causa del Timer delle Buste (vedi spiegazione in classe GestoreMessaggi.deleteMessageWithLock)
- // Si riesegue tutto il codice isRegistrata e update o create con il lock. Stavolta se avviene un errore non e' dovuto al timer.
- if (repositoryBuste.isRegistrata(idMessageRequest,tipoMessaggio)) {
- if(localForward){
- repositoryBuste.aggiornaBustaIntoInBox(idMessageRequest, soggettoFruitore, richiestaDelegata.getIdServizio(),
- propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),
- infoServizio.getProfiloDiCollaborazione(), infoServizio.getConfermaRicezione(), infoServizio.getInoltro());
- }else{
- repositoryBuste.aggiornaBustaIntoOutBox(idMessageRequest, soggettoFruitore, richiestaDelegata.getIdServizio(),
- propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),
- infoServizio.getProfiloDiCollaborazione(), infoServizio.getConfermaRicezione(), infoServizio.getInoltro());
- }
- repositoryBuste.impostaUtilizzoPdD(idMessageRequest,tipoMessaggio);
- }
- else {
- if(localForward){
- repositoryBuste.registraBustaIntoInBox(idMessageRequest, soggettoFruitore, richiestaDelegata.getIdServizio(),
- propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),
- infoServizio.getProfiloDiCollaborazione(), infoServizio.getConfermaRicezione(), infoServizio.getInoltro());
- }
- else{
- repositoryBuste.registraBustaIntoOutBox(idMessageRequest,soggettoFruitore, richiestaDelegata.getIdServizio(),
- propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),
- infoServizio.getProfiloDiCollaborazione(), infoServizio.getConfermaRicezione(), infoServizio.getInoltro());
- }
- }
- }finally{
- try{
- GestoreMessaggi.releaseLock(msgRequest,TimerLock.newInstance(TipoLock._getLockGestioneRepositoryMessaggi()),msgDiag, causa);
- }catch(Exception eUnlock){
- // ignore
- }
- }
- }
- else {
- throw e;
- }
- }
- } else {
- if(localForward){
- repositoryBuste.registraBustaIntoInBox(idMessageRequest, soggettoFruitore, richiestaDelegata.getIdServizio(),
- propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),
- infoServizio.getProfiloDiCollaborazione(), infoServizio.getConfermaRicezione(), infoServizio.getInoltro());
- }
- else{
- repositoryBuste.registraBustaIntoOutBox(idMessageRequest,soggettoFruitore, richiestaDelegata.getIdServizio(),
- propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),
- infoServizio.getProfiloDiCollaborazione(), infoServizio.getConfermaRicezione(), infoServizio.getInoltro());
- }
- }
- Integrazione infoIntegrazione = new Integrazione();
- infoIntegrazione.setIdModuloInAttesa(this.msgContext.getIdModulo());
- infoIntegrazione.setNomePorta(richiestaDelegata.getIdPortaDelegata().getNome());
- infoIntegrazione.setServizioApplicativo(richiestaDelegata.getServizioApplicativo());
- repositoryBuste.aggiornaInfoIntegrazione(idMessageRequest,tipoMessaggio,infoIntegrazione);
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"registrazioneAggiornamentoBusta");
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata su fileSystem
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO), e,null)));
- }
- return;
- }
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Invio messaggio al modulo di Imbustamento...");
-
-
-
-
-
-
- /* ------------ Spedizione a modulo Imbustamento/ConsegnaContenutiApplicativi ------------- */
- String nextModulo = org.openspcoop2.pdd.mdb.Imbustamento.ID_MODULO;
- if(localForward){
- msgDiag.addKeyword(CostantiPdD.KEY_PORTA_APPLICATIVA,pa.getNome());
- if(idServizio.getAzione()==null){
- msgDiag.addKeyword(CostantiPdD.KEY_AZIONE_BUSTA_RICHIESTA,"non presente");
- }
- msgDiag.logPersonalizzato("localForward.logInfo");
- nextModulo = ConsegnaContenutiApplicativi.ID_MODULO;
- }else{
- msgDiag.mediumDebug("Invio messaggio al modulo di Imbustamento...");
- }
- try {
-
- // set tipologia di filtro duplicati
- if(proprietaPorta!=null && !proprietaPorta.isEmpty()) {
- boolean filtroDuplicatiTestEnabled = CostantiProprieta.isFiltroDuplicatiTestEnabled(proprietaPorta, false); // filtro duplicati usato per test
- if(filtroDuplicatiTestEnabled) {
- pddContext.addObject(CostantiPdD.FILTRO_DUPLICATI_TEST, filtroDuplicatiTestEnabled);
- }
- }
-
- // Creazione ImbustamentoMessage
- msgDiag.highDebug("Creazione ObjectMessage for send nell'infrastruttura.");
- Serializable msgJMS = null;
-
- if(localForward){
-
- localForwardParameter.setRepositoryBuste(repositoryBuste);
- String portaDelegataAttuale = localForwardParameter.getMsgDiag().getPorta();
- localForwardParameter.getMsgDiag().updatePorta(TipoPdD.APPLICATIVA,localForwardParameter.getIdPortaApplicativaIndirizzata().getNome(), requestInfo);
- localForwardEngine.updateLocalForwardParameter(localForwardParameter);
-
- localForwardEngine.sendRequest(msgRequest);
-
- // ripristino
- localForwardParameter.getMsgDiag().updatePorta(TipoPdD.DELEGATA,portaDelegataAttuale, requestInfo);
-
- }
- else{
- imbustamentoMSG.setRichiestaDelegata(richiestaDelegata);
- imbustamentoMSG.setInfoServizio(infoServizio);
- imbustamentoMSG.setOneWayVersione11(oneWayVersione11);
- if (headerIntegrazioneRichiesta.getBusta() != null) {
- // RiferimentoServizioCorrelato
- String riferimentoServizioCorrelato = moduleManager.getIdCorrelazioneAsincrona(
- headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio(), headerIntegrazioneRichiesta.getBusta().getIdCollaborazione());
- if (riferimentoServizioCorrelato != null) {
- // Se presente riferimentoMessaggio utilizzo quello.
- imbustamentoMSG.setRiferimentoServizioCorrelato(riferimentoServizioCorrelato);
- }
- // Collaborazione
- if (headerIntegrazioneRichiesta.getBusta().getIdCollaborazione() != null)
- imbustamentoMSG.setIdCollaborazione(headerIntegrazioneRichiesta.getBusta().getIdCollaborazione());
- // RiferimentoMessaggio
- if (headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() != null)
- imbustamentoMSG.setIdRiferimentoMessaggio(headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio());
- }
- // Implemnentazione della porta erogatrice
- imbustamentoMSG.setImplementazionePdDSoggettoMittente(implementazionePdDMittente);
- imbustamentoMSG.setImplementazionePdDSoggettoDestinatario(implementazionePdDDestinatario);
- // Indirizzo soggetti
- imbustamentoMSG.setIndirizzoSoggettoMittente(indirizzoFruitore);
- imbustamentoMSG.setIndirizzoSoggettoDestinatario(indirizzoErogatore);
- // PddContext
- imbustamentoMSG.setPddContext(inRequestContext.getPddContext());
-
- msgJMS = imbustamentoMSG;
- }
- if (!portaStateless) {
- logDebug(logCore, RicezioneContenutiApplicativi.ID_MODULO+ " :eseguo send verso "+nextModulo+"...");
-
- String classTypeNodeSender = null;
- INodeSender nodeSender = null;
- try {
- classTypeNodeSender = className.getNodeSender(propertiesReader.getNodeSender());
- nodeSender = (INodeSender) loader.newInstance(classTypeNodeSender);
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante il caricamento della classe ["+ classTypeNodeSender
- + "] da utilizzare per la spedizione nell'infrastruttura: " + e.getMessage());
- }
-
- // send JMS solo STATEFUL
- nodeSender.send(msgJMS,nextModulo, msgDiag,
- identitaPdD, this.msgContext.getIdModulo(), idMessageRequest, msgRequest);
- logDebug(logCore, RicezioneContenutiApplicativi.ID_MODULO+ " :send verso "+nextModulo+" effettuata");
- }
- } catch (Exception e) {
- logError(logCore, "Spedizione->"+nextModulo+" non riuscita",e);
- msgDiag.logErroreGenerico(e,"GenericLib.nodeSender.send("+nextModulo+")");
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata precedentemente
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND),e,null)));
- }
- return;
- }
-
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Commit delle operazioni per la gestione della richiesta...");
-
-
-
-
- /* ------------ Commit/Rilascia connessione al DB ------------- */
- msgDiag.mediumDebug("Commit delle operazioni per la gestione della richiesta...");
- try {
- // Commit
- openspcoopstate.commit();
- logDebug(logCore, RicezioneContenutiApplicativi.ID_MODULO+ " :RicezioneContenutiApplicativi commit eseguito");
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"openspcoopstate.commit");
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata precedentemente
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_506_COMMIT_JDBC),e,null)));
- }
- return;
- }
- if (!portaStateless) {
- // Aggiornamento cache messaggio
- if (msgRequest != null)
- msgRequest.addMessaggiIntoCache_readFromTable(RicezioneContenutiApplicativi.ID_MODULO, "richiesta");
- // Aggiornamento cache proprietario messaggio
- if (msgRequest != null)
- msgRequest.addProprietariIntoCache_readFromTable(RicezioneContenutiApplicativi.ID_MODULO, "richiesta",null, false);
- // Rilascia connessione al DB
- msgDiag.mediumDebug("Commit delle operazioni per la gestione della richiesta effettuato, rilascio della connessione...");
- openspcoopstate.releaseResource();
- }
-
-
-
-
-
-
-
-
- /* ---------- Parametri Gestione risposta ------------- */
- RicezioneContenutiApplicativiGestioneRisposta parametriGestioneRisposta =
- new RicezioneContenutiApplicativiGestioneRisposta();
- parametriGestioneRisposta.setOpenspcoopstate(openspcoopstate);
-
- parametriGestioneRisposta.setRegistroServiziReader(registroServiziReader);
- parametriGestioneRisposta.setConfigurazionePdDReader(configurazionePdDReader);
- parametriGestioneRisposta.setMsgDiag(msgDiag);
- parametriGestioneRisposta.setLogCore(logCore);
- parametriGestioneRisposta.setPropertiesReader(propertiesReader);
-
- parametriGestioneRisposta.setIdentitaPdD(identitaPdD);
- parametriGestioneRisposta.setIdMessageRequest(idMessageRequest);
-
- parametriGestioneRisposta.setHeaderIntegrazioneRichiesta(headerIntegrazioneRichiesta);
- parametriGestioneRisposta.setHeaderIntegrazioneRisposta(headerIntegrazioneRisposta);
- parametriGestioneRisposta.setTipiIntegrazionePD(tipiIntegrazionePD);
-
- parametriGestioneRisposta.setProprietaErroreAppl(proprietaErroreAppl);
- parametriGestioneRisposta.setServizioApplicativo(servizioApplicativo);
-
- parametriGestioneRisposta.setMsgRequest(msgRequest);
- parametriGestioneRisposta.setRepositoryBuste(repositoryBuste);
-
- parametriGestioneRisposta.setPortaStateless(portaStateless);
- parametriGestioneRisposta.setOneWayVers11(oneWayVersione11);
- parametriGestioneRisposta.setRichiestaAsincronaSimmetricaStateless(richiestaAsincronaSimmetricaStateless);
- parametriGestioneRisposta.setPortaDelegata(portaDelegata);
- parametriGestioneRisposta.setSoggettoMittente(soggettoFruitore);
- parametriGestioneRisposta.setIdServizio(idServizio);
-
- parametriGestioneRisposta.setLocalForward(localForward);
-
- parametriGestioneRisposta.setPddContext(inRequestContext.getPddContext());
- parametriGestioneRisposta.setProtocolFactory(protocolFactory);
-
- parametriGestioneRisposta.setBustaRichiesta(bustaRichiesta);
-
-
-
-
-
- /*
- * ---------------- STATELESS OR Stateful v11 -------------
- */
- if (portaStateless) {
-
- // Durante le invocazioni non deve essere utilizzata la connessione al database
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(false);
- boolean result = comportamentoStateless(parametriGestioneRisposta, imbustamentoMSG);
- if (!result){
- openspcoopstate.releaseResource();
- return;
- }else{
- // ripristino utilizzo connessione al database
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- }
- }
-
- // refresh risorse con nuovi stati
- registroServiziReader = registroServiziReader.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
- configurazionePdDReader = configurazionePdDReader.refreshState(registroServiziReader);
- msgDiag.updateState(configurazionePdDReader);
-
-
-
- Utilities.printFreeMemory("RicezioneContenutiApplicativi - Gestione risposta...");
-
-
- /* ------------ GestioneRisposta non effettuata ------------- */
- msgDiag.mediumDebug("Gestione risposta...");
- if (this.msgContext.isGestioneRisposta() == false) {
- if(portaStateless)
- openspcoopstate.releaseResource();
- return;
- }
- gestioneRisposta(parametriGestioneRisposta);
- msgDiag.mediumDebug("Lavoro Terminato.");
- }finally{ // try vedi #try-finally-openspcoopstate#
- try{
- if(openspcoopstate!=null){
- openspcoopstate.forceFinallyReleaseResource();
- }
- }catch(Throwable e){
- if(msgDiag!=null){
- try{
- msgDiag.logErroreGenerico(e, "Rilascio risorsa");
- }catch(Throwable eLog){
- logError(logCore, "Diagnostico errore per Rilascio risorsa: "+eLog.getMessage(),eLog);
- }
- }
- else{
- logError(logCore, "Rilascio risorsa: "+e.getMessage(),e);
- }
- }
- }
- }
-
- private void setCredenziali(Credenziali credenziali,MsgDiagnostico msgDiag){
- if (credenziali != null) {
- if (credenziali.getUsername() != null){
- msgDiag.setServizioApplicativo("username("+ credenziali.getUsername() + ")");
- }else if (credenziali.getSubject() != null){
- msgDiag.setServizioApplicativo("subject("+ credenziali.getSubject() + ")");
- }else if (credenziali.getPrincipal() != null){
- msgDiag.setServizioApplicativo("principal("+ credenziali.getPrincipal() + ")");
- }
- else{
- msgDiag.setServizioApplicativo(null);
- }
- }
-
- String credenzialiFornite = "";
- if(credenziali!=null){
- credenzialiFornite = credenziali.toString();
- }
- msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_SA_FRUITORE, credenzialiFornite);
- }
-
-
- /*
- * Gestione stateless
- */
- private boolean comportamentoStateless(RicezioneContenutiApplicativiGestioneRisposta parametriGestioneRisposta,
- ImbustamentoMessage imbustamentoMSG) {
-
- /* ------- Lettura parametri ---------- */
-
- EsitoLib esito;
-
- OpenSPCoopStateless openspcoopstate = (OpenSPCoopStateless) parametriGestioneRisposta.getOpenspcoopstate();
-
- ConfigurazionePdDManager configurazionePdDReader = parametriGestioneRisposta.getConfigurazionePdDReader();
- RegistroServiziManager registroServiziReader = parametriGestioneRisposta.getRegistroServiziReader();
- MsgDiagnostico msgDiag = parametriGestioneRisposta.getMsgDiag();
- Logger logCore = parametriGestioneRisposta.getLogCore();
- OpenSPCoop2Properties propertiesReader = parametriGestioneRisposta.getPropertiesReader();
-
- //SOAPVersion versioneSoap = (SOAPVersion) this.msgContext.getPddContext().getObject(org.openspcoop2.core.constants.Costanti.SOAP_VERSION);
-
- String idMessageRequest = parametriGestioneRisposta.getIdMessageRequest();
-
- //ProprietaErroreApplicativo proprietaErroreAppl = parametriGestioneRisposta.getProprietaErroreAppl();
-
- GestoreMessaggi msgRequest = parametriGestioneRisposta.getMsgRequest();
-
- //IDSoggetto identitaPdD = parametriGestioneRisposta.getIdentitaPdD();
-
- parametriGestioneRisposta.setPortaStateless(true);
-
- boolean rinegoziamentoConnessione =
- propertiesReader.isRinegoziamentoConnessione(this.msgContext.getProtocol().getProfiloCollaborazione()) && (!parametriGestioneRisposta.isOneWayVers11());
- boolean localForward = parametriGestioneRisposta.isLocalForward();
-
- // ID Transazione
- @SuppressWarnings("unused")
- String idTransazione = PdDContext.getValue(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, imbustamentoMSG.getPddContext());
-
- PdDContext pddContext = parametriGestioneRisposta.getPddContext();
-
- if(localForward){
-
-
- // E' RicezioneContenutiApplicativi se siamo in oneway11 con presa in carico
- if( ConsegnaContenutiApplicativi.ID_MODULO.equals( ((OpenSPCoopStateless)openspcoopstate).getDestinatarioRequestMsgLib() )
- &&
- ((OpenSPCoopStateless)openspcoopstate).getDestinatarioResponseMsgLib()==null ){
-
-
-
- /* ------------ Rilascio risorsa se e' presente rinegoziamento delle risorse ------------------ */
- // Rinegozio la connessione SOLO se siamo in oneway o sincrono stateless puro (non oneway11)
- if( rinegoziamentoConnessione ){
- msgDiag.highDebug("ConsegnaContenutiApplicativi stateless (commit) ...");
- openspcoopstate.setUseConnection(true);
- try{
- openspcoopstate.commit();
- }catch(Exception e){
- // ignore
- }
- openspcoopstate.releaseResource();
- openspcoopstate.setUseConnection(false);
- }
-
-
-
- /*
- * ---------------------- CONSEGNA CONTENUTI APPLICATIVI ------------------
- */
-
- ConsegnaContenutiApplicativi consegnaContenutiLib = null;
- try {
- consegnaContenutiLib = new ConsegnaContenutiApplicativi(logCore);
- esito = consegnaContenutiLib.onMessage(openspcoopstate);
- if(esito.getStatoInvocazione()==EsitoLib.ERRORE_NON_GESTITO){
- if(esito.getErroreNonGestito()!=null)
- throw esito.getErroreNonGestito();
- else
- throw new Exception("Errore non gestito");
- }
- } catch (Throwable e) {
- msgDiag.logErroreGenerico(e,"Stateless.ConsegnaContenutiApplicativi");
- logError(logCore, "Errore Generale durante la gestione stateless: "+e.getMessage(),e);
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata precedentemente
- openspcoopstate.setUseConnection(true);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),e,null)));
- }
- return false;
- }
-
- if (esito.getStatoInvocazione() != EsitoLib.OK) {
- // ripristino utilizzo connessione al database
- openspcoopstate.setUseConnection(true);
- gestioneRisposta(parametriGestioneRisposta);
- return false;
- }
-
- }
-
-
- }
-
- else{
- /*------------------------------- IMBUSTAMENTO -------------------------------------------*/
- msgDiag.highDebug("Imbustamento stateless ...");
- org.openspcoop2.pdd.mdb.Imbustamento imbustamentoLib = null;
- openspcoopstate.setMessageLib(imbustamentoMSG);
- openspcoopstate.setIDMessaggioSessione(idMessageRequest);
- try {
- imbustamentoLib = new org.openspcoop2.pdd.mdb.Imbustamento(logCore);
- msgDiag.highDebug("Imbustamento stateless (invoco) ...");
- esito = imbustamentoLib.onMessage(openspcoopstate);
- msgDiag.highDebug("Imbustamento stateless (analizzo esito) ...");
- if(esito.getStatoInvocazione()==EsitoLib.ERRORE_NON_GESTITO){
- if(esito.getErroreNonGestito()!=null)
- throw esito.getErroreNonGestito();
- else
- throw new Exception("Errore non gestito");
- }
- } catch (Throwable e) {
- msgDiag.logErroreGenerico(e,"Stateless.Imbustamento");
- logError(logCore, "Errore Generale durante la gestione stateless: "+e.getMessage(),e);
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata precedentemente
- openspcoopstate.setUseConnection(true);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),e,null)));
- }
- return false;
- }
-
- // Se la chiamata alla libreria imbustamento non ha dato errori procedo con le altre librerie
- // Altrimenti faccio gestire l'errore prodotto dalla libreria
- if (esito.getStatoInvocazione() != EsitoLib.OK) {
- // ripristino utilizzo connessione al database
- openspcoopstate.setUseConnection(true);
- gestioneRisposta(parametriGestioneRisposta);
- msgDiag.highDebug("Imbustamento stateless (terminato:false)");
- return false;
- }
-
- // Gestione oneway versione 11
- if (openspcoopstate.getDestinatarioResponseMsgLib() != null
- && openspcoopstate.getDestinatarioResponseMsgLib().startsWith(RicezioneContenutiApplicativi.ID_MODULO)
- && propertiesReader.isGestioneOnewayStateful_1_1()){
- msgDiag.highDebug("Imbustamento stateless (terminato:true)");
- return true;
- }
-
- /* ------------ Rilascio risorsa se e' presente rinegoziamento delle risorse ------------------ */
- // Rinegozio la connessione SOLO se siamo in oneway o sincrono stateless puro (non oneway11)
- if( rinegoziamentoConnessione ){
- msgDiag.highDebug("Imbustamento stateless (commit) ...");
- openspcoopstate.setUseConnection(true);
- try{
- openspcoopstate.commit();
- }catch(Exception e){
- // ignore
- }
- openspcoopstate.releaseResource();
- openspcoopstate.setUseConnection(false);
- }
-
- msgDiag.highDebug("Imbustamento stateless terminato");
-
-
-
-
- /*
- * ---------------------- INOLTRO BUSTE ------------------
- */
-
- msgDiag.highDebug("InoltroBuste stateless ...");
- InoltroBuste inoltroBusteLib = null;
- try {
- inoltroBusteLib = new InoltroBuste(logCore);
- msgDiag.highDebug("InoltroBuste stateless (invoco) ...");
- esito = inoltroBusteLib.onMessage(openspcoopstate);
- msgDiag.highDebug("InoltroBuste stateless (analizzo esito) ...");
- if(esito.getStatoInvocazione()==EsitoLib.ERRORE_NON_GESTITO){
- if(esito.getErroreNonGestito()!=null)
- throw esito.getErroreNonGestito();
- else
- throw new Exception("Errore non gestito");
- }
- } catch (Throwable e) {
- msgDiag.logErroreGenerico(e,"Stateless.InoltroBuste");
- logError(logCore, "Errore Generale durante la gestione stateless: "+e.getMessage(),e);
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata precedentemente
- openspcoopstate.setUseConnection(true);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),e,null)));
- }
- return false;
- }
-
- if (esito.getStatoInvocazione() != EsitoLib.OK) {
- // ripristino utilizzo connessione al database
- openspcoopstate.setUseConnection(true);
- gestioneRisposta(parametriGestioneRisposta);
- msgDiag.highDebug("InoltroBuste stateless (terminato:false)");
- return false;
- }
-
- // Gestione oneway versione 11
- if (openspcoopstate.getDestinatarioResponseMsgLib()!=null &&
- openspcoopstate.getDestinatarioResponseMsgLib().startsWith(
- RicezioneContenutiApplicativi.ID_MODULO)){
- msgDiag.highDebug("InoltroBuste stateless (terminato:true)");
- return true;
- }
-
- msgDiag.highDebug("InoltroBuste stateless terminato");
-
-
-
-
-
- /*--------------- SBUSTAMENTO RISPOSTE ---------------- */
-
- msgDiag.highDebug("SbustamentoRisposte stateless ...");
- SbustamentoRisposte sbustamentoRisposteLib = null;
- boolean erroreSbustamentoRisposta = false;
- try {
- sbustamentoRisposteLib = new SbustamentoRisposte(logCore);
- /* Verifico che non abbia rilasciato la connessione, se si la riprendo */
- if( rinegoziamentoConnessione && openspcoopstate.resourceReleased()){
- /* per default disabilitato
- msgDiag.highDebug("SbustamentoRisposte stateless (initResourceDB) ...");
- openspcoopstate.setUseConnection(true);
- openspcoopstate.initResource(parametriGestioneRisposta.getIdentitaPdD(), SbustamentoRisposte.ID_MODULO, idTransazione);
- openspcoopstate.setUseConnection(false);
- */
- // update states
- registroServiziReader = registroServiziReader.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
- configurazionePdDReader = configurazionePdDReader.refreshState(registroServiziReader);
- msgDiag.updateState(configurazionePdDReader);
- }
- msgDiag.highDebug("SbustamentoRisposte stateless (invoco) ...");
- esito = sbustamentoRisposteLib.onMessage(openspcoopstate);
- msgDiag.highDebug("SbustamentoRisposte stateless (analizzo esito) ...");
- if(esito.getStatoInvocazione()==EsitoLib.ERRORE_NON_GESTITO){
- if(esito.getErroreNonGestito()!=null)
- throw esito.getErroreNonGestito();
- else
- throw new Exception("Errore non gestito");
- }
- } catch (Throwable e) {
- erroreSbustamentoRisposta = true;
- msgDiag.logErroreGenerico(e,"Stateless.SbustamentoRisposte");
- logError(logCore, "Errore Generale durante la gestione stateless: "+e.getMessage(),e);
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata precedentemente
- openspcoopstate.setUseConnection(true);
- openspcoopstate.releaseResource();
- if (this.msgContext.isGestioneRisposta()) {
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,AbstractErrorGenerator.getIntegrationInternalError(pddContext),
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),e,null)));
- }
- return false;
- }finally{
- /* Se devo rinegoziare la connessione, la rilascio */
- if( (rinegoziamentoConnessione) && (erroreSbustamentoRisposta==false) ){
- msgDiag.highDebug("SbustamentoRisposte stateless (commit) ...");
- openspcoopstate.setUseConnection(true);
- try{
- openspcoopstate.commit();
- }catch(Exception e){
- // ignore
- }
- openspcoopstate.releaseResource();
- openspcoopstate.setUseConnection(false);
- }
- }
-
- if (esito.getStatoInvocazione() != EsitoLib.OK) {
- // ripristino utilizzo connessione al database
- openspcoopstate.setUseConnection(true);
- gestioneRisposta(parametriGestioneRisposta);
- msgDiag.highDebug("SbustamentoRisposte stateless (terminato:false)");
- return false;
- }
- msgDiag.highDebug("SbustamentoRisposte stateless terminato");
-
- }
-
-
- return true;
- }
-
-
-
-
-
-
-
-
-
-
- /*--------------------------------------- GESTIONE RISPOSTA --------------------------- */
- /* Gestisce le risposte applicative di Ok o di errore */
- private void gestioneRisposta(RicezioneContenutiApplicativiGestioneRisposta parametriGestioneRisposta){
-
-
- /* ------- Lettura parametri ---------- */
- IOpenSPCoopState openspcoopstate = parametriGestioneRisposta.getOpenspcoopstate();
-
- MsgDiagnostico msgDiag = parametriGestioneRisposta.getMsgDiag();
- Logger logCore = parametriGestioneRisposta.getLogCore();
- OpenSPCoop2Properties propertiesReader = parametriGestioneRisposta.getPropertiesReader();
-
- IDSoggetto identitaPdD = parametriGestioneRisposta.getIdentitaPdD();
- String idMessageRequest = parametriGestioneRisposta.getIdMessageRequest();
-
- //ProprietaErroreApplicativo proprietaErroreAppl = parametriGestioneRisposta.getProprietaErroreAppl();
- String servizioApplicativo = parametriGestioneRisposta.getServizioApplicativo();
-
- HeaderIntegrazione headerIntegrazioneRichiesta = parametriGestioneRisposta.getHeaderIntegrazioneRichiesta();
- HeaderIntegrazione headerIntegrazioneRisposta = parametriGestioneRisposta.getHeaderIntegrazioneRisposta();
- String[] tipiIntegrazionePD = parametriGestioneRisposta.getTipiIntegrazionePD();
-
- GestoreMessaggi msgRequest = parametriGestioneRisposta.getMsgRequest();
- //RepositoryBuste repositoryBuste = parametriGestioneRisposta.getRepositoryBuste();
-
- boolean portaStateless = parametriGestioneRisposta.isPortaStateless();
- boolean oneWayVers11 = parametriGestioneRisposta.isOneWayVers11();
- boolean richiestaAsincronaSimmetricaStateless = parametriGestioneRisposta.isRichiestaAsincronaSimmetricaStateless();
-
- PdDContext pddContext = parametriGestioneRisposta.getPddContext();
- String idTransazione = PdDContext.getValue(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, pddContext);
- RequestInfo requestInfo = (RequestInfo) pddContext.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
-
- IProtocolFactory<?> protocolFactory = parametriGestioneRisposta.getProtocolFactory();
-
- Busta bustaRichiesta = parametriGestioneRisposta.getBustaRichiesta();
-
- Loader loader = Loader.getInstance();
- PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
-
- boolean errorOccurs_setResponse = false;
- /* ------------ GestioneRisposta ------------- */
- String idMessageResponse = null;
- String idCollaborazioneResponse = null;
- ProfiloDiCollaborazione profiloCollaborazione = null;
- String profiloCollaborazioneValue = null;
- OpenSPCoop2Message responseMessage = null;
- String idCorrelazioneApplicativaRisposta = null;
- //org.openspcoop.pdd.core.TempiAttraversamentoPDD tempiAttraversamentoGestioneMessaggi = null;
- //org.openspcoop.pdd.core.DimensioneMessaggiAttraversamentoPdD dimensioneMessaggiAttraversamentoGestioneMessaggi = null;
- try {
- if (portaStateless || oneWayVers11) {
-
- // Gestione stateless
-
- RicezioneContenutiApplicativiMessage ricezioneContenutiApplicativiMSG =
- (RicezioneContenutiApplicativiMessage) ((OpenSPCoopStateless) openspcoopstate).getMessageLib();
- idMessageResponse = ricezioneContenutiApplicativiMSG.getIdBustaRisposta();
- idCollaborazioneResponse = ricezioneContenutiApplicativiMSG.getIdCollaborazione();
- profiloCollaborazione = ricezioneContenutiApplicativiMSG.getProfiloCollaborazione();
- profiloCollaborazioneValue = ricezioneContenutiApplicativiMSG.getProfiloCollaborazioneValue();
- responseMessage = ((OpenSPCoopStateless) openspcoopstate).getRispostaMsg();
-
- idCorrelazioneApplicativaRisposta = ((OpenSPCoopStateless) openspcoopstate).getIDCorrelazioneApplicativaRisposta();
-
- if(ProfiloDiCollaborazione.ONEWAY.equals(profiloCollaborazione)==false){
- this.msgContext.getProtocol().setIdRisposta(idMessageResponse);
- }
- this.msgContext.getProtocol().setCollaborazione(idCollaborazioneResponse);
- //tempiAttraversamentoGestioneMessaggi =
- // ((OpenSPCoopStateless) openspcoopstate).getTempiAttraversamentoPDD();
- //dimensioneMessaggiAttraversamentoGestioneMessaggi =
- // ((OpenSPCoopStateless) openspcoopstate).getDimensioneMessaggiAttraversamentoPDD();
- // Aggiornamento Informazioni Protocollo
- msgDiag.setIdMessaggioRisposta(idMessageResponse);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RISPOSTA, idMessageResponse);
- }
- else {
- // Gestione stateful
-
- try {
- responseMessage = MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
- requestInfo.getIntegrationRequestMessageType(), MessageRole.RESPONSE);
- String classType = null;
- INodeReceiver nodeReceiver = null;
- try {
- classType = ClassNameProperties.getInstance().getNodeReceiver(propertiesReader.getNodeReceiver());
- nodeReceiver = (INodeReceiver) loader.newInstance(classType);
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante il caricamento della classe ["+ classType
- + "] da utilizzare per la ricezione dall'infrastruttura: "+ e.getMessage());
- }
-
- msgDiag.mediumDebug("Attesa/lettura risposta...");
- RicezioneContenutiApplicativiMessage ricezioneContenutiApplicativiMSG =
- (RicezioneContenutiApplicativiMessage) nodeReceiver.receive(
- msgDiag, identitaPdD,this.msgContext.getIdModulo(),idMessageRequest,
- propertiesReader.getNodeReceiverTimeoutRicezioneContenutiApplicativi(),
- propertiesReader.getNodeReceiverCheckInterval());
- idMessageResponse = ricezioneContenutiApplicativiMSG.getIdBustaRisposta();
- idCollaborazioneResponse = ricezioneContenutiApplicativiMSG.getIdCollaborazione();
- profiloCollaborazione = ricezioneContenutiApplicativiMSG.getProfiloCollaborazione();
- profiloCollaborazioneValue = ricezioneContenutiApplicativiMSG.getProfiloCollaborazioneValue();
- // aggiorno pddContext
- pddContext = ricezioneContenutiApplicativiMSG.getPddContext();
- if(pddContext!=null){
- List<MapKey<String>> enumPddContext = pddContext.keys();
- if(enumPddContext!=null && !enumPddContext.isEmpty()) {
- for (MapKey<String> key : enumPddContext) {
- //System.out.println("AGGIORNO KEY CONTENTUI ["+key+"]");
- this.msgContext.getPddContext().addObject(key, pddContext.getObject(key));
- }
- }
- }
-
- if(ProfiloDiCollaborazione.ONEWAY.equals(profiloCollaborazione)==false){
- this.msgContext.getProtocol().setIdRisposta(idMessageResponse);
- }
- this.msgContext.getProtocol().setCollaborazione(idCollaborazioneResponse);
- } catch (Exception e) {
- logError(logCore, "Gestione risposta ("+ this.msgContext.getIdModulo()+ ") con errore", e);
- msgDiag.logErroreGenerico(e,"GestioneRispostaErroreGenerale");
-
- // per la gestione del timeout ho bisogno di una connessione al database
- // In caso di Timeout elimino messaggi di richiesta ancora in processamento.
- if (e instanceof NodeTimeoutException) {
- // Get Connessione al DB
- try {
- openspcoopstate.updateResource(idTransazione);
- } catch (Exception eDB) {
- msgDiag.logErroreGenerico(e,"openspcoopstate.updateResource()");
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION),eDB,
- ((responseMessage!=null && responseMessage.getParseException()!=null)?responseMessage.getParseException():null))));
- return;
- }
- // Eliminazione msg di richiesta
- try {
- msgDiag.logPersonalizzato("timeoutRicezioneRisposta");
- msgRequest.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- openspcoopstate.commit();
- } catch (Exception eDel) {
- msgDiag.logErroreGenerico(eDel,"EliminazioneMessaggioScadutoTimeoutRicezioneRisposta");
- }
- // Rilascio connessione
- openspcoopstate.releaseResource();
- }
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_513_RECEIVE), e,
- ((responseMessage!=null && responseMessage.getParseException()!=null)?responseMessage.getParseException():null))));
- return;
- }
- // Aggiornamento Informazioni Protocollo
- msgDiag.setIdMessaggioRisposta(idMessageResponse);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RISPOSTA, idMessageResponse);
- /* ------------ Re-ottengo Connessione al DB -------------- */
- msgDiag.mediumDebug("Richiesta connessione al database per la gestione della risposta...");
- try {
- openspcoopstate.updateResource(idTransazione);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"openspcoopstate.updateResource()");
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION), e,
- ((responseMessage!=null && responseMessage.getParseException()!=null)?responseMessage.getParseException():null))));
- return;
- }
- msgRequest.updateOpenSPCoopState(openspcoopstate);
- /*
- * ------------ Lettura Contenuto Messaggio (mapping in Message) --------------
- */
- msgDiag.mediumDebug("Lettura messaggio di risposta...");
- GestoreMessaggi msgResponse = new GestoreMessaggi(openspcoopstate, false, idMessageResponse, Costanti.INBOX,msgDiag,this.msgContext.pddContext);
- try {
- responseMessage = msgResponse.getMessage();
- if(responseMessage!=null && this.msgContext.getPddContext()!=null) {
- Object o = responseMessage.getContextProperty(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO);
- if(o!=null && o instanceof Boolean) {
- this.msgContext.getPddContext().addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO, true);
- }
- o = responseMessage.getContextProperty(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO_PARSE_EXCEPTION);
- if(o!=null && o instanceof ParseException) {
- this.msgContext.getPddContext().addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO_PARSE_EXCEPTION, o);
- }
-
- o = responseMessage.getContextProperty(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO);
- if(o!=null && o instanceof Boolean) {
- this.msgContext.getPddContext().addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO, true);
- }
- o = responseMessage.getContextProperty(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO_PARSE_EXCEPTION);
- if(o!=null && o instanceof ParseException) {
- this.msgContext.getPddContext().addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO_PARSE_EXCEPTION, o);
- }
- }
- idCorrelazioneApplicativaRisposta = msgResponse.getIDCorrelazioneApplicativaRisposta();
-
- /*tempiAttraversamentoGestioneMessaggi = msgResponse.getTempiAttraversamentoPdD();
- if (tempiAttraversamentoGestioneMessaggi != null
- && (tempiAttraversamentoGestioneMessaggi.getRicezioneMsgIngresso()==null || tempiAttraversamentoGestioneMessaggi.getSpedizioneMessaggioIngresso()==null)) {
- TempiAttraversamentoPDD dRichiesta = msgRequest.getTempiAttraversamentoPdD();
- if (dRichiesta != null) {
- tempiAttraversamentoGestioneMessaggi.setSpedizioneMessaggioIngresso(dRichiesta.getSpedizioneMessaggioIngresso());
- }
- }
-
- dimensioneMessaggiAttraversamentoGestioneMessaggi = msgResponse.getDimensioneMessaggiAttraversamentoPdD();*/
- } catch (GestoreMessaggiException e) {
- msgDiag.logErroreGenerico(e,"msgResponse.getMessage()");
- openspcoopstate.releaseResource();
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_511_READ_RESPONSE_MSG), e,
- ((responseMessage!=null && responseMessage.getParseException()!=null)?responseMessage.getParseException():null))));
- return;
- }
- }
- } catch (Exception e) {
- logError(logCore, "ErroreGenerale", e);
- msgDiag.logErroreGenerico(e,"ErroreGenerale");
- openspcoopstate.releaseResource();
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(), e,
- ((responseMessage!=null && responseMessage.getParseException()!=null)?responseMessage.getParseException():null))
- ));
- errorOccurs_setResponse = true;
- }
-
-
- /* ---- Aggiorno informazioni correlazione applicativa risposta ---- */
- msgDiag.setIdCorrelazioneRisposta(idCorrelazioneApplicativaRisposta);
- if(this.msgContext.getProtocol()!=null){
- this.msgContext.getProtocol().setProfiloCollaborazione(profiloCollaborazione, profiloCollaborazioneValue);
- }
- if(this.msgContext.getIntegrazione()!=null)
- this.msgContext.getIntegrazione().setIdCorrelazioneApplicativaRisposta(idCorrelazioneApplicativaRisposta);
-
-
-
-
- /* ----- Header Integrazione ------ */
- msgDiag.mediumDebug("Gestione header di integrazione messaggio di risposta...");
- headerIntegrazioneRisposta.getBusta().setIdCollaborazione(idCollaborazioneResponse);
- headerIntegrazioneRisposta.getBusta().setProfiloDiCollaborazione(profiloCollaborazione);
- // -- REFRESH Impostation Risposta dell'Header Trasporto o se l'invocazione e' stata attiva dall'IntegrationManager --
- // Refresh necessario in seguito alla potenziale impostazione della collaborazione e Profilo di Collaborazione
- // ed eventuali altre future informazioni non subito disponibili
-
- String jtiIdModIRequest = null;
- Object bustaRispostaObject = null;
- if(pddContext!=null) {
- if(pddContext.containsKey(org.openspcoop2.core.constants.Costanti.MODI_JTI_REQUEST_ID)) {
- jtiIdModIRequest = (String) pddContext.get(org.openspcoop2.core.constants.Costanti.MODI_JTI_REQUEST_ID);
- }
- if(pddContext.containsKey(CostantiPdD.BUSTA_RISPOSTA)) {
- bustaRispostaObject = pddContext.getObject(CostantiPdD.BUSTA_RISPOSTA);
- }
- }
- if(jtiIdModIRequest!=null && StringUtils.isNotEmpty(jtiIdModIRequest) && !jtiIdModIRequest.equals(idMessageRequest)) {
- headerIntegrazioneRisposta.getBusta().setID(jtiIdModIRequest);
- }
- else {
- headerIntegrazioneRisposta.getBusta().setID(idMessageRequest);
- }
- OutResponsePDMessage outResponsePDMessage = new OutResponsePDMessage();
- outResponsePDMessage.setBustaRichiesta(bustaRichiesta);
- if(bustaRispostaObject instanceof Busta){
- Busta bustaRisposta = (Busta) bustaRispostaObject;
- // aggiungo proprieta' (vengono serializzate negli header di integrazione)
- if(bustaRisposta.sizeProperties()>0){
- String[]propertyNames = bustaRisposta.getPropertiesNames();
- for (int i = 0; i < propertyNames.length; i++) {
- outResponsePDMessage.getBustaRichiesta().addProperty(propertyNames[i], bustaRisposta.getProperty(propertyNames[i]));
- }
- }
- }
- outResponsePDMessage.setMessage(responseMessage);
- outResponsePDMessage.setPortaDelegata(parametriGestioneRisposta.getPortaDelegata());
- Map<String, List<String>> propertiesIntegrazioneRisposta = new HashMap<>();
- outResponsePDMessage.setHeaders(propertiesIntegrazioneRisposta);
- outResponsePDMessage.setServizio(parametriGestioneRisposta.getIdServizio());
- outResponsePDMessage.setSoggettoMittente(parametriGestioneRisposta.getSoggettoMittente());
- if (this.msgContext.getIdModulo().startsWith(RicezioneContenutiApplicativi.ID_MODULO+ IntegrationManager.ID_MODULO)) {
- try {
- IGestoreIntegrazionePD gestore = null;
- try {
- gestore = (IGestoreIntegrazionePD) pluginLoader.newIntegrazionePortaDelegata(CostantiConfigurazione.HEADER_INTEGRAZIONE_TRASPORTO);
- }catch(Exception e){
- throw e;
- }
- if(gestore!=null){
- String classType = null;
- try {
- classType = gestore.getClass().getName();
- AbstractCore.init(gestore, pddContext, protocolFactory);
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante l'inizializzazione della classe ["+ classType
- + "] da utilizzare per la gestione dell'integrazione delle fruizioni (Risposta IM) di tipo ["+ CostantiConfigurazione.HEADER_INTEGRAZIONE_TRASPORTO + "]: " + e.getMessage());
- }
- gestore.setOutResponseHeader(headerIntegrazioneRisposta, outResponsePDMessage);
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"setHeaderIntegrazioneRisposta");
- }
- }
- // HeaderIntegrazione
- for (int i = 0; i < tipiIntegrazionePD.length; i++) {
- try {
- IGestoreIntegrazionePD gestore = null;
- try {
- gestore = (IGestoreIntegrazionePD) pluginLoader.newIntegrazionePortaDelegata(tipiIntegrazionePD[i]);
- }catch(Exception e){
- throw e;
- }
- if(gestore!=null){
- String classType = null;
- try {
- classType = gestore.getClass().getName();
- AbstractCore.init(gestore, pddContext, protocolFactory);
- } catch (Exception e) {
- throw new Exception(
- "Riscontrato errore durante l'inizializzazione della classe ["+ classType
- + "] da utilizzare per la gestione dell'integrazione delle fruizioni (Risposta) di tipo ["+ tipiIntegrazionePD[i] + "]: " + e.getMessage());
- }
- if(gestore instanceof IGestoreIntegrazionePDSoap){
- if(propertiesReader.processHeaderIntegrazionePDResponse(false)){
- if(propertiesReader.deleteHeaderIntegrazioneResponsePD()){
- if(responseMessage==null){
- responseMessage = MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
- requestInfo.getIntegrationRequestMessageType(), MessageRole.RESPONSE);
- outResponsePDMessage.setMessage(responseMessage);
- }
- gestore.setOutResponseHeader(headerIntegrazioneRisposta,outResponsePDMessage);
- }else{
- // gia effettuato l'update dell'header in InoltroBuste
- }
- }else{
- if(responseMessage==null){
- responseMessage = MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
- requestInfo.getIntegrationRequestMessageType(), MessageRole.RESPONSE);
- outResponsePDMessage.setMessage(responseMessage);
- }
- gestore.setOutResponseHeader(headerIntegrazioneRisposta,outResponsePDMessage);
- }
- }else{
- gestore.setOutResponseHeader(headerIntegrazioneRisposta,outResponsePDMessage);
- }
- } else {
- throw new Exception("Gestore non inizializzato");
- }
- } catch (Exception e) {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_HEADER_INTEGRAZIONE,tipiIntegrazionePD[i]);
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("headerIntegrazione.creazioneFallita");
- logError(logCore, msgDiag.getMessaggio_replaceKeywords("headerIntegrazione.creazioneFallita"), e);
- }
- }
- // Imposto header di trasporto per la risposta
- this.msgContext.setResponseHeaders(propertiesIntegrazioneRisposta);
-
-
-
-
-
-
-
- /* ----- Eliminazione SIL (Stateful) ------ */
-
- if (!portaStateless)
- eliminaSIL((OpenSPCoopStateful) openspcoopstate, msgDiag, idMessageRequest, idMessageResponse,
- servizioApplicativo);
-
-
-
- /* ----- Aggiornamento proprietario (Stateless puro, no gestione oneway) ------ */
- if (portaStateless && !oneWayVers11) {
- msgDiag.mediumDebug("Aggiorno proprietario messaggio richiesta ...");
- try {
- /* Lo stateless che non รจ onewayVersione11 non salva niente su database */
- // A meno che non siamo in asincrono simmetrico richiesta stateless
- // In caso di richiestaAsincronaSimmetrica e openspcoop stateless,
- // Devo comunque salvare le informazioni sul msg della ricevuta alla richiesta.
- // Tali informazioni servono per il check nel modulo RicezioneBuste, per verificare di gestire la risposta
- // solo dopo aver terminato di gestire la richiesta con relativa ricevuta.
- if(richiestaAsincronaSimmetricaStateless){
- boolean resourceReleased = openspcoopstate.resourceReleased();
- if(resourceReleased){
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- openspcoopstate.updateResource(idTransazione);
- }
- GestoreMessaggi msgResponse = new GestoreMessaggi(openspcoopstate, false, idMessageResponse, Costanti.INBOX,msgDiag,this.msgContext.pddContext);
- msgResponse.setReadyForDrop(true);
- msgResponse.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- msgResponse.setReadyForDrop(false);
-
- // Devo eliminare anche la richiesta (nel caso in cui non sia arrivata la validazione della ricevuta)
- msgRequest.updateOpenSPCoopState(openspcoopstate);
- msgRequest.setReadyForDrop(true);
- msgRequest.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- msgRequest.setReadyForDrop(false);
- }
-
- // Committo modifiche (I commit servono per eventuali modifiche ai duplicati)
- openspcoopstate.commit();
-
- } catch (Exception e) {
- logError(logCore, "Errore durante l'aggiornamento del proprietario al GestoreMessaggi (Stateless)", e);
- msgDiag.logErroreGenerico(e, "openspcoopstate.commit(stateless risposta)");
- openspcoopstate.releaseResource();
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(), e,
- ((responseMessage!=null && responseMessage.getParseException()!=null)?responseMessage.getParseException():null))));
- errorOccurs_setResponse = true;
- }
- }
-
-
- /* ----- OneWay stateful/stateless ------ */
-
- if (oneWayVers11) {
- msgDiag.mediumDebug("Commit della gestione oneWay stateful/stateless...");
- try {
- // Committo modifiche
- openspcoopstate.commit();
- } catch (Exception e) {
- logError(logCore, "Riscontrato errore durante il commit della gestione oneWay stateful/stateless", e);
- msgDiag.logErroreGenerico(e, "openspcoopstate.commit(oneway1.1 risposta)");
- openspcoopstate.releaseResource();
- this.msgContext.setMessageResponse((this.generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(), e,
- ((responseMessage!=null && responseMessage.getParseException()!=null)?responseMessage.getParseException():null))));
- errorOccurs_setResponse = true;
- }
- }
-
-
-
-
- /* ----- Terminazione gestione richiesta ------ */
-
- // Rilascio connessione al DB
- msgDiag.mediumDebug("Rilascio connessione al database...");
- openspcoopstate.releaseResource();
- // Risposta
- if (profiloCollaborazione != null) {
- if (profiloCollaborazione.equals(ProfiloDiCollaborazione.SINCRONO)) {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "risposta sincrona");
- msgDiag.logPersonalizzato("consegnaRispostaApplicativa");
- } else if (profiloCollaborazione.equals(ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO)) {
- if (headerIntegrazioneRichiesta != null
- && headerIntegrazioneRichiesta.getBusta() != null
- && headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() != null) {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "ricevuta di una risposta asincrona simmetrica");
- } else {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "ricevuta di una richiesta asincrona simmetrica");
- }
- msgDiag.logPersonalizzato("consegnaRispostaApplicativa");
- } else if (profiloCollaborazione.equals(ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)) {
- if (headerIntegrazioneRichiesta != null
- && headerIntegrazioneRichiesta.getBusta() != null
- && headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() != null) {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "ricevuta di una risposta asincrona asimmetrica");
- } else {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPOLOGIA_RISPOSTA_APPLICATIVA, "ricevuta di una richiesta asincrona asimmetrica");
- }
- msgDiag.logPersonalizzato("consegnaRispostaApplicativa");
- }
- }
-
-
-
- msgDiag.mediumDebug("Imposto risposta nel context...");
- if(errorOccurs_setResponse==false){
- this.msgContext.setMessageResponse(responseMessage);
- }
- }
-
-
-
-
- /* -------------- UTILITY -------------- */
-
- private void eliminaSIL(OpenSPCoopStateful openspcoopstate,
- MsgDiagnostico msgDiag, String idMessageRequest, String idMessageResponse,
- String servizioApplicativo) {
- // Elimino SIL destinatario a cui ho consegnato il messaggio
- msgDiag.mediumDebug("Eliminazione SIL destinatario del messaggio nella tabelle MSG_SERVIZI_APPLICATIVI...");
- if (openspcoopstate.getConnectionDB() != null) {
- try {
- // GestoreMessaggi gestoreEliminazioneDestinatario = new
- // GestoreMessaggi(openspcoopstate,
- // false,idMessageResponse,Costanti.INBOX,msgDiag);
- GestoreMessaggi gestoreEliminazioneDestinatario = new GestoreMessaggi(openspcoopstate, false, idMessageResponse, Costanti.INBOX,msgDiag,this.msgContext.pddContext);
- gestoreEliminazioneDestinatario.eliminaDestinatarioMessaggio(servizioApplicativo, idMessageRequest);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e, "gestoreEliminazioneDestinatario.eliminaDestinatarioMessaggio("+servizioApplicativo+")");
- }
- } else {
- msgDiag.logErroreGenerico("Connessione non disponibile", "gestoreEliminazioneDestinatario.eliminaDestinatarioMessaggio("+servizioApplicativo+")");
- }
- }
- }