RicezioneBuste.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.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.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.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.TipoPdD;
- import org.openspcoop2.core.eccezione.details.DettaglioEccezione;
- import org.openspcoop2.core.eccezione.details.utils.XMLUtils;
- 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.IdentificativiErogazione;
- import org.openspcoop2.core.registry.AccordoServizioParteComune;
- import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
- import org.openspcoop2.core.registry.Resource;
- import org.openspcoop2.core.registry.Soggetto;
- import org.openspcoop2.core.registry.constants.CostantiRegistroServizi;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziAzioneNotFound;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
- import org.openspcoop2.core.registry.driver.IDAccordoFactory;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.config.ServiceBindingConfiguration;
- import org.openspcoop2.message.constants.MessageRole;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.message.exception.ParseException;
- 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.IntegrationContext;
- import org.openspcoop2.pdd.core.MTOMProcessor;
- 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.pa.DatiInvocazionePortaApplicativa;
- import org.openspcoop2.pdd.core.autorizzazione.pa.EsitoAutorizzazionePortaApplicativa;
- 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.dynamic.DynamicMapBuilderUtils;
- 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.HeaderIntegrazioneBusta;
- import org.openspcoop2.pdd.core.integrazione.IGestoreIntegrazionePA;
- import org.openspcoop2.pdd.core.integrazione.IGestoreIntegrazionePASoap;
- import org.openspcoop2.pdd.core.integrazione.InRequestPAMessage;
- import org.openspcoop2.pdd.core.integrazione.OutResponsePAMessage;
- import org.openspcoop2.pdd.core.integrazione.UtilitiesIntegrazione;
- 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.OpenSPCoopStateException;
- 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.TokenUtilities;
- 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.pa.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.GenericLibException;
- import org.openspcoop2.pdd.mdb.ImbustamentoRisposte;
- import org.openspcoop2.pdd.mdb.InoltroBuste;
- import org.openspcoop2.pdd.mdb.InoltroBusteMessage;
- import org.openspcoop2.pdd.mdb.InoltroRisposte;
- import org.openspcoop2.pdd.mdb.Sbustamento;
- import org.openspcoop2.pdd.mdb.SbustamentoMessage;
- import org.openspcoop2.pdd.services.DirectVMProtocolInfo;
- 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.RicezioneBusteExternalErrorGenerator;
- import org.openspcoop2.pdd.services.service.RicezioneBusteServiceUtils;
- 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.IdentificazionePortaApplicativa;
- 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.ProfiloDiCollaborazione;
- import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
- import org.openspcoop2.protocol.engine.mapping.IdentificazioneDinamicaException;
- import org.openspcoop2.protocol.engine.mapping.InformazioniServizioURLMapping;
- import org.openspcoop2.protocol.engine.validator.Validatore;
- import org.openspcoop2.protocol.registry.RegistroServiziManager;
- import org.openspcoop2.protocol.sdk.Busta;
- import org.openspcoop2.protocol.sdk.BustaRawContent;
- import org.openspcoop2.protocol.sdk.Context;
- import org.openspcoop2.protocol.sdk.Eccezione;
- 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.SecurityInfo;
- import org.openspcoop2.protocol.sdk.Servizio;
- import org.openspcoop2.protocol.sdk.Trasmissione;
- 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.CodiceErroreCooperazione;
- import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroreCooperazione;
- import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroriCooperazione;
- import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.FaseImbustamento;
- import org.openspcoop2.protocol.sdk.constants.FaseSbustamento;
- import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
- import org.openspcoop2.protocol.sdk.constants.InitialIdConversationType;
- import org.openspcoop2.protocol.sdk.constants.Inoltro;
- import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
- import org.openspcoop2.protocol.sdk.constants.LivelloRilevanza;
- import org.openspcoop2.protocol.sdk.constants.RuoloBusta;
- import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
- import org.openspcoop2.protocol.sdk.constants.StatoFunzionalitaProtocollo;
- import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
- import org.openspcoop2.protocol.sdk.dump.DumpException;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.protocol.sdk.state.StateMessage;
- import org.openspcoop2.protocol.sdk.state.StatelessMessage;
- import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
- import org.openspcoop2.protocol.sdk.tracciamento.EsitoElaborazioneMessaggioTracciato;
- import org.openspcoop2.protocol.sdk.tracciamento.TracciamentoException;
- import org.openspcoop2.protocol.sdk.validator.IValidatoreErrori;
- import org.openspcoop2.protocol.sdk.validator.IValidazioneSemantica;
- import org.openspcoop2.protocol.sdk.validator.ProprietaValidazione;
- import org.openspcoop2.protocol.sdk.validator.ProprietaValidazioneErrori;
- import org.openspcoop2.protocol.utils.ModIUtils;
- import org.openspcoop2.protocol.utils.ModIValidazioneSemanticaProfiloSicurezza;
- import org.openspcoop2.security.message.MessageSecurityContext;
- import org.openspcoop2.security.message.MessageSecurityContextParameters;
- import org.openspcoop2.security.message.constants.SecurityConstants;
- import org.openspcoop2.security.message.engine.MessageSecurityFactory;
- 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.Credential;
- 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;
- /**
- * Contiene la definizione del modulo 'RicezioneBuste', il quale e' un
- * modulo dell'infrastruttura OpenSPCoop.
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class RicezioneBuste {
- /** Variabile che indica il Nome del modulo dell'architettura di OpenSPCoop rappresentato da questa classe */
- public static final String ID_MODULO = "RicezioneBuste";
- 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;
- /** IGestoreIntegrazionePA: lista di gestori, ordinati per priorita' minore */
- public static String[] defaultGestoriIntegrazionePA = null;
- public static java.util.concurrent.ConcurrentHashMap<String, String[]> defaultPerProtocolloGestoreIntegrazionePA = null;
-
- /** IGestoreCredenziali: lista di gestori delle credenziali */
- private static String [] tipiGestoriCredenziali = null;
-
- /**
- * Inizializzatore del servizio RicezioneBuste
- *
- * @throws Exception
- */
- public static synchronized void initializeService(ConfigurazionePdDManager configReader,ClassNameProperties className,OpenSPCoop2Properties propertiesReader,Logger logCore) throws Exception{
- if(RicezioneBuste.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 IGestoreIntegrazionePA list
- String [] tipiIntegrazioneDefault = propertiesReader.getTipoIntegrazionePA();
- List<String> s = new ArrayList<>();
- for (int i = 0; i < tipiIntegrazioneDefault.length; i++) {
- try {
- IGestoreIntegrazionePA gestore = pluginLoader.newIntegrazionePortaApplicativa(tipiIntegrazioneDefault[i]);
- gestore.toString();
- s.add(tipiIntegrazioneDefault[i]);
- logCore .info("Inizializzazione gestore dati di integrazione per le erogazioni di tipo "
- + tipiIntegrazioneDefault[i] + " effettuata.");
- } catch (Exception e) {
- throw new Exception(e.getMessage(),e);
- }
- }
- if(s.size()>0){
- RicezioneBuste.defaultGestoriIntegrazionePA = s.toArray(new String[1]);
- }
-
- // Inizializzo IGestoreIntegrazionePA per protocollo
- RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA = new java.util.concurrent.ConcurrentHashMap<String, String[]>();
- Enumeration<String> enumProtocols = ProtocolFactoryManager.getInstance().getProtocolNames();
- while (enumProtocols.hasMoreElements()) {
- String protocol = (String) enumProtocols.nextElement();
- String [] tipiIntegrazionePA = propertiesReader.getTipoIntegrazionePA(protocol);
- if(tipiIntegrazionePA!=null && tipiIntegrazionePA.length>0){
- List<String> tipiIntegrazionePerProtocollo = new ArrayList<>();
- for (int i = 0; i < tipiIntegrazionePA.length; i++) {
- try {
- IGestoreIntegrazionePA gestore = pluginLoader.newIntegrazionePortaApplicativa(tipiIntegrazionePA[i]);
- gestore.toString();
- tipiIntegrazionePerProtocollo.add(tipiIntegrazionePA[i]);
- logCore .info("Inizializzazione gestore dati di integrazione (protocollo: "+protocol+") per le erogazioni di tipo "
- + tipiIntegrazionePA[i] + " effettuata.");
- } catch (Exception e) {
- throw new Exception(e.getMessage(),e);
- }
- }
- if(tipiIntegrazionePerProtocollo.size()>0){
- RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.put(protocol, tipiIntegrazionePerProtocollo.toArray(new String[1]));
- }
- }
- }
-
- // Inizializzo GestoriCredenziali PA
- RicezioneBuste.tipiGestoriCredenziali = propertiesReader.getTipoGestoreCredenzialiPA();
- if(RicezioneBuste.tipiGestoriCredenziali!=null){
- for (int i = 0; i < RicezioneBuste.tipiGestoriCredenziali.length; i++) {
- classType = className.getGestoreCredenziali(RicezioneBuste.tipiGestoriCredenziali[i]);
- try {
- IGestoreCredenziali gestore = (IGestoreCredenziali)loader.newInstance(classType);
- gestore.toString();
- logCore .info("Inizializzazione gestore credenziali di tipo "
- + RicezioneBuste.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 ["
- + RicezioneBuste.tipiGestoriCredenziali[i]+ "]: " + e.getMessage());
- }
- }
- }
- RicezioneBuste.initializeService = true;
- }
- /** Generatore Errori */
- private RicezioneBusteExternalErrorGenerator generatoreErrore;
-
- /** Contesto della richiesta */
- private RicezioneBusteContext msgContext;
-
- public RicezioneBuste(RicezioneBusteContext context,
- RicezioneBusteExternalErrorGenerator 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(RicezioneBuste.ID_MODULO);
- }
-
- // MsgDiagnostico
- MsgDiagnostico msgDiag = this.msgContext.getMsgDiagnostico();
-
- // Messaggio
- OpenSPCoop2Message requestMessage = this.msgContext.getMessageRequest();
- if(requestMessage==null){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore, msgDiag, new Exception("Request message is null"), "LetturaMessaggioRichiesta");
- }
-
-
-
-
-
- // ------------- 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_processamento(IntegrationFunctionError.GOVWAY_NOT_INITIALIZED, logCore, msgDiag, e, "ProtocolFactoryInstance");
- return;
- }
- InRequestContext inRequestContext = new InRequestContext(logCore,protocolFactory,null);
- // TipoPorta
- inRequestContext.setTipoPorta(TipoPdD.APPLICATIVA);
- 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_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore, msgDiag, e, "AutorizzazioneSecurityContainerInstance");
- return;
- }
- }
- }
- }
- connettore.setUrlProtocolContext(this.msgContext.getUrlProtocolContext());
- if(requestMessage!=null && ServiceBinding.SOAP.equals(requestMessage.getServiceBinding())){
- try{
- connettore.setSoapAction(requestMessage.castAsSoap().getSoapAction());
- }catch(Exception e){
- setSOAPFault_processamento(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_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore,msgDiag, e, e.getIdentitaHandler());
- return;
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR, logCore,msgDiag, e, "InvocazioneInRequestHandler");
- return;
- }
-
-
-
-
-
-
- // ------------- process -----------------------------
- HashMap<String, Object> internalObjects = new HashMap<>();
- try{
- process_engine(inRequestContext,internalObjects,params);
- } catch(TracciamentoException tracciamentoException){
- setSOAPFault_processamento(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, tracciamentoException, "TracciamentoNonRiuscito");
- return;
- } catch(DumpException e){
- setSOAPFault_processamento(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "DumpNonRiuscito");
- return;
- } catch(ProtocolException protocolException){
- setSOAPFault_processamento(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, protocolException, "ProtocolFactoryNonInstanziata");
- 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_processamento(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "FinalizeIntegrationContextRicezioneBuste");
- 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)) {
- URLProtocolContext urlProtocolContext = this.msgContext.getUrlProtocolContext();
- if(urlProtocolContext!=null && urlProtocolContext.getInterfaceName()!=null) {
- IDPortaApplicativa identificativoPortaApplicativa = new IDPortaApplicativa();
- identificativoPortaApplicativa.setNome(urlProtocolContext.getInterfaceName());
- PortaApplicativa portaApplicativa = configurazionePdDReader.getPortaApplicativaSafeMethod(identificativoPortaApplicativa, this.msgContext.getRequestInfo());
- if(portaApplicativa!=null) {
- DumpConfigurazione dumpConfig = configurazionePdDReader.getDumpConfigurazione(portaApplicativa);
- 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 dumpException){
- setSOAPFault_processamento(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, dumpException, "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 busta 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_processamento(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, e.getIdentitaHandler());
- return;
- }catch(Exception e){
- setSOAPFault_processamento(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_processamento(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, e, "FineGestioneRicezioneBuste");
- 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();
- ServiceBinding sb = requestMessage!=null ? requestMessage.getServiceBinding() : this.msgContext.getRequestInfo().getProtocolServiceBinding();
- ServicesUtils.setGovWayHeaderResponse(sb,
- msgRisposta, OpenSPCoop2Properties.getInstance(),
- propertiesTrasporto, logCore, false, outResponseContext.getPddContext(), this.msgContext.getRequestInfo());
- dumpApplicativo.dumpRispostaUscita(msgRisposta,
- inRequestContext.getConnettore().getUrlProtocolContext(),
- outResponseContext.getResponseHeaders());
- }
- }catch(DumpException dumpException){
- setSOAPFault_processamento(AbstractErrorGenerator.getIntegrationInternalError(context), logCore,msgDiag, dumpException, "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.getDumpConfigurazionePortaApplicativa();
- }
-
- 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) {
- IDPortaApplicativa identificativoPortaApplicativa = new IDPortaApplicativa();
- identificativoPortaApplicativa.setNome(urlProtocolContext.getInterfaceName());
- PortaApplicativa portaApplicativa = null;
- try {
- portaApplicativa = configurazionePdDReader.getPortaApplicativaSafeMethod(identificativoPortaApplicativa, this.msgContext.getRequestInfo());
- }catch(Exception e) {
- // ignore
- }
- if(portaApplicativa!=null) {
- // Aggiorno tutti
- soggettoErogatore = new IDSoggetto(portaApplicativa.getTipoSoggettoProprietario(), portaApplicativa.getNomeSoggettoProprietario());
- if(portaApplicativa.getServizio()!=null) {
- idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(portaApplicativa.getServizio().getTipo(),portaApplicativa.getServizio().getNome(),
- soggettoErogatore, portaApplicativa.getServizio().getVersione());
- }
- dominio = new IDSoggetto(portaApplicativa.getTipoSoggettoProprietario(), portaApplicativa.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(protocolContext!=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;
- }
-
- // processamento quando non sono disponibili le risorse (es. MsgDiagnostico)
- private void setSOAPFault_processamento(IntegrationFunctionError integrationFunctionError, ErroreIntegrazione erroreIntegrazione){
- setSOAPFault_engine(integrationFunctionError, null, null, null, null, erroreIntegrazione, null, false);
- }
- private void setSOAPFault_processamento(IntegrationFunctionError integrationFunctionError, ErroreIntegrazione erroreIntegrazione, Exception e){
- setSOAPFault_engine(integrationFunctionError, null, null, e, null, erroreIntegrazione, null, false);
- }
- // processamento
- private void setSOAPFault_processamento(IntegrationFunctionError integrationFunctionError, Logger logCore, MsgDiagnostico msgDiag, Exception e, String posizione){
- setSOAPFault_engine(integrationFunctionError, logCore, msgDiag, e, null, null, posizione, false);
- }
- private void setSOAPFault_processamento(IntegrationFunctionError integrationFunctionError, Logger logCore, MsgDiagnostico msgDiag, ErroreIntegrazione erroreIntegrazione, Exception e, String posizione){
- setSOAPFault_engine(integrationFunctionError, logCore, msgDiag, e, null, erroreIntegrazione, posizione, false);
- }
- // intestazione
- private void setSOAPFault_intestazione(IntegrationFunctionError integrationFunctionError, ErroreCooperazione erroreCooperazione){
- setSOAPFault_engine(integrationFunctionError, null, null, null, erroreCooperazione, null, null, true);
- }
- @SuppressWarnings("unused")
- private void setSOAPFault_intestazione(IntegrationFunctionError integrationFunctionError, ErroreIntegrazione erroreIntegrazione){
- setSOAPFault_engine(integrationFunctionError, null, null, null, null, erroreIntegrazione, null, true);
- }
-
- private void setSOAPFault_engine(IntegrationFunctionError integrationFunctionError, Logger logCore, MsgDiagnostico msgDiag, Exception e,
- ErroreCooperazione erroreCooperazione, ErroreIntegrazione erroreIntegrazione, String posizioneErrore,
- boolean validazione) {
-
- HandlerException he = null;
- if(e!=null && (e instanceof HandlerException)){
- he = (HandlerException) e;
- }
-
- Context context = this.msgContext.getPddContext();
-
- if(msgDiag!=null){
- if(he!=null){
- if(he.isEmettiDiagnostico()){
- msgDiag.logErroreGenerico(e, posizioneErrore);
- }
- }else{
- String descrizioneErrore = null;
- if(erroreCooperazione != null){
- try{
- descrizioneErrore = erroreCooperazione.getDescrizione(this.generatoreErrore.getProtocolFactory());
- }catch(Throwable t){
- // ignore
- }
- }
- if(descrizioneErrore==null && erroreIntegrazione!=null) {
- try{
- descrizioneErrore = erroreIntegrazione.getDescrizione(this.generatoreErrore.getProtocolFactory());
- }catch(Throwable t){
- // ignore
- }
- }
- if(descrizioneErrore==null) {
- descrizioneErrore = posizioneErrore;
- }
- msgDiag.logErroreGenerico(descrizioneErrore, posizioneErrore); // nota: non emette informazioni sul core
- if(logCore!=null){
- if(e!=null) {
- logError(logCore, descrizioneErrore+": "+e.getMessage(),e);
- }
- else {
- logError(logCore, descrizioneErrore);
- }
- }
- }
- }
- else if(logCore!=null){
- if(e!=null) {
- logError(logCore, posizioneErrore+": "+e.getMessage(),e);
- }
- else {
- logError(logCore, posizioneErrore);
- }
- }
- if (this.msgContext.isGestioneRisposta()) {
- OpenSPCoop2Message messageFault = null;
- if(validazione){
- if(erroreCooperazione != null){
- String descrizioneErrore = null;
- try{
- descrizioneErrore = erroreCooperazione.getDescrizione(this.generatoreErrore.getProtocolFactory());
- messageFault = this.generatoreErrore.buildErroreIntestazione(context, integrationFunctionError,
- erroreCooperazione.getCodiceErrore(), descrizioneErrore);
- }catch(Exception eP){
- messageFault = this.generatoreErrore.buildFault(eP, context);
- }
- }else{
- messageFault = this.generatoreErrore.buildErroreIntestazione(context,integrationFunctionError,
- erroreIntegrazione);
- }
- }else{
- if(erroreIntegrazione!=null){
- messageFault = this.generatoreErrore.buildErroreProcessamento(context,integrationFunctionError,
- erroreIntegrazione,e);
- }
- else if(e!=null){
- IntegrationFunctionError ifError = integrationFunctionError;
- ErroreIntegrazione erroreIntegrazioneGenerato = null;
- if(he!=null){
- erroreIntegrazioneGenerato = he.convertToErroreIntegrazione();
- if(he.getIntegrationFunctionError()!=null) {
- ifError = he.getIntegrationFunctionError();
- }
- }
- if(erroreIntegrazioneGenerato==null) {
- erroreIntegrazioneGenerato = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(posizioneErrore);
- }
- messageFault = this.generatoreErrore.buildErroreProcessamento(context,ifError,
- erroreIntegrazioneGenerato,e);
- if(he!=null){
- he.customized(messageFault);
- }
- }else{
- messageFault = this.generatoreErrore.buildErroreProcessamento(context,integrationFunctionError,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(posizioneErrore));
- }
- }
- // Lo imposto sempre, perche' puo' servire nell'handler
- this.msgContext.setMessageResponse(messageFault);
- }
- }
-
-
- private boolean checkInizializzazione(Logger logCore, ConfigurazionePdDManager configurazionePdDReader, RegistroServiziManager registroServiziReader) {
- if( !OpenSPCoop2Startup.initialize){
- String msgErrore = "Inizializzazione di GovWay non correttamente effettuata";
- logError(logCore, "["+RicezioneBuste.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);}
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_NOT_INITIALIZED,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErrore,CodiceErroreIntegrazione.CODICE_501_PDD_NON_INIZIALIZZATA));
- return false;
- }
- if( !TimerMonitoraggioRisorseThread.isRisorseDisponibili()){
- String msgErrore = "Risorse di sistema non disponibili: "+ TimerMonitoraggioRisorseThread.getRisorsaNonDisponibile().getMessage();
- logError(logCore, "["+RicezioneBuste.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);}
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErrore,CodiceErroreIntegrazione.CODICE_532_RISORSE_NON_DISPONIBILI));
- return false;
- }
- if( !TimerThresholdThread.freeSpace){
- String msgErrore = "Non sono disponibili abbastanza risorse per la gestione della richiesta";
- logError(logCore, "["+RicezioneBuste.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);}
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErrore,CodiceErroreIntegrazione.CODICE_533_RISORSE_DISPONIBILI_LIVELLO_CRITICO));
- return false;
- }
- if( !Tracciamento.tracciamentoDisponibile){
- String msgErrore = "Tracciatura non disponibile: "+ Tracciamento.motivoMalfunzionamentoTracciamento.getMessage();
- logError(logCore, "["+RicezioneBuste.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);}
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErrore,CodiceErroreIntegrazione.CODICE_545_TRACCIATURA_NON_FUNZIONANTE));
- return false;
- }
- if( !MsgDiagnostico.gestoreDiagnosticaDisponibile){
- String msgErrore = "Sistema di diagnostica non disponibile: "+ MsgDiagnostico.motivoMalfunzionamentoDiagnostici.getMessage();
- logError(logCore, "["+RicezioneBuste.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);}
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErrore,CodiceErroreIntegrazione.CODICE_546_DIAGNOSTICA_NON_FUNZIONANTE));
- return false;
- }
- if( !Dump.isSistemaDumpDisponibile()){
- String msgErrore = "Sistema di dump dei contenuti applicativi non disponibile: "+ Dump.getMotivoMalfunzionamentoDump().getMessage();
- logError(logCore, "["+RicezioneBuste.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);}
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErrore,CodiceErroreIntegrazione.CODICE_547_DUMP_CONTENUTI_APPLICATIVI_NON_FUNZIONANTE));
- return false;
- }
- // Check Configurazione (XML)
- try{
- configurazionePdDReader.verificaConsistenzaConfigurazione();
- }catch(Exception e){
- String msgErrore = "Riscontrato errore durante la verifica della consistenza della configurazione";
- logError(logCore, "["+RicezioneBuste.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);}
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErrore,CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e);
- return false;
- }
- // Check RegistroServizi (XML)
- try{
- registroServiziReader.verificaConsistenzaRegistroServizi();
- }catch(Exception e){
- String msgErrore = "Riscontrato errore durante la verifica del registro dei servizi";
- logError(logCore, "["+ RicezioneBuste.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);}
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msgErrore,CodiceErroreIntegrazione.CODICE_534_REGISTRO_DEI_SERVIZI_NON_DISPONIBILE),e);
- 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());
-
- // Loader
- Loader loader = Loader.getInstance();
- PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
-
- // RequestInfo
- RequestInfo requestInfo = this.msgContext.getRequestInfo();
-
-
- /* ------------ Controllo inizializzazione OpenSPCoop ------------------ */
- ConfigurazionePdDManager configurazionePdDReader = ConfigurazionePdDManager.getInstance();
- RegistroServiziManager registroServiziReader = RegistroServiziManager.getInstance();
- if(!checkInizializzazione(logCore, configurazionePdDReader, registroServiziReader)) {
- return;
- }
- /* ------------- Inizializzazione Risorse ------------------- */
- // Credenziali utilizzate nella richiesta
- Credenziali credenziali = this.msgContext.getCredenziali();
- // OpenSPCoop Properties
- OpenSPCoop2Properties propertiesReader = OpenSPCoop2Properties.getInstance();
-
- // Classi registrate
- ClassNameProperties className = ClassNameProperties.getInstance();
- if(requestInfo==null) {
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,null,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento("RequesInfo is null"),null,
- "InizializzazioneRisorseServizioRicezioneBuste");
- return;
- }
-
- // IdentificativoPdD
- IDSoggetto identitaPdD = requestInfo.getIdentitaPdD();
-
- // ConnectorInMessage
- 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;
- }
- }
- }
-
- // ProtocolFactory
- IProtocolFactory<?> protocolFactory = requestInfo.getProtocolFactory();
- PdDContext pddContext = inRequestContext.getPddContext();
- ITraduttore traduttore = protocolFactory.createTraduttore();
-
- // Logger dei messaggi diagnostici
- String nomePorta = null;
- if(requestInfo.getProtocolContext().getInterfaceName()!=null){
- nomePorta = requestInfo.getProtocolContext().getInterfaceName();
- }
- else{
- nomePorta = inRequestContext.getConnettore().getUrlProtocolContext().getFunctionParameters() + "_urlInvocazione("+ inRequestContext.getConnettore().getUrlProtocolContext().getUrlInvocazione_formBased() + ")";
- }
- MsgDiagnostico msgDiag = MsgDiagnostico.newInstance(TipoPdD.APPLICATIVA,identitaPdD,this.msgContext.getIdModulo(),nomePorta,requestInfo,configurazionePdDReader);
- if(msgDiag==null) {
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_NOT_INITIALIZED,logCore,null,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento("MsgDiagnostico is null",CodiceErroreIntegrazione.CODICE_501_PDD_NON_INIZIALIZZATA),null,
- "InizializzazioneRisorseServizioRicezioneBuste");
- return;
- }
- this.msgContext.setMsgDiagnostico(msgDiag); // aggiorno msg diagnostico
- msgDiag.setPddContext(inRequestContext.getPddContext(), protocolFactory);
- msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_BUSTE);
-
- // Parametri della porta applicativa invocata
- URLProtocolContext urlProtocolContext = this.msgContext.getUrlProtocolContext();
-
- // setCredenziali
- setCredenziali(credenziali, msgDiag);
-
- // inizializzazione risorse statiche
- try{
- if(RicezioneBuste.initializeService==false){
- msgDiag.mediumDebug("Inizializzazione risorse statiche...");
- RicezioneBuste.initializeService(configurazionePdDReader, className, propertiesReader,logCore);
- }
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_NOT_INITIALIZED,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(e,CodiceErroreIntegrazione.CODICE_501_PDD_NON_INIZIALIZZATA),e,
- "InizializzazioneRisorseServizioRicezioneBuste");
- return;
- }
-
- // Imposto header di risposta
- Map<String, List<String>> headerRisposta = new HashMap<>();
- UtilitiesIntegrazione utilitiesHttpRisposta = UtilitiesIntegrazione.getInstancePAResponse(logCore);
- try{
- utilitiesHttpRisposta.setInfoProductTransportProperties(headerRisposta);
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(e),e,
- "InizializzazioneHeaderRisposta");
- return;
- }
- this.msgContext.setResponseHeaders(headerRisposta);
- // OPENSPCOOPSTATE
- OpenSPCoopState openspcoopstate = null;
- try{ // finally in fondo, vedi #try-finally-openspcoopstate#
- // Messaggio di libreria
- SbustamentoMessage sbustamentoMSG = new SbustamentoMessage();
- InoltroBusteMessage inoltroMSG = new InoltroBusteMessage();
- // Context di risposta
- this.msgContext.setProtocol(new ProtocolContext());
- this.msgContext.getProtocol().setDominio(this.msgContext.getIdentitaPdD());
- this.msgContext.setIntegrazione(new IntegrationContext());
-
- // DBManager
- msgDiag.mediumDebug("Richiesta connessione al database...");
- try{
- openspcoopstate = new OpenSPCoopStateful();
- openspcoopstate.setUseConnection(false); // gestione stateless per default
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(),idTransazione);
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION),e,
- "initDatabaseResource");
- return;
- }
-
- // Refresh reader
- registroServiziReader = registroServiziReader.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
- configurazionePdDReader = configurazionePdDReader.refreshState(registroServiziReader);
- msgDiag.updateState(configurazionePdDReader);
- // Dati precedentemente raccolti
- String servizioApplicativoFruitore = null;
- String correlazioneApplicativa = null;
- if(this.msgContext.isTracciamentoAbilitato()==false){
- // e' gia stata effettuata un'analisi precedentemente
- servizioApplicativoFruitore = this.msgContext.getIdentitaServizioApplicativoFruitore();
- this.msgContext.getIntegrazione().setServizioApplicativoFruitore(servizioApplicativoFruitore);
- correlazioneApplicativa = this.msgContext.getIdCorrelazioneApplicativa();
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, servizioApplicativoFruitore);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, correlazioneApplicativa);
- this.generatoreErrore.updateInformazioniCooperazione(servizioApplicativoFruitore);
- }
- // Transaction
- Transaction transaction = null;
- try{
- transaction = TransactionContext.getTransaction(idTransazione);
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_500_ERRORE_INTERNO),e,
- "getTransaction");
- return;
- }
-
-
-
-
- // Messaggio di generazione Errore Protocollo
- RicezioneBusteParametriGenerazioneBustaErrore parametriGenerazioneBustaErrore = new RicezioneBusteParametriGenerazioneBustaErrore();
- parametriGenerazioneBustaErrore.setOpenspcoop(openspcoopstate);
- parametriGenerazioneBustaErrore.setIdentitaPdD(identitaPdD);
- parametriGenerazioneBustaErrore.setMsgDiag(msgDiag);
- parametriGenerazioneBustaErrore.setPropertiesReader(propertiesReader);
- parametriGenerazioneBustaErrore.setLogCore(logCore);
- parametriGenerazioneBustaErrore.setCorrelazioneApplicativa(correlazioneApplicativa);
- parametriGenerazioneBustaErrore.setServizioApplicativoFruitore(servizioApplicativoFruitore);
- parametriGenerazioneBustaErrore.setImplementazionePdDMittente(CostantiRegistroServizi.IMPLEMENTAZIONE_STANDARD);
- parametriGenerazioneBustaErrore.setImplementazionePdDDestinatario(CostantiRegistroServizi.IMPLEMENTAZIONE_STANDARD);
-
-
- // Messaggio di invio Errore Protocollo
- RicezioneBusteParametriInvioBustaErrore parametriInvioBustaErrore = new RicezioneBusteParametriInvioBustaErrore();
- parametriInvioBustaErrore.setOpenspcoop(openspcoopstate);
- parametriInvioBustaErrore.setIdentitaPdD(identitaPdD);
- parametriInvioBustaErrore.setMsgDiag(msgDiag);
- parametriInvioBustaErrore.setPropertiesReader(propertiesReader);
- parametriInvioBustaErrore.setLogCore(logCore);
- parametriInvioBustaErrore.setCorrelazioneApplicativa(correlazioneApplicativa);
- parametriInvioBustaErrore.setServizioApplicativoFruitore(servizioApplicativoFruitore);
- parametriInvioBustaErrore.setImplementazionePdDMittente(CostantiRegistroServizi.IMPLEMENTAZIONE_STANDARD);
- parametriInvioBustaErrore.setImplementazionePdDDestinatario(CostantiRegistroServizi.IMPLEMENTAZIONE_STANDARD);
-
- parametriInvioBustaErrore.setNewConnectionForResponse(false);
- parametriInvioBustaErrore.setUtilizzoIndirizzoTelematico(false);
- parametriInvioBustaErrore.setFunctionAsRouter(false);
- parametriInvioBustaErrore.setOnewayVersione11(false);
- parametriInvioBustaErrore.setPddContext(inRequestContext.getPddContext());
-
- // RicezioneBusteUtils
- RicezioneBusteUtils ricezioneBusteUtils = new RicezioneBusteUtils();
-
-
-
-
-
-
-
-
-
-
-
-
-
- /* ------------ Identificazione IDServizio ------------- */
-
- msgDiag.mediumDebug("Identificazione IDServizio ...");
-
- IDServizio idServizio = requestInfo.getIdServizio();
- PortaApplicativa pa = null;
- if(idServizio==null){
- // avviene solamente se abbiamo invocazioni speciali con contextURL
- // provo ad individuarlo con il protocollo
- String idBusta = null;
- String profiloBusta = null;
- try{
- Busta busta = protocolFactory.createValidazioneSintattica(openspcoopstate.getStatoRichiesta()).getBusta_senzaControlli(requestMessage);
- if(busta==null){
- throw new Exception("Protocollo non individuato nel messaggio");
- }
- idBusta = busta.getID();
- profiloBusta = busta.getProfiloDiCollaborazioneValue();
-
- if(busta.getTipoDestinatario()==null){
- throw new Exception("TipoDestinatario non individuato nel messaggio");
- }
- if(busta.getDestinatario()==null){
- throw new Exception("Destinatario non individuato nel messaggio");
- }
- if(busta.getTipoServizio()==null){
- throw new Exception("TipoServizio non individuato nel messaggio");
- }
- if(busta.getServizio()==null){
- throw new Exception("Servizio non individuato nel messaggio");
- }
- if(busta.getVersioneServizio()==null){
- throw new Exception("VersioneServizio non individuato nel messaggio");
- }
- idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(busta.getTipoServizio(), busta.getServizio(),
- busta.getTipoDestinatario(), busta.getDestinatario(),
- busta.getVersioneServizio());
- idServizio.getSoggettoErogatore().setCodicePorta(registroServiziReader.getDominio(idServizio.getSoggettoErogatore(), null, protocolFactory, requestInfo));
- idServizio.setAzione(busta.getAzione());
- requestInfo.setIdServizio(idServizio);
-
- List<PortaApplicativa> listPa = configurazionePdDReader.getPorteApplicative(idServizio, false);
- // if(listPa.size()<=0){
- // throw new Exception("Non esiste alcuna porta applicativa indirizzabile tramite il servizio ["+idServizio+"]");
- // }
- // NOTA: la pa potra' essere null nei casi di profili asincroni
- if(listPa.size()>0){
- if(listPa.size()>1)
- throw new Exception("Esiste più di una porta applicativa indirizzabile tramite il servizio ["+idServizio+"]");
- pa = listPa.get(0);
-
- IDPortaApplicativa idPA = new IDPortaApplicativa();
- idPA.setNome(pa.getNome());
- idPA.setIdentificativiErogazione(new IdentificativiErogazione());
- idPA.getIdentificativiErogazione().setIdServizio(idServizio);
- RicezioneBusteServiceUtils.updatePortaApplicativaRequestInfo(requestInfo, logCore,
- requestMessage,
- this.generatoreErrore,
- ServicesUtils.getServiceIdentificationReader(logCore, requestInfo, registroServiziReader, configurazionePdDReader), msgDiag,
- urlProtocolContext, idPA,
- pddContext);
- //requestInfo.getProtocolContext().setInterfaceName(pa.getNome());
- }
-
- }catch(Exception e){
-
- logDebug(logCore, e.getMessage(),e); // lascio come debug puo' essere utile
-
- // boolean checkAsSecondaFaseAsincrono = false;
- // try{
- // if(idServizio!=null){
- // IProtocolConfiguration config = protocolFactory.createProtocolConfiguration();
- // if(config.isSupportato(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO) ||
- // config.isSupportato(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO) ) {
- // Busta busta = protocolFactory.createValidazioneSintattica().getBusta_senzaControlli(requestMessage);
- // if(busta!=null && busta.getProfiloDiCollaborazione()!=null) {
- // if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(busta.getProfiloDiCollaborazione()) ||
- // org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(busta.getProfiloDiCollaborazione())
- // ) {
- // if(busta.getRiferimentoMessaggio()!=null) {
- // checkAsSecondaFaseAsincrono = true;
- // }
- // }
- // }
- // }
- // }
- // }catch(Exception eAsincronoCheck){
- // logError(logCore, "Errore durante il controllo della presenza di un profilo asincrono: "+eAsincronoCheck.getMessage(),eAsincronoCheck);
- // }
- //
- // if(checkAsSecondaFaseAsincrono==false) {
-
- ServiceBindingConfiguration bindingConfig = requestInfo.getBindingConfig();
- if(bindingConfig.existsContextUrlMapping()==false){
- IntegrationFunctionError integrationFunctionError = null;
- if(idServizio!=null){
- msgDiag.addKeywords(idServizio);
- if(idServizio.getAzione()==null){
- msgDiag.addKeyword(CostantiPdD.KEY_AZIONE_BUSTA_RICHIESTA, "-");
- }
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RICHIESTA, idBusta!=null ? idBusta : "-");
- msgDiag.addKeyword(CostantiPdD.KEY_PROFILO_COLLABORAZIONE, profiloBusta!=null ? profiloBusta : "-");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente.identificazionePerServizio");
- integrationFunctionError = IntegrationFunctionError.NOT_FOUND;
- }
- else{
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
- integrationFunctionError = IntegrationFunctionError.API_IN_UNKNOWN;
- }
-
- // passo volutamente null come msgDiag poichè ho generato prima il diagnostico
- setSOAPFault_processamento(integrationFunctionError,logCore,null,
- ErroriIntegrazione.ERRORE_450_PA_INESISTENTE.getErroreIntegrazione(),e,
- "IdentificazioneIDServizio");
- openspcoopstate.releaseResource();
- return;
- }
- }
- }
- else{
- // L'interface name DEVE essere presente in questo caso
- try{
- IDPortaApplicativa idPA = new IDPortaApplicativa();
- idPA.setNome(requestInfo.getProtocolContext().getInterfaceName());
- pa = configurazionePdDReader.getPortaApplicativaSafeMethod(idPA, requestInfo);
- // NOTA: la pa potra' essere null nei casi di profili asincroni
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "getPA");
- openspcoopstate.releaseResource();
- return;
- }
- }
- if(pa!=null){
- msgDiag.updatePorta(pa.getNome(), requestInfo);
- }
-
-
-
-
-
-
-
- /* ------------ Identificazione Router Function ------------- */
-
- // PdD Function: router o normale PdD
- boolean functionAsRouter = false;
- boolean soggettoVirtuale = false;
- msgDiag.mediumDebug("Esamina modalita' di ricezione (PdD/Router/SoggettoVirtuale)...");
- boolean existsSoggetto = false;
- try{
- if(idServizio!=null && idServizio.getSoggettoErogatore()!=null) {
- existsSoggetto = configurazionePdDReader.existsSoggetto(idServizio.getSoggettoErogatore(), requestInfo);
- }
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "existsSoggetto("+idServizio.getSoggettoErogatore().toString()+")");
- openspcoopstate.releaseResource();
- return;
- }
- if(existsSoggetto==false){
- // La PdD non gestisce il soggetto destinatario della busta.
- // Controllo adesso che sia abilitata la funzione di Router per la PdD, altrimenti nel successivo
- // modulo verra' generato un errore di soggetto non gestito.
- msgDiag.mediumDebug("Raccolta identita router...");
- boolean routerFunctionActive = false;
- try{
- routerFunctionActive = configurazionePdDReader.routerFunctionActive();
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_514_ROUTING_CONFIGURATION_ERROR),e,
- "ErroreCheckFunzionalitaRouterAttiva");
- openspcoopstate.releaseResource();
- return;
- }
- if(routerFunctionActive){
- functionAsRouter = true;
- try{
- identitaPdD = configurazionePdDReader.getRouterIdentity(protocolFactory, requestInfo);
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_514_ROUTING_CONFIGURATION_ERROR),e,
- "ErroreRiconoscimentoIdentitaRouter");
- openspcoopstate.releaseResource();
- return;
- }
- }
- // else: assume identita di default.
- }else{
- // identita assume quella dell'erogatore
- msgDiag.mediumDebug("Raccolta identita porta di dominio...");
- String dominio = null;
- try{
- dominio = configurazionePdDReader.getIdentificativoPorta(idServizio.getSoggettoErogatore(),protocolFactory, requestInfo);
- if(dominio==null){
- throw new Exception("Dominio is null");
- }
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "ErroreRiconoscimentoIdentitaPdD");
- openspcoopstate.releaseResource();
- return;
- }
- identitaPdD = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),
- idServizio.getSoggettoErogatore().getNome(),dominio);
- }
- if(functionAsRouter){
- this.msgContext.setTipoPorta(TipoPdD.ROUTER);
- }
-
- // Context
- this.msgContext.setIdentitaPdD(identitaPdD);
- // GeneratoreErrore
- this.generatoreErrore.updateDominio(identitaPdD);
- // Raccolta dati Busta Ricevuta
- parametriGenerazioneBustaErrore.setIdentitaPdD(identitaPdD);
- parametriInvioBustaErrore.setIdentitaPdD(identitaPdD);
- parametriInvioBustaErrore.setFunctionAsRouter(functionAsRouter);
- // requestInfo
- requestInfo.setIdentitaPdD(identitaPdD);
- // altri
- msgDiag.setDominio(identitaPdD); // imposto anche il dominio nel msgDiag
- parametriGenerazioneBustaErrore.setMsgDiag(msgDiag);
- parametriInvioBustaErrore.setMsgDiag(msgDiag);
-
-
-
-
-
-
-
-
-
-
-
- /* --------------- Header Integrazione (viene letto solo se tracciamento e' abilitato altrimenti significa che il punto di ingresso ha gia gestito la lettura) --------------- */
- String[] tipiIntegrazionePA = null;
- msgDiag.mediumDebug("Header integrazione...");
- if(propertiesReader.processHeaderIntegrazionePARequest(functionAsRouter)){
- if(functionAsRouter ){
- msgDiag.highDebug("Header integrazione (Default gestori integrazione Router)");
- if(RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.containsKey(protocolFactory.getProtocol()))
- tipiIntegrazionePA = RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.get(protocolFactory.getProtocol());
- else
- tipiIntegrazionePA = RicezioneBuste.defaultGestoriIntegrazionePA;
- }else{
- msgDiag.highDebug("Header integrazione (Gestori integrazione...)");
- if(pa!=null && this.msgContext.isTracciamentoAbilitato()){
- msgDiag.mediumDebug("Lettura header di integrazione...");
- try {
- tipiIntegrazionePA = configurazionePdDReader.getTipiIntegrazione(pa);
- } catch (Exception e) {
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "configurazionePdDReader.getTipiIntegrazione(pa)");
- openspcoopstate.releaseResource();
- return;
- }
- }
- msgDiag.highDebug("Header integrazione (Gestori integrazione terminato)");
- if (tipiIntegrazionePA == null){
- if(RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.containsKey(protocolFactory.getProtocol()))
- tipiIntegrazionePA = RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.get(protocolFactory.getProtocol());
- else
- tipiIntegrazionePA = RicezioneBuste.defaultGestoriIntegrazionePA;
- }
- }
- }
- HeaderIntegrazione headerIntegrazioneRichiesta = new HeaderIntegrazione(idTransazione);
- InRequestPAMessage inRequestPAMessage = null;
- if(tipiIntegrazionePA!=null){
- msgDiag.highDebug("Header integrazione (Impostazione ...)");
- inRequestPAMessage = new InRequestPAMessage();
- inRequestPAMessage.setMessage(requestMessage);
- inRequestPAMessage.setUrlProtocolContext(this.msgContext.getUrlProtocolContext());
- inRequestPAMessage.setPortaApplicativa(pa);
- inRequestPAMessage.setServizio(idServizio);
- for (int i = 0; i < tipiIntegrazionePA.length; i++) {
- try {
- IGestoreIntegrazionePA gestore = null;
- try {
- gestore = (IGestoreIntegrazionePA) pluginLoader.newIntegrazionePortaApplicativa(tipiIntegrazionePA[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 erogazioni di tipo ["+ tipiIntegrazionePA[i] + "]: " + e.getMessage());
- }
-
- gestore.readInRequestHeader(headerIntegrazioneRichiesta, inRequestPAMessage);
- }
- else {
- msgDiag.logErroreGenerico("Gestore ["
- + tipiIntegrazionePA[i]+ "], per la lettura dell'header di integrazione, non inizializzato",
- "gestoriIntegrazionePASoap.get("+tipiIntegrazionePA[i]+")");
- }
- } catch (Exception e) {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_HEADER_INTEGRAZIONE,tipiIntegrazionePA[i]);
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("headerIntegrazione.letturaFallita");
- }
- }
- if(headerIntegrazioneRichiesta!=null){
- msgDiag.highDebug("Header integrazione (set context...)");
- if(this.msgContext.getIdentitaServizioApplicativoFruitore()!=null)
- servizioApplicativoFruitore = this.msgContext.getIdentitaServizioApplicativoFruitore();
- else
- servizioApplicativoFruitore = headerIntegrazioneRichiesta.getServizioApplicativo();
- parametriGenerazioneBustaErrore.setServizioApplicativoFruitore(servizioApplicativoFruitore);
- parametriInvioBustaErrore.setServizioApplicativoFruitore(servizioApplicativoFruitore);
- this.generatoreErrore.updateInformazioniCooperazione(servizioApplicativoFruitore);
-
- if(this.msgContext.getIdCorrelazioneApplicativa()!=null)
- correlazioneApplicativa = this.msgContext.getIdCorrelazioneApplicativa();
- else
- correlazioneApplicativa = headerIntegrazioneRichiesta.getIdApplicativo();
- parametriGenerazioneBustaErrore.setCorrelazioneApplicativa(correlazioneApplicativa);
- parametriInvioBustaErrore.setCorrelazioneApplicativa(correlazioneApplicativa);
-
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, servizioApplicativoFruitore);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, correlazioneApplicativa);
-
- this.msgContext.getIntegrazione().setIdCorrelazioneApplicativa(correlazioneApplicativa);
- this.msgContext.getIntegrazione().setServizioApplicativoFruitore(servizioApplicativoFruitore);
-
- msgDiag.highDebug("Header integrazione (set context ok)");
- }
- }
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneBuste - Autorizzazione canale ...");
- ConfigurazioneCanaliNodo configurazioneCanaliNodo = null;
- try {
- if(!functionAsRouter) {
- configurazioneCanaliNodo = configurazionePdDReader.getConfigurazioneCanaliNodo();
- }
- } catch (Exception e) {
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "configurazionePdDReader.getConfigurazioneCanaliNodo()");
- openspcoopstate.releaseResource();
- return;
- }
- boolean canaleNonAutorizzato = false;
- try {
- if(configurazioneCanaliNodo!=null && configurazioneCanaliNodo.isEnabled()) {
-
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS, "");
- msgDiag.logPersonalizzato("autorizzazioneCanale.inCorso");
-
- String canaleApiInvocata = null;
- if(pa!=null) {
- String canalePorta = pa.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");
-
- if(canaleNonAutorizzato) {
- logError(logCore, e.getMessage(),e);
- setSOAPFault_intestazione(IntegrationFunctionError.AUTHORIZATION_DENY,
- ErroriCooperazione.AUTORIZZAZIONE_FALLITA.getErroreAutorizzazione(msgErrore, CodiceErroreCooperazione.SICUREZZA_AUTORIZZAZIONE_FALLITA));
- }
- else {
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,null,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "autorizzazioneCanale");
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneBuste - 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 pa 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;
- }
- PortaApplicativa paDefault = null;
- if(nomePortaS!=null) {
- IDPortaApplicativa idPAdefault = new IDPortaApplicativa();
- idPAdefault.setNome(nomePortaS);
- paDefault = configurazionePdDReader.getPortaApplicativaSafeMethod(idPAdefault, requestInfo);
- }
- if(paDefault!=null) {
- cors = configurazionePdDReader.getConfigurazioneCORS(paDefault);
- }
- else if(pa!=null) {
- cors = configurazionePdDReader.getConfigurazioneCORS(pa);
- }
- else {
- cors = configurazionePdDReader.getConfigurazioneCORS();
- }
- }
- else {
- cors = new CorsConfigurazione();
- cors.setStato(StatoFunzionalita.DISABILITATO);
- }
- } catch (Exception e) {
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "configurazionePdDReader.getConfigurazioneCORS(pa)");
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
-
-
- /* ------------ Identificazione Azione ------------- */
-
- try{
- if(pa!=null){
- if(requestInfo.getIdServizio()!=null && requestInfo.getIdServizio().getAzione()!=null){
- // gia identificata
- idServizio.setAzione(requestInfo.getIdServizio().getAzione());
- }
- else{
- idServizio.setAzione(configurazionePdDReader.getAzione(pa, urlProtocolContext, requestInfo, requestMessage, null,
- headerIntegrazioneRichiesta, this.msgContext.getIdModulo().endsWith(IntegrationManager.ID_MODULO), protocolFactory));
- }
- requestInfo.setIdServizio(idServizio);
- }
- }catch(Exception e){
-
- boolean throwFault = true;
- if(StatoFunzionalita.ABILITATO.equals(cors.getStato()) && this.msgContext.isGestioneRisposta()) {
- throwFault = false;
- }
- if(throwFault) {
-
- IntegrationFunctionError integrationFunctinError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- if(e instanceof IdentificazioneDinamicaException) {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.OPERAZIONE_NON_INDIVIDUATA, "true");
-
- integrationFunctinError = IntegrationFunctionError.OPERATION_UNDEFINED;
- }
-
- setSOAPFault_processamento(integrationFunctinError,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_403_AZIONE_NON_IDENTIFICATA.getErroreIntegrazione(),e,
- "identificazioneDinamicaAzionePortaApplicativa");
- openspcoopstate.releaseResource();
- return;
-
- }
- else {
- effettuareGestioneCORS = true;
- }
-
- }
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("RicezioneBuste - Identificazione PA specifica per azione del servizio ...");
-
- msgDiag.mediumDebug("Lettura azione associato alla PA invocata...");
- if(idServizio!=null && idServizio.getAzione()!=null && pa!=null) {
- // verifico se esiste una porta applicativa piu' specifica
- IdentificazionePortaApplicativa identificazione = new IdentificazionePortaApplicativa(logCore, protocolFactory,
- registroServiziReader, configurazionePdDReader, requestInfo,
- pa);
- String action = idServizio.getAzione();
- if(identificazione.find(action)) {
- IDPortaApplicativa idPA_action = identificazione.getIDPortaApplicativa(action);
- if(idPA_action!=null) {
-
- requestMessage.addContextProperty(CostantiPdD.NOME_PORTA_INVOCATA, pa.getNome()); // prima di aggiornare la porta applicativa
-
- pa = identificazione.getPortaApplicativa(action);
- msgDiag.addKeyword(CostantiPdD.KEY_PORTA_APPLICATIVA, pa.getNome());
- msgDiag.updatePorta(pa.getNome(), requestInfo);
- if(requestMessage.getTransportRequestContext()!=null) {
- requestMessage.getTransportRequestContext().setInterfaceName(pa.getNome());
- }
-
- pddContext.removeObject(org.openspcoop2.core.constants.Costanti.PROPRIETA_CONFIGURAZIONE);
- try {
- Map<String, String> configProperties = configurazionePdDReader.getProprietaConfigurazione(pa);
- 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 applicativa [" + pa.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(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"portaApplicativaNonEsistente");
-
- // passo volutamente null come msgDiag poichè ho generato prima il diagnostico
- IntegrationFunctionError integrationFunctionError = null;
- if(CodiceErroreIntegrazione.CODICE_401_PORTA_INESISTENTE.equals(identificazione.getErroreIntegrazione().getCodiceErrore())){
- integrationFunctionError = IntegrationFunctionError.API_IN_UNKNOWN;
- }else{
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- setSOAPFault_processamento(integrationFunctionError,logCore,null,
- identificazione.getErroreIntegrazione(),null,
- "IdentificazionePASpecificaPerAzione");
- openspcoopstate.releaseResource();
- return;
- }
- }
-
-
-
-
-
-
-
- // ------------- Informazioni Integrazione -----------------------------
-
- msgDiag.mediumDebug("Aggiungo informazioni di integrazione dinamica nel contesto ...");
-
- try {
- if(pa!=null) {
- configurazionePdDReader.setInformazioniIntegrazioneDinamiche(logCore, urlProtocolContext, pddContext, pa);
- }
- }
- catch (Exception e) {
- msgDiag.logErroreGenerico(e, "setInformazioniIntegrazioneDinamiche");
- setSOAPFault_processamento(IntegrationFunctionError.BAD_REQUEST,logCore,
- null, //msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "setInformazioniIntegrazioneDinamiche");
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
-
-
-
-
-
- // ------------- Dump richiesta-----------------------------
-
- msgDiag.mediumDebug("Dump richiesta ...");
-
- DumpConfigurazione dumpConfig = null;
- try {
- if(pa!=null) {
- dumpConfig = configurazionePdDReader.getDumpConfigurazione(pa);
- }
- else {
- dumpConfig = configurazionePdDReader.getDumpConfigurazionePortaApplicativa();
- }
- internalObjects.put(CostantiPdD.DUMP_CONFIG, dumpConfig);
- }
- catch (Exception e) {
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "readDumpConfigurazione");
- openspcoopstate.releaseResource();
- return;
- }
-
- Dump dumpApplicativo = new Dump(identitaPdD,
- this.msgContext.getIdModulo(), null,
- null, idServizio,
- 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);
-
-
-
-
-
-
-
-
-
-
-
-
-
- /* ------------
- * URL Mapping
- * (Identificazione dati sul soggetto fruitore e sulle funzionalità di protocollo ed identificativo di protocollo)
- * In questo punto l'idServizio contiene tutte le informazioni necessarie per accedere al registro se le funzionalità di protocollo sono statiche
- * Deve contenere anche l'azione, visto che quest'ultima influenza il profili di collaborazione
- * ------------- */
-
- Servizio infoServizio = null;
- IDSoggetto soggettoFruitore = null;
- String id = null;
- boolean generazioneListaTrasmissioni = false;
- InformazioniServizioURLMapping is = null;
- boolean identitaServizioValida = false;
- String nomeRegistroForSearch = null; // qualsiasi registro
- try{
- is = new InformazioniServizioURLMapping(requestMessage,protocolFactory,urlProtocolContext,
- logCore, this.msgContext.getIdModuloAsIDService(),
- propertiesReader.getCustomContexts());
- logDebug(logCore, "InformazioniServizioTramiteURLMapping: "+is.toString());
-
-
- Credential identity = null;
-
- // Read Identity
- if(is.existsIdentityBasedIdentificationMode()){
- if(connectorInMessage!=null)
- identity = connectorInMessage.getCredential();
- }
-
- // Refresh dati su mittente
- soggettoFruitore = new IDSoggetto();
- IDSoggetto headerIntegrazioneRichiestaSoggettoMittente = null;
- if(headerIntegrazioneRichiesta!=null && headerIntegrazioneRichiesta.getBusta()!=null){
- headerIntegrazioneRichiestaSoggettoMittente = new IDSoggetto(headerIntegrazioneRichiesta.getBusta().getTipoMittente(),
- headerIntegrazioneRichiesta.getBusta().getMittente());
- }
- is.refreshDati(soggettoFruitore, identity, headerIntegrazioneRichiestaSoggettoMittente);
-
- // Reimposto a null se il refresh non ha trovato dati.
- if(soggettoFruitore.getTipo()==null && soggettoFruitore.getNome()==null){
- soggettoFruitore = null;
- }
-
- // Aggiorno domini dei soggetti se completamente ricostruiti tramite url mapping differente da plugin based
- if(soggettoFruitore!=null && soggettoFruitore.getTipo()!=null && soggettoFruitore.getNome()!=null){
- try {
- soggettoFruitore.setCodicePorta(registroServiziReader.getDominio(soggettoFruitore, nomeRegistroForSearch, protocolFactory, requestInfo));
- } catch (Exception e) {
- //e.printStackTrace();
- }
- }
- requestInfo.setFruitore(soggettoFruitore);
-
- // Check id
- boolean identitaSoggettoErogatoreValida = idServizio!=null &&
- idServizio.getSoggettoErogatore()!=null &&
- idServizio.getSoggettoErogatore().getTipo()!=null &&
- idServizio.getSoggettoErogatore().getNome()!=null;
- identitaServizioValida = identitaSoggettoErogatoreValida &&
- idServizio!=null && idServizio.getNome()!=null && idServizio.getTipo()!=null && idServizio.getVersione()!=null;
-
- // ID Protocollo
- id = null;
- if(is.isStaticBasedIdentificationMode_IdProtocol()){
- Imbustamento imbustamento = new Imbustamento(logCore, protocolFactory, openspcoopstate.getStatoRichiesta());
- IDSoggetto idSoggetto = null;
- if(identitaSoggettoErogatoreValida) {
- idSoggetto = idServizio.getSoggettoErogatore();
- }
- else {
- idSoggetto = propertiesReader.getIdentitaPortaDefault(protocolFactory.getProtocol(), requestInfo);
- }
- id =
- imbustamento.buildID(idSoggetto,
- (String) this.msgContext.getPddContext().getObject(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE),
- propertiesReader.getGestioneSerializableDBAttesaAttiva(),
- propertiesReader.getGestioneSerializableDBCheckInterval(),
- RuoloMessaggio.RICHIESTA);
- }
-
- // Lista trasmissioni
- generazioneListaTrasmissioni = is.isGenerateListaTrasmissione();
-
- // InfoServizio (NOTA: lasciare per ultimo)
- if(is.isStaticBasedIdentificationMode_InfoProtocol()){
- if(identitaServizioValida) {
- infoServizio = registroServiziReader.getInfoServizio(soggettoFruitore, idServizio,nomeRegistroForSearch,true, true, requestInfo);
- }
- else {
- infoServizio = new Servizio(); // se l'id servizio non e' valido poi viene segnalato dal motore della validazione
- }
- }
- else{
- infoServizio = new Servizio();
- }
- }
- catch(DriverRegistroServiziAzioneNotFound e){
-
- boolean throwFault = true;
- if(StatoFunzionalita.ABILITATO.equals(cors.getStato()) && this.msgContext.isGestioneRisposta()) {
- throwFault = false;
- if(TipoGestioneCORS.TRASPARENTE.equals(cors.getTipo())) {
- // per poter continuare l'elaborazione ho bisogno dell'id servizio
- try {
- if(is.isStaticBasedIdentificationMode_InfoProtocol()){
- if(identitaServizioValida) {
- infoServizio = registroServiziReader.getInfoServizio(soggettoFruitore, idServizio,nomeRegistroForSearch,true, false, requestInfo);
- }
- }
- }catch(Exception eGetInfoServizio) {
- throwFault = true;
- }
- }
- }
- if(throwFault) {
-
- String azione = "";
- if(idServizio.getAzione()!=null) {
- azione = "(azione:"+ idServizio.getAzione()+ ") ";
- }
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.OPERAZIONE_NON_INDIVIDUATA, "true");
-
- setSOAPFault_processamento(IntegrationFunctionError.OPERATION_UNDEFINED,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_423_SERVIZIO_CON_AZIONE_SCORRETTA.
- getErrore423_ServizioConAzioneScorretta(azione+ e.getMessage()),e,
- "readProtocolInfo");
- openspcoopstate.releaseResource();
- return;
-
- }
- else {
- effettuareGestioneCORS = true;
- }
-
- }
- catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "readProtocolInfo");
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
- // Gestione CORS
-
- 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_ricezioneBuste()) {
- 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(true);
- 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
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "gestioneCORS");
- openspcoopstate.releaseResource();
- return;
- }
-
- openspcoopstate.releaseResource();
- return;
-
- }
- else {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.CORS_PREFLIGHT_REQUEST_TRASPARENTE, "true");
-
- }
-
- }
-
-
-
-
-
-
-
-
- /* ------------ Busta con i dati identificati tramite PA e URLMapping ------------- */
-
- Busta bustaURLMapping = null;
- try{
- // Build Busta
- bustaURLMapping = new Busta(protocolFactory,infoServizio, soggettoFruitore,
- idServizio!=null ? idServizio.getSoggettoErogatore() : null,
- id, generazioneListaTrasmissioni);
- if(infoServizio!=null && infoServizio.getCollaborazione()) {
- // in questo punto sar' true solo se infoServizio è stato letto dal registro E siamo in 'isStaticBasedIdentificationMode_InfoProtocol'
- if(headerIntegrazioneRichiesta!=null && headerIntegrazioneRichiesta.getBusta()!=null
- && headerIntegrazioneRichiesta.getBusta().getIdCollaborazione()!=null) {
- bustaURLMapping.setCollaborazione(headerIntegrazioneRichiesta.getBusta().getIdCollaborazione());
- }
- }
- if(infoServizio!=null && infoServizio.getIdRiferimentoRichiesta()) {
- // in questo punto sar' true solo se infoServizio è stato letto dal registro E siamo in 'isStaticBasedIdentificationMode_InfoProtocol'
- if(headerIntegrazioneRichiesta!=null && headerIntegrazioneRichiesta.getBusta()!=null
- && headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio()!=null) {
- bustaURLMapping.setRiferimentoMessaggio(headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio());
- this.msgContext.getProtocol().setRiferimentoAsincrono(headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio());
- }
- }
- TipoOraRegistrazione tipoOraRegistrazione = propertiesReader.getTipoTempoBusta(null);
- bustaURLMapping.setTipoOraRegistrazione(tipoOraRegistrazione, traduttore.toString(tipoOraRegistrazione));
- if(bustaURLMapping.sizeListaTrasmissioni()>0){
- for (Trasmissione trasmissione : bustaURLMapping.getListaTrasmissioni()) {
- trasmissione.setTempo(tipoOraRegistrazione, traduttore.toString(tipoOraRegistrazione));
- }
- }
- bustaURLMapping.setServizioApplicativoFruitore(servizioApplicativoFruitore);
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "bustaURLMapping");
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- /* ------------ Processamento Busta Ricevuta ------------- */
-
- RicezioneBusteGeneratoreBustaErrore ricezioneBusteGeneratoreBustaErrore = new RicezioneBusteGeneratoreBustaErrore(this.msgContext, this.generatoreErrore);
-
- // ValidazioneSintattica
- msgDiag.mediumDebug("Validazione busta ricevuta in corso...");
- ProprietaValidazione properties = new ProprietaValidazione();
- boolean readQualifiedAttribute = propertiesReader.isReadQualifiedAttribute(CostantiRegistroServizi.IMPLEMENTAZIONE_STANDARD);
-
- Validatore validatore = new Validatore(requestMessage,pddContext,properties, openspcoopstate.getStatoRichiesta(),readQualifiedAttribute, protocolFactory);
-
-
- msgDiag.logPersonalizzato("validazioneSintattica");
- if(validatore.validazioneSintattica(bustaURLMapping, true) == false){
- // Provo a reperire il dominio se ho l'informazione sul destinatario valida
- Busta erroreIntestazione = null;
- boolean setDestinatarioDefault = true;
- if( validatore.getBustaErroreHeaderIntestazione()!=null){
- erroreIntestazione = validatore.getBustaErroreHeaderIntestazione();
-
- // Imposto Identificativo Richiesta
- if(erroreIntestazione.getID()!=null){
- msgDiag.setIdMessaggioRichiesta(erroreIntestazione.getID());
- this.msgContext.getProtocol().setIdRichiesta(erroreIntestazione.getID());
- }
-
- IProtocolManager protocolManager = protocolFactory.createProtocolManager();
- if( (protocolManager.getKeywordMittenteSconosciuto().equals(erroreIntestazione.getDestinatario())==false) &&
- (protocolManager.getKeywordTipoMittenteSconosciuto().equals(erroreIntestazione.getTipoDestinatario())==false)
- ){
- try{
- String dominioTmp = configurazionePdDReader.getIdentificativoPorta(new IDSoggetto(erroreIntestazione.getTipoDestinatario(),
- erroreIntestazione.getDestinatario()),protocolFactory, requestInfo);
- if(dominioTmp!=null){
- identitaPdD.setCodicePorta(dominioTmp);
- identitaPdD.setTipo(erroreIntestazione.getTipoDestinatario());
- identitaPdD.setNome(erroreIntestazione.getDestinatario());
- setDestinatarioDefault = false;
- parametriGenerazioneBustaErrore.setIdentitaPdD(identitaPdD);
- parametriInvioBustaErrore.setIdentitaPdD(identitaPdD);
- }
- }catch(Exception e){
- // ignore
- }
- }
-
- // Imposto i domini corretti, se sono stati impostati dei mittenti e tipi mittenti esistenti
- if(erroreIntestazione.getMittente()!=null && erroreIntestazione.getTipoMittente()!=null){
- try{
- String dominio = registroServiziReader.getDominio(new IDSoggetto(erroreIntestazione.getTipoMittente(), erroreIntestazione.getMittente()), null, protocolFactory, requestInfo);
- if(dominio!=null)
- erroreIntestazione.setIdentificativoPortaMittente(dominio);
- }catch(Exception e){
- // ignore
- }
- }
- if(erroreIntestazione.getDestinatario()!=null && erroreIntestazione.getTipoDestinatario()!=null){
- try{
- String dominio = registroServiziReader.getDominio(new IDSoggetto(erroreIntestazione.getTipoDestinatario(), erroreIntestazione.getDestinatario()), null, protocolFactory, requestInfo);
- if(dominio!=null)
- erroreIntestazione.setIdentificativoPortaDestinatario(dominio);
- }catch(Exception e){
- // ignore
- }
- }
- }
- // Provo a tracciare/dumpare la busta di richiesta arrivata malformata
- try{
- if(erroreIntestazione!=null){
- msgDiag.addKeywords(erroreIntestazione,true);
- if(erroreIntestazione.getMittente()!=null || erroreIntestazione.getTipoMittente()!=null){
- msgDiag.logPersonalizzato("ricezioneMessaggio");
- }
- else{
- msgDiag.logPersonalizzato("ricezioneMessaggio.mittenteAnonimo");
- }
- }
- if(this.msgContext.isTracciamentoAbilitato() && erroreIntestazione!=null){
- msgDiag.mediumDebug("Tracciamento busta di richiesta...");
- // Tracciamento richiesta
- Tracciamento tracciamento = new Tracciamento(identitaPdD,
- this.msgContext.getIdModulo(),
- inRequestContext.getPddContext(),
- this.msgContext.getTipoPorta(),msgDiag.getPorta(),
- configurazionePdDReader);
-
- erroreIntestazione.setServizioApplicativoFruitore(servizioApplicativoFruitore);
- String dettaglioErrore = null;
- if(erroreIntestazione!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, erroreIntestazione.toStringListaEccezioni(protocolFactory));
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_VALIDAZIONE_BUSTA, "sintattica");
- dettaglioErrore = msgDiag.getMessaggio_replaceKeywords(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneNonRiuscita");
- }
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(dettaglioErrore);
-
- // Prima di tracciare elimino la lista di eccezioni
- List<Eccezione> eccezioniRiscontrate = erroreIntestazione.cloneListaEccezioni();
- while(erroreIntestazione.sizeListaEccezioni()>0){
- erroreIntestazione.removeEccezione(0);
- }
-
- // Tracciamento Busta Ricevuta
- tracciamento.registraRichiesta(requestMessage,null,validatore.getHeaderProtocollo_senzaControlli(),erroreIntestazione,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
-
- // Riaggiungo eccezioni riscontrate per tracciare risposta
- while(eccezioniRiscontrate.size()>0){
- erroreIntestazione.addEccezione(eccezioniRiscontrate.remove(0));
- }
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"TracciamentoBustaMalformata");
- logError(logCore, "Riscontrato errore durante il tracciamento della busta malformata ricevuta",e);
- }
- if(erroreIntestazione!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, erroreIntestazione.toStringListaEccezioni(protocolFactory));
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_VALIDAZIONE_BUSTA, "sintattica");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneNonRiuscita");
-
- if(this.msgContext.isGestioneRisposta()){
- if(setDestinatarioDefault){
- // Non sono riuscito a prendere il dominio del destinatario.
- // Usero' come mittente della busta quella della porta di dominio di default
- erroreIntestazione.setDestinatario(identitaPdD.getNome());
- erroreIntestazione.setTipoDestinatario(identitaPdD.getTipo());
- erroreIntestazione.setIdentificativoPortaDestinatario(identitaPdD.getCodicePorta());
- }
- Tracciamento tracciamento = new Tracciamento(identitaPdD,
- this.msgContext.getIdModulo(),
- inRequestContext.getPddContext(),
- this.msgContext.getTipoPorta(),msgDiag.getPorta(),
- configurazionePdDReader);
-
- parametriGenerazioneBustaErrore.setTracciamento(tracciamento);
- parametriGenerazioneBustaErrore.setBusta(erroreIntestazione);
- parametriGenerazioneBustaErrore.setError(erroreIntestazione.cloneListaEccezioni());
-
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.BAD_REQUEST;
- if(validatore.getErrore_integrationFunctionError()!=null) {
- integrationFunctionError = validatore.getErrore_integrationFunctionError();
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreValidazione
-
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- }else{
-
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.BAD_REQUEST;
- if(validatore.getErrore_integrationFunctionError()!=null) {
- integrationFunctionError = validatore.getErrore_integrationFunctionError();
- }
- try{
- msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, validatore.getErrore().getDescrizione(protocolFactory));
- }catch(Exception e){
- logError(logCore, "getDescrizione Error:"+e.getMessage(),e);
- }
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_VALIDAZIONE_BUSTA, "sintattica");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneNonRiuscita");
- setSOAPFault_intestazione(integrationFunctionError, validatore.getErrore());
- }
- openspcoopstate.releaseResource();
- return;
- }
-
- idServizio = validatore.getIDServizio();
- Busta bustaRichiesta = validatore.getBusta();
- BustaRawContent<?> soapHeaderElement = validatore.getHeaderProtocollo();
-
- if(bustaRichiesta!=null) {
- try{
- if(infoServizio.getCollaborazione() && bustaRichiesta.getCollaborazione()==null) {
- InitialIdConversationType initial = protocolFactory.createProtocolConfiguration().isGenerateInitialIdConversation(TipoPdD.APPLICATIVA, FunzionalitaProtocollo.COLLABORAZIONE);
- if(InitialIdConversationType.ID_TRANSAZIONE.equals(initial)) {
- bustaRichiesta.setCollaborazione(idTransazione);
- }
- else if(InitialIdConversationType.ID_MESSAGGIO.equals(initial)) {
- bustaRichiesta.setCollaborazione(bustaRichiesta.getID());
- }
- }
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,
- "setCollaborazione");
- openspcoopstate.releaseResource();
- return;
- }
- }
-
-
-
-
-
-
-
- /* ------------ Controllo che i dati ottenuti dal validatore ed i dati ottenuti dalla RequestInfo coincidano ------------- */
-
-
- // Controllo che i dati ottenuti dal validatore ed i dati ottenuti dalla RequestInfo coincidano
- if(requestInfo.getIdServizio()!=null){
- // Altrimenti i dati l'ho letti dalla busta e coincidono per forza
- String oggetto = null;
- String datoBusta = null;
- String datoPA = null;
- String locationPA = requestInfo.getProtocolContext().getInterfaceName();
- if(requestInfo.getIdServizio().getTipo().equals(idServizio.getTipo())==false){
- oggetto = "Tipo del servizio";
- datoBusta = idServizio.getTipo();
- datoPA = requestInfo.getIdServizio().getTipo();
- }
- else if(requestInfo.getIdServizio().getNome().equals(idServizio.getNome())==false){
- oggetto = "Servizio";
- datoBusta = idServizio.getNome();
- datoPA = requestInfo.getIdServizio().getNome();
- }
- else if(requestInfo.getIdServizio().getVersione().intValue() != idServizio.getVersione().intValue()){
- oggetto = "VersioneServizio";
- datoBusta = idServizio.getVersione().intValue()+"";
- datoPA = requestInfo.getIdServizio().getVersione().intValue()+"";
- }
- else if(requestInfo.getIdServizio().getAzione()!=null && requestInfo.getIdServizio().getAzione().equals(idServizio.getAzione())==false){
- oggetto = "Azione";
- datoBusta = idServizio.getAzione();
- datoPA = requestInfo.getIdServizio().getAzione();
- }
- else if(requestInfo.getIdServizio().getSoggettoErogatore().getTipo().equals(idServizio.getSoggettoErogatore().getTipo())==false){
- oggetto = "Tipo del soggetto erogatore";
- datoBusta = idServizio.getSoggettoErogatore().getTipo();
- datoPA = requestInfo.getIdServizio().getSoggettoErogatore().getTipo();
- }
- else if(requestInfo.getIdServizio().getSoggettoErogatore().getNome().equals(idServizio.getSoggettoErogatore().getNome())==false){
- oggetto = "Soggetto erogatore";
- datoBusta = idServizio.getSoggettoErogatore().getNome();
- datoPA = requestInfo.getIdServizio().getSoggettoErogatore().getNome();
- }
- if(oggetto!=null){
- setSOAPFault_processamento(IntegrationFunctionError.BAD_REQUEST,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_455_DATI_BUSTA_DIFFERENTI_PA_INVOCATA.
- getErrore455DatiBustaDifferentiDatiPAInvocata(oggetto, datoBusta, datoPA, locationPA),null,
- "ConfrontoDatiBustaConDatiInvocazionePortaApplicativa");
- openspcoopstate.releaseResource();
- return;
- }
- }
-
-
-
-
-
-
-
- /* ----------- Ruolo Busta Ricevuta ------------ */
-
- RuoloBusta ruoloBustaRicevuta = null;
- if(!functionAsRouter){
-
- if( validatore.getBusta()!=null && (
- (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(validatore.getBusta().getProfiloDiCollaborazione())) ||
- (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(validatore.getBusta().getProfiloDiCollaborazione()))
- )
- ){
- if(openspcoopstate.resourceReleased()) {
- try{
- // inizializzo
- openspcoopstate.setUseConnection(true);
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(), idTransazione);
- validatore.updateState(openspcoopstate.getStatoRichiesta());
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"validator.getRuoloBustaRicevuta(false) initResources");
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION),e,
- "initDatabaseResource");
- openspcoopstate.releaseResource();
- return;
- }
- }
- }
-
- msgDiag.mediumDebug("Lettura Ruolo Busta...");
- try{
- ruoloBustaRicevuta = validatore.getRuoloBustaRicevuta(requestInfo.getProtocolServiceBinding(),false);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"validator.getRuoloBustaRicevuta(false)");
- }
-
- boolean checkConnection=false;
- if( validatore.getBusta()!=null) {
- if(!org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(validatore.getBusta().getProfiloDiCollaborazione())){
- if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta) == false){
- checkConnection=true;
- }
- }
- else {
- if(validatore.getBusta().getSequenza()!=-1 && validatore.getBusta().getCollaborazione()!=null) {
- checkConnection=true;
- }
- }
- }
- if(checkConnection && openspcoopstate.resourceReleased()) {
- try{
- // inizializzo
- openspcoopstate.setUseConnection(true);
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(), idTransazione);
- validatore.updateState(openspcoopstate.getStatoRichiesta());
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"validator.getRuoloBustaRicevuta(false) initResources after read role");
- setSOAPFault_processamento(IntegrationFunctionError.GOVWAY_RESOURCES_NOT_AVAILABLE,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION),e,
- "initDatabaseResource");
- openspcoopstate.releaseResource();
- return;
- }
- }
- }
-
-
-
-
-
-
-
-
- /* -------- Lettura Porta Applicativa
- * (Il vero controllo sull'esistenza della Porta Applicativa viene effettuato in Sbustamento, poiche' dipende dal profilo) ------------- */
- // per profili asincroni
- PortaDelegata pd = null;
- IDPortaDelegata idPD = null;
- IDPortaApplicativa idPA = null;
- String servizioApplicativoErogatoreAsincronoSimmetricoRisposta = null;
- boolean asincronoSimmetricoRisposta = false;
- if(!functionAsRouter && idServizio!=null){
- msgDiag.mediumDebug("Lettura porta applicativa/delegata...");
- try{
- /* ----------- Identificazione profilo -------------- */
- if( (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) &&
- !(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString())) )
- {
- msgDiag.highDebug("Lettura porta applicativa/delegata (Asincrono)...");
- // La validazione non deve essere effettuata se abbiamo una ricevuta asincrona, 'modalita' asincrona'
- ProfiloDiCollaborazione profiloCollaborazione = new ProfiloDiCollaborazione(openspcoopstate.getStatoRichiesta(),protocolFactory);
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- asincronoSimmetricoRisposta = true;
-
- // Risposta Asincrona
- RepositoryBuste repository = new RepositoryBuste(openspcoopstate.getStatoRichiesta(), true, protocolFactory);
- Integrazione integrazione = null;
- if(bustaRichiesta.getRiferimentoMessaggio()!=null){
- integrazione = repository.getInfoIntegrazioneFromOutBox(bustaRichiesta.getRiferimentoMessaggio());
- }else{
- // LineeGuida (Collaborazione)
- integrazione = repository.getInfoIntegrazioneFromOutBox(bustaRichiesta.getCollaborazione());
- }
- servizioApplicativoErogatoreAsincronoSimmetricoRisposta = integrazione.getServizioApplicativo();
- idPD = new IDPortaDelegata();
- idPD.setNome(integrazione.getNomePorta());
- pd = configurazionePdDReader.getPortaDelegataSafeMethod(idPD, requestInfo);
- idPD = configurazionePdDReader.convertToIDPortaDelegata(pd); // per aggiungere informazioni sugli identificativi
-
- }
- // Profilo Asincrono Asimmetrico
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- /// Risposta Asincrona
- if(RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- // ConversioneServizio.
- IDServizio idServizioOriginale = null;
- if(bustaRichiesta.getRiferimentoMessaggio()!=null){
- idServizioOriginale = profiloCollaborazione.asincronoAsimmetrico_getDatiConsegnaRisposta(bustaRichiesta.getRiferimentoMessaggio());
- }else{
- // LineeGuida (Collaborazione)
- idServizioOriginale = profiloCollaborazione.asincronoAsimmetrico_getDatiConsegnaRisposta(bustaRichiesta.getCollaborazione());
- }
- this.overwriteIdSoggetto(idServizioOriginale, idServizio.getSoggettoErogatore());
-
- if(pa==null){
- pa = ricezioneBusteUtils.getPortaApplicativa(configurazionePdDReader, idServizioOriginale);
- }
-
- }
- // Ricevuta alla richiesta/risposta.
- else if(RuoloBusta.RICEVUTA_RICHIESTA.equals(ruoloBustaRicevuta.toString()) ||
- RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
- RepositoryBuste repository = new RepositoryBuste(openspcoopstate.getStatoRichiesta(), true, protocolFactory);
- Integrazione integrazione = null;
- if(bustaRichiesta.getRiferimentoMessaggio()!=null){
- integrazione = repository.getInfoIntegrazioneFromOutBox(bustaRichiesta.getRiferimentoMessaggio());
- }else{
- // LineeGuida (Collaborazione)
- integrazione = repository.getInfoIntegrazioneFromOutBox(bustaRichiesta.getCollaborazione());
- }
- idPD = new IDPortaDelegata();
- idPD.setNome(integrazione.getNomePorta());
- pd = configurazionePdDReader.getPortaDelegataSafeMethod(idPD, requestInfo);
- idPD = configurazionePdDReader.convertToIDPortaDelegata(pd); // per aggiungere informazioni sugli identificativi
- }
-
- }
- // Chiudo eventuali prepared statement, che non voglio eseguire.
- ((StateMessage)openspcoopstate.getStatoRichiesta()).closePreparedStatement();
- }else{
- msgDiag.highDebug("Lettura porta applicativa/delegata (Normale)...");
- if(pa==null){
- pa = ricezioneBusteUtils.getPortaApplicativa(configurazionePdDReader, idServizio);
- }
- }
-
- // Aggiungo identita servizio applicativi
- if(pa!=null){
- idPA = configurazionePdDReader.convertToIDPortaApplicativa(pa);
- msgDiag.updatePorta(pa.getNome(), requestInfo);
- for(int i=0; i<pa.sizeServizioApplicativoList();i++){
- this.msgContext.getIntegrazione().addServizioApplicativoErogatore(pa.getServizioApplicativo(i).getNome());
- }
- }
- else if(servizioApplicativoErogatoreAsincronoSimmetricoRisposta!=null){
- // E' l'erogatore della risposta asincrona!
- this.msgContext.getIntegrazione().addServizioApplicativoErogatore(servizioApplicativoErogatoreAsincronoSimmetricoRisposta);
- }
-
- // Aggiungo identificativo porta applicativa/delegata
- if(idPA!=null){
- this.msgContext.getIntegrazione().setIdPA(idPA);
- }
- else if(idPD!=null){
- this.msgContext.getIntegrazione().setIdPD(idPD);
- }
-
- msgDiag.highDebug("Lettura porta applicativa/delegata terminato");
-
- }catch(Exception e){
- if( !(e instanceof DriverConfigurazioneNotFound) ) {
- msgDiag.logErroreGenerico(e,"letturaPorta");
-
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento("LetturaPorta",CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e);
- return;
- }
- }
- }
- msgDiag.highDebug("Lettura porta applicativa/delegata terminato impostazione context");
-
-
-
-
-
-
-
-
-
- /*
- * ---------------- Aggiornamento dati raccolti (PreAutenticazione) ---------------------
- */
-
- // Aggiornamento Informazioni protocollo
- msgDiag.setIdMessaggioRichiesta(validatore.getBusta().getID());
- this.msgContext.setIdMessage(validatore.getBusta().getID());
- msgDiag.setServizio(idServizio);
- msgDiag.addKeywords(validatore.getBusta(), true);
- parametriGenerazioneBustaErrore.setMsgDiag(msgDiag);
- parametriInvioBustaErrore.setMsgDiag(msgDiag);
-
- Tracciamento tracciamento = new Tracciamento(identitaPdD,
- this.msgContext.getIdModulo(),
- inRequestContext.getPddContext(),
- this.msgContext.getTipoPorta(),msgDiag.getPorta(),
- configurazionePdDReader);
- parametriGenerazioneBustaErrore.setTracciamento(tracciamento);
-
-
-
-
-
-
-
- /* --------------- Gestione credenziali --------------- */
- if(RicezioneBuste.tipiGestoriCredenziali!=null){
- msgDiag.mediumDebug("Gestione personalizzata delle credenziali...");
-
- for (int i = 0; i < RicezioneBuste.tipiGestoriCredenziali.length; i++) {
- try {
-
- IGestoreCredenziali gestore = null;
- String classType = null;
- try {
- classType = className.getGestoreCredenziali(RicezioneBuste.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 ["
- + RicezioneBuste.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)){
- 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 "+RicezioneBuste.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 ["+ RicezioneBuste.tipiGestoriCredenziali[i]
- + "]: "+ e.getMessage(),e);
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_GESTORE_CREDENZIALI,RicezioneBuste.tipiGestoriCredenziali[i]);
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("gestoreCredenziali.errore");
- ErroreIntegrazione msgErroreIntegrazione = null;
- String wwwAuthenticateErrorHeader = null;
- if(e instanceof GestoreCredenzialiConfigurationException){
- GestoreCredenzialiConfigurationException ge = (GestoreCredenzialiConfigurationException) e;
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(ge.getIntegrationFunctionError());
- msgErroreIntegrazione =
- ErroriIntegrazione.ERRORE_431_GESTORE_CREDENZIALI_ERROR.
- getErrore431_ErroreGestoreCredenziali(RicezioneBuste.tipiGestoriCredenziali[i],e);
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_AUTENTICAZIONE, "true");
- wwwAuthenticateErrorHeader = ge.getWwwAuthenticateErrorHeader();
- }else{
- msgErroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_548_GESTORE_CREDENZIALI_NON_FUNZIONANTE);
- }
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(msgDiag.getMessaggio_replaceKeywords("gestoreCredenziali.errore"));
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(msgErroreIntegrazione);
- OpenSPCoop2Message errorMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
- if(wwwAuthenticateErrorHeader!=null) {
- errorMsg.forceTransportHeader(HttpConstants.AUTHORIZATION_RESPONSE_WWW_AUTHENTICATE, wwwAuthenticateErrorHeader);
- }
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
-
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
- /* ------------ GestioneToken ------------- */
-
- RicezioneBusteGestioneToken gestioneToken = new RicezioneBusteGestioneToken(msgDiag, logCore,
- tracciamento, correlazioneApplicativa, soapHeaderElement, bustaRichiesta,
- pa, idPA, pd, idPD,
- requestMessage,
- asincronoSimmetricoRisposta,
- this.msgContext, this.generatoreErrore, inRequestContext,
- configurazionePdDReader,
- pddContext, idTransazione,
- openspcoopstate, transaction, requestInfo,
- protocolFactory,
- identitaPdD,
- parametriGenerazioneBustaErrore, parametriInvioBustaErrore);
-
- GestioneTokenAutenticazione gestioneTokenAutenticazione = null;
- String token = null;
-
- if(!gestioneToken.process()) {
- return;
- }
-
- gestioneTokenAutenticazione = gestioneToken.getGestioneTokenAutenticazione();
- token = gestioneToken.getToken();
-
-
-
-
-
-
-
-
-
-
- /* ------------ Riconciliazione ID Messaggio con quello ricevuto nel token oAuth ------------- */
-
- if(Costanti.MODIPA_PROTOCOL_NAME.equals(protocolFactory.getProtocol())) {
- ModIValidazioneSemanticaProfiloSicurezza modIValidazioneSemanticaProfiloSicurezza = new ModIValidazioneSemanticaProfiloSicurezza(bustaRichiesta, true);
- if(modIValidazioneSemanticaProfiloSicurezza.isSicurezzaTokenOauth()) {
- boolean useJtiAuthorization = ModIUtils.useJtiAuthorizationObject(requestMessage);
- if(useJtiAuthorization) {
- String jti = TokenUtilities.readJtiFromInformazioniToken(pddContext);
- if(jti!=null && StringUtils.isNotEmpty(jti)) {
- ModIUtils.replaceBustaIdWithJtiTokenId(modIValidazioneSemanticaProfiloSicurezza, jti);
- msgDiag.updateKeywordIdMessaggioRichiesta(bustaRichiesta.getID());
- }
- }
- }
- }
-
-
-
-
-
-
-
- /*
- * ---------------- Mittente / Autenticazione ---------------------
- */
-
- RicezioneBusteGestioneAutenticazione gestioneAutenticazione = new RicezioneBusteGestioneAutenticazione(msgDiag, logCore,
- tracciamento, correlazioneApplicativa, soapHeaderElement, bustaRichiesta,
- pa, idPA, pd, idPD,
- soggettoFruitore, credenziali, servizioApplicativoFruitore, gestioneTokenAutenticazione,
- requestMessage,
- asincronoSimmetricoRisposta, functionAsRouter,
- this.msgContext, this.generatoreErrore, inRequestContext,
- configurazionePdDReader, registroServiziReader,
- pddContext, idTransazione, identitaPdD,
- openspcoopstate, transaction, requestInfo,
- protocolFactory, validatore,
- parametriGenerazioneBustaErrore, parametriInvioBustaErrore);
-
- boolean soggettoFruitoreIdentificatoTramiteProtocollo = false;
- boolean soggettoAutenticato = false;
- boolean supportatoAutenticazioneSoggetti = false;
- IDServizioApplicativo idApplicativoToken = null;
-
- if(!gestioneAutenticazione.process()) {
- return;
- }
-
- soggettoFruitoreIdentificatoTramiteProtocollo = gestioneAutenticazione.isSoggettoFruitoreIdentificatoTramiteProtocollo();
- soggettoAutenticato = gestioneAutenticazione.isSoggettoAutenticato();
- supportatoAutenticazioneSoggetti = gestioneAutenticazione.isSupportatoAutenticazioneSoggetti();
- idApplicativoToken = gestioneAutenticazione.getIdApplicativoToken();
- soggettoFruitore = gestioneAutenticazione.getSoggettoFruitore();
- boolean autenticazioneOpzionale = gestioneAutenticazione.isAutenticazioneOpzionale();
- servizioApplicativoFruitore = gestioneAutenticazione.getServizioApplicativoFruitore();
-
-
-
-
-
-
-
-
-
- /*
- * ---------------- Aggiornamento dati raccolti (PostAutenticazione) ---------------------
- */
-
- Trasmissione trasmissioneSoggettoAutenticato = null;
- if(soggettoAutenticato || soggettoFruitoreIdentificatoTramiteProtocollo){
- validatore.getBusta().setTipoMittente(soggettoFruitore.getTipo());
- validatore.getBusta().setMittente(soggettoFruitore.getNome());
- if(validatore.getBusta().sizeListaTrasmissioni()>0){
- for (int i = 0; i < validatore.getBusta().sizeListaTrasmissioni(); i++) {
- Trasmissione trasmissione = validatore.getBusta().getTrasmissione(i);
- if(trasmissione.getOrigine()==null && trasmissione.getTipoOrigine()==null && trasmissione.getIdentificativoPortaOrigine()==null){
- trasmissioneSoggettoAutenticato = trasmissione;
- trasmissione.setTipoOrigine(soggettoFruitore.getTipo());
- trasmissione.setOrigine(soggettoFruitore.getNome());
- }
- }
- }
- validatore.setMittente(soggettoFruitore);
- bustaRichiesta = validatore.getBusta();
- msgDiag.addKeywords(validatore.getBusta(), true);
- }
-
- // VM ProtocolInfo (se siamo arrivati da un canale VM)
- if(pddContext!=null && bustaRichiesta!=null)
- DirectVMProtocolInfo.setInfoFromContext(pddContext, bustaRichiesta);
-
- // Se non impostati, imposto i domini
- org.openspcoop2.pdd.core.Utilities.refreshIdentificativiPorta(bustaRichiesta, requestInfo.getIdentitaPdD(), registroServiziReader, protocolFactory, requestInfo);
- if(soggettoFruitore != null){
- if(soggettoFruitore.getCodicePorta()==null){
- soggettoFruitore.setCodicePorta(bustaRichiesta.getIdentificativoPortaMittente());
- }
- if(trasmissioneSoggettoAutenticato!=null && trasmissioneSoggettoAutenticato.getIdentificativoPortaOrigine()==null){
- trasmissioneSoggettoAutenticato.setIdentificativoPortaOrigine(bustaRichiesta.getIdentificativoPortaMittente());
- }
- msgDiag.setFruitore(soggettoFruitore);
- }
- if(idServizio!=null && idServizio.getSoggettoErogatore()!=null){
- if(idServizio.getSoggettoErogatore().getCodicePorta()==null){
- idServizio.getSoggettoErogatore().setCodicePorta(bustaRichiesta.getIdentificativoPortaDestinatario());
- }
- }
-
- if(servizioApplicativoFruitore!=null){
- // overriding busta
- if(bustaRichiesta!=null) {
- bustaRichiesta.setServizioApplicativoFruitore(servizioApplicativoFruitore);
- }
- }
- else{
- // altrimenti se è valorizzato internamente alla busta (poichè previsto dal protocollo (es. pdc)) e non capito tramite informazioni di integrazione uso quello
- if(bustaRichiesta!=null && bustaRichiesta.getServizioApplicativoFruitore()!=null){
- servizioApplicativoFruitore = bustaRichiesta.getServizioApplicativoFruitore();
- }
- }
- String idMessageRequest = bustaRichiesta!=null ? bustaRichiesta.getID() : null;
- TipoPdD tipoPorta = TipoPdD.APPLICATIVA;
- if(functionAsRouter)
- tipoPorta = TipoPdD.ROUTER;
- this.msgContext.getProtocol().setDominio(identitaPdD);
- this.msgContext.setIdentitaPdD(identitaPdD);
- this.msgContext.setTipoPorta(tipoPorta);
- this.msgContext.getProtocol().setFruitore(soggettoFruitore);
- if(bustaRichiesta!=null){
- this.msgContext.getProtocol().setIndirizzoFruitore(bustaRichiesta.getIndirizzoMittente());
- }
- if(idServizio!=null && idServizio.getSoggettoErogatore()!=null){
- this.msgContext.getProtocol().setErogatore(idServizio.getSoggettoErogatore());
- }
- if(bustaRichiesta!=null){
- this.msgContext.getProtocol().setIndirizzoErogatore(bustaRichiesta.getIndirizzoDestinatario());
- }
- if(idServizio!=null) {
- 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);
- if(bustaRichiesta!=null) {
- this.msgContext.getProtocol().setProfiloCollaborazione(bustaRichiesta.getProfiloDiCollaborazione(),bustaRichiesta.getProfiloDiCollaborazioneValue());
- this.msgContext.getProtocol().setCollaborazione(bustaRichiesta.getCollaborazione());
- }
-
-
-
-
-
-
-
- /*
- * ---------------- Verifico che il servizio di RicezioneBuste sia abilitato ---------------------
- */
- boolean serviceIsEnabled = false;
- boolean portaEnabled = false;
- Exception serviceIsEnabledExceptionProcessamento = null;
- try{
- serviceIsEnabled = StatoServiziPdD.isEnabledPortaApplicativa(soggettoFruitore, idServizio);
- if(serviceIsEnabled){
- // verifico la singola porta
- if(pa!=null){
- portaEnabled = configurazionePdDReader.isPortaAbilitata(pa);
- }
- else{
- portaEnabled = configurazionePdDReader.isPortaAbilitata(pd);
- }
- }
- }catch(Exception e){
- serviceIsEnabledExceptionProcessamento = e;
- }
- if (!serviceIsEnabled || !portaEnabled || serviceIsEnabledExceptionProcessamento!=null) {
- ErroreIntegrazione errore = null;
- String esito = null;
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.API_SUSPEND;
- if(serviceIsEnabledExceptionProcessamento!=null){
- logError(logCore, "["+ RicezioneBuste.ID_MODULO+ "] Identificazione stato servizio di ricezione buste non riuscita: "+serviceIsEnabledExceptionProcessamento.getMessage(),serviceIsEnabledExceptionProcessamento);
- msgDiag.logErroreGenerico("Identificazione stato servizio di ricezione buste non riuscita", "PA");
- esito = "["+ RicezioneBuste.ID_MODULO+ "] Identificazione stato servizio di ricezione buste non riuscita";
- 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 buste disabilitato";
- if(serviceIsEnabled){
- if(pa!=null){
- msg = "Porta Applicativa ["+pa.getNome()+"] disabilitata";
- }
- else{
- msg = "Porta Delegata ["+pd.getNome()+"] disabilitata";
- }
- errore = ErroriIntegrazione.ERRORE_446_PORTA_SOSPESA.getErroreIntegrazione();
- }
- else {
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(msg,CodiceErroreIntegrazione.CODICE_551_PA_SERVICE_NOT_ACTIVE);
- }
- logError(logCore, "["+ RicezioneBuste.ID_MODULO+ "] "+msg);
- msgDiag.logErroreGenerico(msg, "PA");
- esito = "["+ RicezioneBuste.ID_MODULO+ "] "+msg;
- }
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(esito);
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(errore);
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,serviceIsEnabledExceptionProcessamento);
-
- if(IntegrationFunctionError.API_SUSPEND.equals(integrationFunctionError) &&
- propertiesReader.isEnabledServiceUnavailableRetryAfterPASuspend() &&
- propertiesReader.getServiceUnavailableRetryAfterSecondsPASuspend()!=null &&
- propertiesReader.getServiceUnavailableRetryAfterSecondsPASuspend()>0) {
- int seconds = propertiesReader.getServiceUnavailableRetryAfterSecondsPASuspend();
- if(propertiesReader.getServiceUnavailableRetryAfterSecondsRandomBackoffPASuspend()!=null &&
- propertiesReader.getServiceUnavailableRetryAfterSecondsRandomBackoffPASuspend()>0) {
- seconds = seconds + ServicesUtils.getRandom().nextInt(propertiesReader.getServiceUnavailableRetryAfterSecondsRandomBackoffPASuspend());
- }
- errorOpenSPCoopMsg.forceTransportHeader(HttpConstants.RETRY_AFTER, seconds+"");
- }
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
-
-
-
-
-
- /* ------------ Gestione Attribute Authority ------------- */
-
- msgDiag.mediumDebug("Gestione Attribute Authority...");
- List<AttributeAuthority> attributeAuthorities = null;
- if(pa!=null) {
- attributeAuthorities = pa.getAttributeAuthorityList();
- }
- else if(pd!=null) {
- attributeAuthorities = pd.getAttributeAuthorityList();
- }
- this.msgContext.getIntegrazione().setAttributeAuthoritiesFromObjectList(attributeAuthorities);
-
- if (attributeAuthorities == null || attributeAuthorities.isEmpty()) {
- if(!asincronoSimmetricoRisposta) {
- msgDiag.logPersonalizzato("gestioneAADisabilitata");
- }
-
- } else {
- transaction.getTempiElaborazione().startAttributeAuthority();
-
- try {
- msgDiag.logPersonalizzato("gestioneAAInCorso");
-
- org.openspcoop2.pdd.core.token.attribute_authority.pa.DatiInvocazionePortaApplicativa datiInvocazione = new org.openspcoop2.pdd.core.token.attribute_authority.pa.DatiInvocazionePortaApplicativa();
- datiInvocazione.setInfoConnettoreIngresso(inRequestContext.getConnettore());
- datiInvocazione.setState(openspcoopstate.getStatoRichiesta());
- datiInvocazione.setIdModulo(inRequestContext.getIdModulo());
- datiInvocazione.setMessage(requestMessage);
- datiInvocazione.setBusta(bustaRichiesta);
- datiInvocazione.setRequestInfo(requestInfo);
- datiInvocazione.setIdPA(idPA);
- datiInvocazione.setPa(pa);
- datiInvocazione.setIdPD(idPD);
- datiInvocazione.setPd(pd);
-
- 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);
-
- InformazioniToken informazioniTokenNormalizzate = null;
- if(pddContext.containsKey(org.openspcoop2.pdd.core.token.Costanti.PDD_CONTEXT_TOKEN_INFORMAZIONI_NORMALIZZATE)) {
- informazioniTokenNormalizzate = (InformazioniToken) pddContext.getObject(org.openspcoop2.pdd.core.token.Costanti.PDD_CONTEXT_TOKEN_INFORMAZIONI_NORMALIZZATE);
- }
-
- 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();
- }
-
- }
-
-
-
-
-
-
-
-
-
-
- /* -------- OpenSPCoop2Message Update ------------- */
- try {
- msgDiag.mediumDebug("Aggiornamento del messaggio");
- requestMessage = protocolFactory.createProtocolManager().updateOpenSPCoop2MessageRequest(requestMessage, bustaRichiesta,
- protocolFactory.getCachedRegistryReader(registroServiziReader, requestInfo));
- } catch (Exception e) {
- // Emetto log, non ancora emesso
- boolean mittenteEsistente = validatore.getBusta()!=null &&
- (validatore.getBusta().getMittente()!=null || validatore.getBusta().getTipoMittente()!=null);
- msgDiag.emitRicezioneMessaggioModuloBuste(msgDiag, pddContext, !mittenteEsistente);
-
- msgDiag.addKeywordErroreProcessamento(e,"Aggiornamento messaggio fallito");
- msgDiag.logErroreGenerico(e,"ProtocolManager.updateOpenSPCoop2Message");
- logError(logCore, "ProtocolManager.updateOpenSPCoop2Message error: "+e.getMessage(),e);
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("ProtocolManager.updateOpenSPCoop2Message, non riuscito: "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.
- setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
-
-
-
- // Imposto un context di Base (utilizzato anche per la successiva spedizione della risposta)
- MessageSecurityContext messageSecurityContext = null;
- // Proprieta' FlowParameter MTOM / Security relative alla ricezione della busta
- FlowProperties flowPropertiesRequest = null;
- // Proprieta' FlowParameter MTOM / Security relative alla spedizione della risposta
- FlowProperties flowPropertiesResponse = null;
-
- // Modalita' gestione risposta (Sincrona/Fault/Ricevute...)
- // Per i profili diversi dal sincrono e' possibile impostare dove far ritornare l'errore
- boolean newConnectionForResponse = false;
- boolean utilizzoIndirizzoTelematico = false;
- if(!functionAsRouter){
- // Calcolo newConnectionForResponse in caso di asincroni
- if( org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ){
- newConnectionForResponse = configurazionePdDReader.newConnectionForResponse();
- utilizzoIndirizzoTelematico = configurazionePdDReader.isUtilizzoIndirizzoTelematico();
- parametriInvioBustaErrore.setNewConnectionForResponse(newConnectionForResponse);
- parametriInvioBustaErrore.setUtilizzoIndirizzoTelematico(utilizzoIndirizzoTelematico);
- }
- /* ------------
- Controllo effettuato in caso di ricezione di una risposta Asincrona Simmetrica, o richiesta-stato Asincrona Asimmetrica
- In questo caso, se e' ancora in corso la gestione della richiesta o della ricevuta alla richiesta,
- prima di procedere con la gestione della risposta/richiesta-stato, devono termiare le precedenti richieste/ricevute.
- ------------
- */
- if(validatore.isErroreProtocollo()==false && validatore.isBustaDiServizio()==false){
- try{
- long scadenzaControllo = DateManager.getTimeMillis() + propertiesReader.getTimeoutBustaRispostaAsincrona();
- int checkIntervalControllo = propertiesReader.getCheckIntervalBustaRispostaAsincrona();
- boolean attendiTerminazioneRichiesta =
- this.gestioneRispostaAsincrona_checkPresenzaRichiesta(scadenzaControllo,checkIntervalControllo, bustaRichiesta,
- openspcoopstate, msgDiag, newConnectionForResponse, inRequestContext.getPddContext());
- boolean attendiTerminazioneRicevutaRichiesta =
- this.gestioneRispostaAsincrona_checkPresenzaRicevutaRichiesta(scadenzaControllo,checkIntervalControllo, bustaRichiesta,
- openspcoopstate, msgDiag, newConnectionForResponse, inRequestContext.getPddContext());
- ErroreIntegrazione msgErroreIntegrazione = null;
- String motivoErrore = null;
- if(attendiTerminazioneRichiesta){
- msgDiag.logPersonalizzato("attesaFineProcessamento.richiestaAsincrona.timeoutScaduto");
- msgErroreIntegrazione = ErroriIntegrazione.ERRORE_538_RICHIESTA_ASINCRONA_ANCORA_IN_PROCESSAMENTO.getErroreIntegrazione();
- }else if(attendiTerminazioneRicevutaRichiesta){
- msgDiag.logPersonalizzato("attesaFineProcessamento.ricevutaRichiestaAsincrona.timeoutScaduto");
- msgErroreIntegrazione = ErroriIntegrazione.ERRORE_539_RICEVUTA_RICHIESTA_ASINCRONA_ANCORA_IN_PROCESSAMENTO.getErroreIntegrazione();
- }
- if(attendiTerminazioneRichiesta || attendiTerminazioneRicevutaRichiesta){
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(motivoErrore);
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(msgErroreIntegrazione);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,null);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }catch(Exception e){
- // Emetto log, non ancora emesso
- boolean mittenteEsistente = validatore.getBusta()!=null &&
- (validatore.getBusta().getMittente()!=null || validatore.getBusta().getTipoMittente()!=null);
- msgDiag.emitRicezioneMessaggioModuloBuste(msgDiag, pddContext, !mittenteEsistente);
-
- msgDiag.logErroreGenerico(e,"checkPresenzaRichiestaRicevutaAsincronaAncoraInGestione");
- logError(logCore, "Controllo presenza richieste/ricevuteRichieste ancora in gestione " +
- "correlate alla risposta/richiesta-stato asincrona simmetrica/asimmetrica arrivata, non riuscito",e);
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Controllo presenza richieste/ricevuteRichieste ancora in gestione " +
- "correlate alla risposta/richiesta-stato asincrona simmetrica/asimmetrica arrivata, non riuscito: "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.
- setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }
-
- /* ----------- Scenario Cooperazione ------------ */
- if(ruoloBustaRicevuta!=null){
- try{
- String scenarioCooperazione = null;
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- scenarioCooperazione = Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO;
- }
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- scenarioCooperazione = Costanti.SCENARIO_SINCRONO_INVOCAZIONE_SERVIZIO;
- }
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString())){
- scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO;
- }
- else if(RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA;
- }
- else{
- // sono ricevute asincrone
- }
- }
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString())){
- scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO;
- }
- else if(RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING;
- }
- else{
- // sono ricevute asincrone
- }
- }
- this.msgContext.getProtocol().setScenarioCooperazione(scenarioCooperazione);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"setScenarioCooperazione");
- }
- }
- }
-
-
-
-
-
-
-
-
- /* -------------------------- 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...");
- ProprietaManifestAttachments proprietaManifestAttachments = null;
- boolean validazioneIDBustaCompleta = true;
- try{
- if(soggettoFruitore!=null){
- implementazionePdDMittente = registroServiziReader.getImplementazionePdD(soggettoFruitore, null, requestInfo);
- }
- if(idServizio!=null && idServizio.getSoggettoErogatore()!=null){
- implementazionePdDDestinatario = registroServiziReader.getImplementazionePdD(idServizio.getSoggettoErogatore(), null, requestInfo);
- }
- if(soggettoFruitore!=null){
- idPdDMittente = registroServiziReader.getIdPortaDominio(soggettoFruitore, null, requestInfo);
- }
- if(idServizio!=null && idServizio.getSoggettoErogatore()!=null){
- idPdDDestinatario = registroServiziReader.getIdPortaDominio(idServizio.getSoggettoErogatore(), null, requestInfo);
- }
- parametriGenerazioneBustaErrore.setImplementazionePdDMittente(implementazionePdDMittente);
- parametriGenerazioneBustaErrore.setImplementazionePdDDestinatario(implementazionePdDDestinatario);
- parametriInvioBustaErrore.setImplementazionePdDMittente(implementazionePdDMittente);
- parametriInvioBustaErrore.setImplementazionePdDDestinatario(implementazionePdDDestinatario);
-
- properties.setValidazioneConSchema(configurazionePdDReader.isLivelloValidazioneRigido(implementazionePdDMittente));
- properties.setValidazioneProfiloCollaborazione(configurazionePdDReader.isValidazioneProfiloCollaborazione(implementazionePdDMittente));
- if(openspcoopstate!=null) {
- properties.setRuntimeState(openspcoopstate.getStatoRichiesta());
- if(propertiesReader.isTransazioniUsePddRuntimeDatasource()) {
- properties.setTracceState(openspcoopstate.getStatoRichiesta());
- }
- }
- validatore.setProprietaValidazione(properties); // update
-
- MessageSecurityContextParameters contextParameters = new MessageSecurityContextParameters();
- contextParameters.setUseActorDefaultIfNotDefined(propertiesReader.isGenerazioneActorDefault(implementazionePdDMittente));
- contextParameters.setActorDefault(propertiesReader.getActorDefault(implementazionePdDMittente));
- contextParameters.setLog(logCore);
- contextParameters.setFunctionAsClient(SecurityConstants.SECURITY_SERVER);
- contextParameters.setPrefixWsuId(propertiesReader.getPrefixWsuId());
- contextParameters.setRemoveAllWsuIdRef(propertiesReader.isRemoveAllWsuIdRef());
- contextParameters.setIdFruitore(soggettoFruitore);
- contextParameters.setPddFruitore(idPdDMittente);
- contextParameters.setIdServizio(idServizio);
- contextParameters.setPddErogatore(idPdDDestinatario);
- messageSecurityContext = new MessageSecurityFactory().getMessageSecurityContext(contextParameters);
- parametriGenerazioneBustaErrore.setMessageSecurityContext(messageSecurityContext);
-
- proprietaManifestAttachments = propertiesReader.getProprietaManifestAttachments(implementazionePdDMittente);
- readQualifiedAttribute = propertiesReader.isReadQualifiedAttribute(implementazionePdDMittente);
- validazioneIDBustaCompleta = propertiesReader.isValidazioneIDBustaCompleta(implementazionePdDMittente);
-
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"ricercaImplementazionePdDSoggettiBusta");
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Errore durante la ricerca dell'implementazione della porta di dominio dei soggetti: "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.
- setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- if(soggettoFruitore!=null){
- msgDiag.mediumDebug("ImplementazionePdD soggetto fruitore ("+soggettoFruitore.toString()+"): ["+implementazionePdDMittente+"]");
- }
- if(idServizio!=null && idServizio.getSoggettoErogatore()!=null){
- msgDiag.mediumDebug("ImplementazionePdD soggetto erogatore ("+idServizio.getSoggettoErogatore().toString()+"): ["+implementazionePdDDestinatario+"]");
- }
-
-
-
-
-
-
-
-
- /* -------- Manifest attachments ------------- */
- // per profili asincroni
- if(!functionAsRouter){
- msgDiag.mediumDebug("Lettura manifest attachments impostato in porta applicativa/delegata...");
- try{
- // Validazione manifest attachments
- msgDiag.highDebug("Lettura porta applicativa/delegata (Set)...");
- if(pa!=null){
- properties.setValidazioneManifestAttachments(
- configurazionePdDReader.isValidazioneManifestAttachments(implementazionePdDMittente) &&
- configurazionePdDReader.isGestioneManifestAttachments(pa,protocolFactory));
- }
- else if(pd!=null){
- properties.setValidazioneManifestAttachments(
- configurazionePdDReader.isValidazioneManifestAttachments(implementazionePdDDestinatario) &&
- configurazionePdDReader.isGestioneManifestAttachments(pd,protocolFactory));
- }
- else{
- properties.setValidazioneManifestAttachments(
- configurazionePdDReader.isValidazioneManifestAttachments(implementazionePdDMittente));
- }
-
- msgDiag.highDebug("Lettura porta applicativa/delegata terminato");
-
- }catch(Exception e){
- if( !(e instanceof DriverConfigurazioneNotFound) ) {
- msgDiag.logErroreGenerico(e,"letturaPortaManifestAttachments");
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Errore durante la lettura della porta applicativa/delegata per la gestione ManifestAttachments: "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.
- setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }
- msgDiag.highDebug("Lettura manifest attachments impostato in porta applicativa/delegata terminato");
- }
-
-
-
-
- // Configurazione Richiesta Applicativa
- String idModuloInAttesa = null;
- if(this.msgContext.isGestioneRisposta())
- idModuloInAttesa = this.msgContext.getIdModulo();
- RichiestaApplicativa richiestaApplicativa = null;
- if(idPA!=null) {
- richiestaApplicativa = new RichiestaApplicativa(soggettoFruitore,
- idModuloInAttesa,identitaPdD,idPA);
- if(idServizio!=null && idServizio.getAzione()!=null &&
- idPA!=null && idPA.getIdentificativiErogazione()!=null && idPA.getIdentificativiErogazione().getIdServizio()!=null &&
- idPA.getIdentificativiErogazione().getIdServizio().getAzione()==null) {
- idPA.getIdentificativiErogazione().getIdServizio().setAzione(idServizio.getAzione());
- }
- }
- else {
- // Scenario Asincrono Simmetrico - Risposta
- richiestaApplicativa = new RichiestaApplicativa(soggettoFruitore,
- idModuloInAttesa,identitaPdD,idServizio);
- }
- richiestaApplicativa.setFiltroProprietaPorteApplicative(this.msgContext.getProprietaFiltroPortaApplicativa());
- richiestaApplicativa.setIntegrazione(this.msgContext.getIntegrazione());
- richiestaApplicativa.setProtocol(this.msgContext.getProtocol());
-
-
-
-
-
-
-
-
- // ------------- Controllo funzionalita di protocollo richieste siano compatibili con il protocollo -----------------------------
- try{
- // NOTA: Usare getIntegrationServiceBinding poichè le funzionalità si riferiscono al tipo di integrazione scelta
-
- IProtocolConfiguration protocolConfiguration = protocolFactory.createProtocolConfiguration();
- if(bustaRichiesta!=null && bustaRichiesta.getProfiloDiCollaborazione()!=null &&
- !org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.UNKNOWN.equals(bustaRichiesta.getProfiloDiCollaborazione()) ){
- if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),bustaRichiesta.getProfiloDiCollaborazione())==false){
- throw new Exception("Profilo di Collaborazione ["+bustaRichiesta.getProfiloDiCollaborazione().getEngineValue()+"]");
- }
- }
- // NOTA: FiltroDuplicati, consegnaAffidabile, idCollaborazione, consegnaInOrdine verificato in sbustamento.
- if(bustaRichiesta!=null && bustaRichiesta.getScadenza()!=null){
- if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.SCADENZA)==false){
- throw new Exception(FunzionalitaProtocollo.SCADENZA.getEngineValue());
- }
- }
-
- if(configurazionePdDReader.isGestioneManifestAttachments(pa,protocolFactory)){
- if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.MANIFEST_ATTACHMENTS)==false){
- throw new Exception(FunzionalitaProtocollo.MANIFEST_ATTACHMENTS.getEngineValue());
- }
- }
- }catch(Exception e){
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"protocolli.funzionalita.unsupported");
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(msgDiag.getMessaggio_replaceKeywords("protocolli.funzionalita.unsupported"));
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL);
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.
- setErroreIntegrazione(ErroriIntegrazione.ERRORE_439_FUNZIONALITA_NOT_SUPPORTED_BY_PROTOCOL.
- getErrore439_FunzionalitaNotSupportedByProtocol(e.getMessage(), protocolFactory));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- 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 3 precedenti e' vero
- // Routing stateless
- boolean routingStateless = false;
- try {
-
- if(functionAsRouter == false){
-
- if(propertiesReader.isServerJ2EE()==false){
- // Stateless obbligatorio in server di tipo web (non j2ee)
- oneWayStateless = true;
- sincronoStateless = true;
- asincronoStateless = true;
- }
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione())){
- if(soggettoVirtuale==false) {
- oneWayStateless = configurazionePdDReader.isModalitaStateless(pa,bustaRichiesta.getProfiloDiCollaborazione());
- }
- }
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
- sincronoStateless = configurazionePdDReader.isModalitaStateless(pa,bustaRichiesta.getProfiloDiCollaborazione());
- }else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
- // Le ricevute arrivano solo con connection-new (possibile solo con stateful)
- if( (RuoloBusta.RICEVUTA_RICHIESTA.equals(ruoloBustaRicevuta.toString())==false) &&
- (RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString())==false)){
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) &&
- pd!=null){
- // Risposta
- asincronoStateless = configurazionePdDReader.isModalitaStateless(pd, bustaRichiesta.getProfiloDiCollaborazione());
- }else{
- asincronoStateless = configurazionePdDReader.isModalitaStateless(pa, bustaRichiesta.getProfiloDiCollaborazione());
- }
- }
- }
- oneWayVersione11 = propertiesReader.isGestioneOnewayStateful_1_1() &&
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione())&& !oneWayStateless ;
- if ( oneWayStateless || sincronoStateless || asincronoStateless || oneWayVersione11 ) {
- 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);
- }
- }
- }
-
- }else{
- routingStateless = CostantiConfigurazione.ABILITATO.equals(propertiesReader.getStatelessRouting());
- this.msgContext.getIntegrazione().setGestioneStateless(routingStateless);
-
- if(!routingStateless) {
- if(!openspcoopstate.isUseConnection() &&
- (openspcoopstate instanceof OpenSPCoopStateful)) {
- if(openspcoopstate.resourceReleased()) {
- // inizializzo
- openspcoopstate.setUseConnection(true);
- openspcoopstate.initResource(identitaPdD, this.msgContext.getIdModulo(), idTransazione);
- }
- }
- }
- }
-
- parametriInvioBustaErrore.setOnewayVersione11(oneWayVersione11);
-
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"AnalisiModalitaGestioneStatefulStateless");
- logError(logCore, "Analisi modalita di gestione STATEFUL/STATELESS non riuscita: " + e);
- if (this.msgContext.isGestioneRisposta()) {
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- // UPDATE: Modalita' gestione risposta (Sincrona/Fault/Ricevute...)
- // Per i profili diversi dal sincrono e' possibile impostare dove far ritornare l'errore
- if(
- (bustaRichiesta!=null) &&
- (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())==false) &&
- (oneWayStateless==false) &&
- (sincronoStateless==false) &&
- (asincronoStateless==false) &&
- (routingStateless==false)
- ){
- // New connection puo' essere usata solo se non siamo in modalita stateless
- newConnectionForResponse = configurazionePdDReader.newConnectionForResponse();
- }
- parametriInvioBustaErrore.setNewConnectionForResponse(newConnectionForResponse);
- if( (oneWayStateless==false) && (sincronoStateless==false) && (asincronoStateless==false) && (routingStateless==false)){
- // New connection puo' essere usata solo se non siamo in modalita stateless
- utilizzoIndirizzoTelematico = configurazionePdDReader.isUtilizzoIndirizzoTelematico();
- }
- parametriInvioBustaErrore.setUtilizzoIndirizzoTelematico(utilizzoIndirizzoTelematico);
- /* --------- Rilascio connessione se agisco come router stateless --------------- */
- if(routingStateless){
- openspcoopstate.releaseResource();
- }
- Integrazione infoIntegrazione = new Integrazione();
- infoIntegrazione.setIdModuloInAttesa(this.msgContext.getIdModulo());
- infoIntegrazione.setStateless(portaStateless);
- parametriGenerazioneBustaErrore.setIntegrazione(infoIntegrazione);
-
-
-
-
-
-
-
- // ------------- 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);
- }
- 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;
- }
-
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(erroreIntegrazione);
- OpenSPCoop2Message errorMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
- if(e instanceof HandlerException){
- HandlerException he = (HandlerException) e;
- he.customized(errorMsg);
- }
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
-
-
-
-
- // Validazione Semantica (se modalita router non attiva)
- if(!functionAsRouter){
- /* ----------- Raccolta FlowParameter MTOM / Security ------------ */
- msgDiag.mediumDebug("Raccolta FlowParameter MTOM / Security proprieta...");
- MTOMProcessor mtomProcessor = null;
- try{
-
- // read flow Properties
- flowPropertiesRequest = ricezioneBusteUtils.getFlowPropertiesRequest(requestMessage, bustaRichiesta, configurazionePdDReader,
- ((StateMessage)openspcoopstate.getStatoRichiesta()), msgDiag,logCore,propertiesReader,
- ruoloBustaRicevuta,implementazionePdDMittente,requestInfo, inRequestContext.getPddContext(),pa);
- flowPropertiesResponse = ricezioneBusteUtils.getFlowPropertiesResponse(requestMessage, bustaRichiesta, configurazionePdDReader,
- ((StateMessage)openspcoopstate.getStatoRichiesta()), msgDiag,logCore,propertiesReader,
- ruoloBustaRicevuta,implementazionePdDMittente,requestInfo, inRequestContext.getPddContext(),pa,
- flowPropertiesRequest);
- parametriGenerazioneBustaErrore.setFlowPropertiesResponse(flowPropertiesResponse);
-
- // init message security context
- if(flowPropertiesRequest!=null && flowPropertiesRequest.messageSecurity!=null &&
- flowPropertiesRequest.messageSecurity.getFlowParameters()!=null){
- if(flowPropertiesRequest.messageSecurity.getFlowParameters().size() > 0){
- messageSecurityContext.setIncomingProperties(flowPropertiesRequest.messageSecurity.getFlowParameters());
- }
- }
-
- // init mtom processor
- mtomProcessor = new MTOMProcessor(flowPropertiesRequest.mtom, flowPropertiesRequest.messageSecurity,
- tipoPorta, msgDiag, logCore, pddContext);
-
- msgDiag.mediumDebug("Raccolta FlowParameter MTOM / Security completata con successo");
-
- }catch(Exception e){
- // Emetto log, non ancora emesso
- boolean mittenteEsistente = validatore.getBusta()!=null &&
- (validatore.getBusta().getMittente()!=null || validatore.getBusta().getTipoMittente()!=null);
- msgDiag.emitRicezioneMessaggioModuloBuste(msgDiag, pddContext, !mittenteEsistente);
-
- msgDiag.logErroreGenerico(e,"RaccoltaFlowParameter_MTOM_Security");
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Riscontrato errore durante la lettura delle proprieta' di MTOM / SecurityMessage: "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
- /* ----------- MTOM Processor BeforeSecurity ------------ */
- msgDiag.mediumDebug("MTOM Processor [BeforeSecurity]...");
- try{
- mtomProcessor.mtomBeforeSecurity(requestMessage, flowPropertiesRequest.tipoMessaggio);
- }catch(Exception e){
- // L'errore viene registrato dentro il metodo mtomProcessor.mtomBeforeSecurity
- //msgDiag.logErroreGenerico(e,"MTOMProcessor(BeforeSec-"+mtomProcessor.getMTOMProcessorType()+")");
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Riscontrato errore durante la gestione MTOM(BeforeSec-"+mtomProcessor.getMTOMProcessorType()+"): "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_557_MTOM_PROCESSOR_ERROR));
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.ATTACHMENTS_PROCESSING_REQUEST_FAILED);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
- /* ----------- Validazione Semantica (viene anche applicata la sicurezza) ------------ */
-
- msgDiag.logPersonalizzato("validazioneSemantica.beforeSecurity");
- boolean presenzaRichiestaProtocollo = validatore.validazioneSemantica_beforeMessageSecurity(requestInfo.getProtocolServiceBinding(),false, null, requestInfo);
-
- if(validatore.isRilevatiErroriDuranteValidazioneSemantica()==false){
-
- try{
- if(org.openspcoop2.security.message.engine.WSSUtilities.isNormalizeToSaajImpl(messageSecurityContext)){
- msgDiag.mediumDebug("Normalize to saajImpl");
- //System.out.println("RicezioneBuste.request.normalize");
- requestMessage = requestMessage.normalizeToSaajImpl();
-
- validatore.updateMsg(requestMessage);
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"NormalizeRequestToSaajImpl");
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Riscontrato errore durante la gestione NormalizeRequestToSaajImpl: "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- if(validatore.getErrore_integrationFunctionError()!=null) {
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(validatore.getErrore_integrationFunctionError());
- }
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
- msgDiag.mediumDebug("Lettura informazioni sulla Sicurezza dal Messaggio di richiesta ...");
- presenzaRichiestaProtocollo = validatore.validazioneSemantica_messageSecurity_readSecurityInfo(messageSecurityContext);
- msgDiag.mediumDebug("Lettura informazioni sulla Sicurezza dal Messaggio di richiesta completata con successo");
-
- if(validatore.isRilevatiErroriDuranteValidazioneSemantica()==false){
- if(messageSecurityContext!= null && messageSecurityContext.getIncomingProperties() != null && messageSecurityContext.getIncomingProperties().size() > 0){
-
- String tipoSicurezza = SecurityConstants.convertActionToString(messageSecurityContext.getIncomingProperties());
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_SICUREZZA_MESSAGGIO_RICHIESTA, tipoSicurezza);
- pddContext.addObject(CostantiPdD.TIPO_SICUREZZA_MESSAGGIO_RICHIESTA, tipoSicurezza);
-
- msgDiag.logPersonalizzato("messageSecurity.processamentoRichiestaInCorso");
-
- StringBuilder bfErroreSecurity = new StringBuilder();
- DynamicMapBuilderUtils.injectDynamicMap(bustaRichiesta, requestInfo, pddContext, logCore);
- presenzaRichiestaProtocollo = validatore.validazioneSemantica_messageSecurity_process(messageSecurityContext, bfErroreSecurity,
- transaction!=null ? transaction.getTempiElaborazione() : null,
- true);
-
- if(bfErroreSecurity.length()>0){
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO , bfErroreSecurity.toString() );
- msgDiag.logPersonalizzato("messageSecurity.processamentoRichiestaInErrore");
- }
- else{
- msgDiag.logPersonalizzato("messageSecurity.processamentoRichiestaEffettuato");
- }
- }
- else{
- msgDiag.logPersonalizzato("messageSecurity.processamentoRichiestaDisabilitato");
- }
- }
-
- if(validatore.isRilevatiErroriDuranteValidazioneSemantica()==false){
-
- msgDiag.logPersonalizzato("validazioneSemantica.afterSecurity");
- presenzaRichiestaProtocollo = validatore.validazioneSemantica_afterMessageSecurity(proprietaManifestAttachments, validazioneIDBustaCompleta, requestInfo);
-
- }
- }
- if(presenzaRichiestaProtocollo == false){
- // Emetto log, non ancora emesso
- boolean mittenteEsistente = validatore.getBusta()!=null &&
- (validatore.getBusta().getMittente()!=null || validatore.getBusta().getTipoMittente()!=null);
- msgDiag.emitRicezioneMessaggioModuloBuste(msgDiag, pddContext, !mittenteEsistente);
-
- try{
- msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, validatore.getErrore().getDescrizione(protocolFactory));
- }catch(Exception e){
- logError(logCore, "getDescrizione Error:"+e.getMessage(),e);
- }
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_VALIDAZIONE_BUSTA, "semantica");
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneNonRiuscita");
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(msgDiag.getMessaggio_replaceKeywords(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneNonRiuscita"));
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO));
- if(validatore.getErrore_integrationFunctionError()!=null) {
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(validatore.getErrore_integrationFunctionError());
- }
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,validatore.getEccezioneProcessamentoValidazioneSemantica());
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
- /* ----------- MTOM Processor AfterSecurity ------------ */
- msgDiag.mediumDebug("MTOM Processor [AfterSecurity]...");
- try{
- mtomProcessor.mtomAfterSecurity(requestMessage, flowPropertiesRequest.tipoMessaggio);
- }catch(Exception e){
- // L'errore viene registrato dentro il metodo mtomProcessor.mtomAfterSecurity
- //msgDiag.logErroreGenerico(e,"MTOMProcessor(AfterSec-"+mtomProcessor.getMTOMProcessorType()+")");
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Riscontrato errore durante la gestione MTOM(AfterSec-"+mtomProcessor.getMTOMProcessorType()+"): "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_557_MTOM_PROCESSOR_ERROR));
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.ATTACHMENTS_PROCESSING_REQUEST_FAILED);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
- }
- java.util.List<Eccezione> erroriValidazione = validatore.getEccezioniValidazione();
- java.util.List<Eccezione> erroriProcessamento =validatore.getEccezioniProcessamento();
- IntegrationFunctionError integrationFunctionErrorValidazione = validatore.getErrore_integrationFunctionError();
- SecurityInfo securityInfoRequest = validatore.getSecurityInfo();
-
- boolean isMessaggioErroreProtocollo = validatore.isErroreProtocollo();
- // Se ho un msg Errore e' interessante solo utilizzare mittente/destinatario poiche' il servizio non esistera'
- // La busta e' stata invertita tra mittente e destinatario
- if(isMessaggioErroreProtocollo && idServizio!=null){
- this.cleanDatiServizio(idServizio);
- idServizio.setAzione(null);
- }
- boolean bustaDiServizio = validatore.isBustaDiServizio();
- if(validatore.getInfoServizio()!=null && validatore.getInfoServizio().getIdAccordo()!=null){
- this.msgContext.getProtocol().setIdAccordo(validatore.getInfoServizio().getIdAccordo());
- richiestaApplicativa.setIdAccordo(validatore.getInfoServizio().getIdAccordo());
- }
- else if(infoServizio!=null && infoServizio.getIdAccordo()!=null){
- this.msgContext.getProtocol().setIdAccordo(infoServizio.getIdAccordo());
- richiestaApplicativa.setIdAccordo(infoServizio.getIdAccordo());
- }
-
- // Aggiorno eventuale valore ProfiloCollaborazione dipendete dal profilo (PDC)
- if(bustaRichiesta!=null && this.msgContext.getProtocol()!=null) {
- this.msgContext.getProtocol().setProfiloCollaborazione(bustaRichiesta.getProfiloDiCollaborazione(),bustaRichiesta.getProfiloDiCollaborazioneValue());
- if(
- (bustaRichiesta!=null) &&
- (bustaRichiesta.getVersioneServizio()!=null) &&
- (bustaRichiesta.getVersioneServizio().intValue()>0) &&
- (this.msgContext.getProtocol().getVersioneServizio()!=null) &&
- (bustaRichiesta.getVersioneServizio().intValue()!=this.msgContext.getProtocol().getVersioneServizio().intValue())
- ) {
- this.msgContext.getProtocol().setVersioneServizio(bustaRichiesta.getVersioneServizio());
- }
- }
-
-
-
-
-
- /* ------------ Riconciliazione Mittente per caso intermediario ------------- */
- if(Costanti.MODIPA_PROTOCOL_NAME.equals(protocolFactory.getProtocol()) &&
- pddContext.containsKey(CostantiPdD.INTERMEDIARIO)) {
- Object o = pddContext.get(CostantiPdD.INTERMEDIARIO);
- if(o instanceof IDSoggetto) {
- IDSoggetto intermediario = (IDSoggetto) o;
- if(soggettoFruitore!=null && soggettoFruitore.equals(intermediario) && bustaRichiesta!=null &&
- bustaRichiesta.getMittente()!=null && !bustaRichiesta.getMittente().equals(intermediario.getNome())) {
- soggettoFruitore.setNome(bustaRichiesta.getMittente());
- soggettoFruitore.setCodicePorta(bustaRichiesta.getIdentificativoPortaMittente());
- if(msgDiag!=null) {
- msgDiag.setFruitore(soggettoFruitore);
- }
- if(this.msgContext.getProtocol()!=null) {
- this.msgContext.getProtocol().setFruitore(soggettoFruitore);
- }
- }
- }
- }
-
-
-
-
-
- /* ------------ Riconciliazione ID Messaggio con quello ricevuto nel token oAuth ------------- */
-
- if(Costanti.MODIPA_PROTOCOL_NAME.equals(protocolFactory.getProtocol()) &&
- pddContext.containsKey(org.openspcoop2.core.constants.Costanti.MODI_JTI_REQUEST_ID_UPDATE_DIAGNOSTIC)) {
- Object o = pddContext.get(org.openspcoop2.core.constants.Costanti.MODI_JTI_REQUEST_ID_UPDATE_DIAGNOSTIC);
- if(o instanceof String) {
- msgDiag.updateKeywordIdMessaggioRichiesta((String)o);
- idMessageRequest = (String)o;
- this.msgContext.getProtocol().setIdRichiesta(idMessageRequest);
- }
- }
-
-
-
-
-
-
-
-
- /* -------- Controlli Header di Integrazione ------------- */
-
- IProtocolConfiguration protocolConfig = protocolFactory.createProtocolConfiguration();
- if(
- (infoServizio!=null) &&
- (infoServizio.getIdRiferimentoRichiesta()) &&
- (protocolConfig.isIntegrationInfoRequired(TipoPdD.APPLICATIVA, requestInfo.getProtocolServiceBinding(),FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA))
- ) {
- String riferimentoRichiesta = null;
- if (headerIntegrazioneRichiesta!=null &&
- headerIntegrazioneRichiesta.getBusta() != null && headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio() != null) {
- riferimentoRichiesta = headerIntegrazioneRichiesta.getBusta().getRiferimentoMessaggio();
- }
- if(riferimentoRichiesta==null) {
- StringBuilder bf = new StringBuilder();
- for (int i = 0; i < tipiIntegrazionePA.length; i++) {
- if(i>0) {
- bf.append(",");
- }
- bf.append(tipiIntegrazionePA[i]);
- }
- msgDiag.addKeyword(CostantiPdD.KEY_TIPI_INTEGRAZIONE ,bf.toString() );
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_BUSTE,"riferimentoIdRichiesta.nonFornito");
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(msgDiag.getMessaggio(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_BUSTE,"riferimentoIdRichiesta.nonFornito"));
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
-
- if(this.msgContext.isGestioneRisposta()){
-
- ErroreIntegrazione erroreIntegrazione = ErroriIntegrazione.ERRORE_442_RIFERIMENTO_ID_MESSAGGIO.getErroreIntegrazione();
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.CORRELATION_INFORMATION_NOT_FOUND;
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(erroreIntegrazione);
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore, null);
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
-
- }
- }
-
-
-
-
-
-
- /* ----------- Sbustamento ------------ */
- BustaRawContent<?> headerProtocolloRichiesta = null;
- if(functionAsRouter == false &&
- isMessaggioErroreProtocollo==false &&
- erroriProcessamento.size()==0 && erroriValidazione.size()==0 &&
- bustaDiServizio==false){
- msgDiag.highDebug("Tipo Messaggio Richiesta prima dello sbustamento ["+FaseSbustamento.POST_VALIDAZIONE_SEMANTICA_RISPOSTA
- +"] ["+requestMessage.getClass().getName()+"]");
- org.openspcoop2.protocol.engine.builder.Sbustamento sbustatore = new org.openspcoop2.protocol.engine.builder.Sbustamento(protocolFactory,openspcoopstate.getStatoRichiesta());
- ProtocolMessage protocolMessage = sbustatore.sbustamento(requestMessage,pddContext,
- bustaRichiesta,
- RuoloMessaggio.RICHIESTA,properties.isValidazioneManifestAttachments(),proprietaManifestAttachments,
- FaseSbustamento.POST_VALIDAZIONE_SEMANTICA_RICHIESTA, requestInfo);
- if(protocolMessage!=null) {
- if(protocolMessage.isUseBustaRawContentReadByValidation()) {
- headerProtocolloRichiesta = soapHeaderElement;
- }
- else {
- headerProtocolloRichiesta = protocolMessage.getBustaRawContent();
- }
- requestMessage = protocolMessage.getMessage(); // updated
- }
- msgDiag.highDebug("Tipo Messaggio Richiesta dopo lo sbustamento ["+FaseSbustamento.POST_VALIDAZIONE_SEMANTICA_RISPOSTA
- +"] ["+requestMessage.getClass().getName()+"]");
- }
- else{
- headerProtocolloRichiesta = soapHeaderElement;
- }
-
-
-
-
-
- /* --------------- CorrelazioneApplicativa (Lato PA se definita) -------------------
- * NOTA: Vi e' l'overwrite dell'informazione sulla correlazione applicativa eventualmente letta prima dall'header di trasporto
- * opzione comunuque per default disabitata.
- * --------------- */
- if(functionAsRouter == false &&
- isMessaggioErroreProtocollo==false &&
- erroriProcessamento.size()==0 && erroriValidazione.size()==0 &&
- bustaDiServizio==false &&
- pa!=null && pa.getCorrelazioneApplicativa()!=null){
-
- GestoreCorrelazioneApplicativa gestoreCorrelazioneApplicativa = null;
- try {
- GestoreCorrelazioneApplicativaConfig caConfig = new GestoreCorrelazioneApplicativaConfig();
- caConfig.setState(openspcoopstate.getStatoRichiesta());
- caConfig.setAlog(logCore);
- caConfig.setSoggettoFruitore(soggettoFruitore);
- caConfig.setIdServizio(idServizio);
- caConfig.setBusta(bustaRichiesta);
- caConfig.setServizioApplicativo(servizioApplicativoFruitore);
- caConfig.setProtocolFactory(protocolFactory);
- caConfig.setTransaction(transaction);
- caConfig.setPddContext(pddContext);
- caConfig.setPa(pa);
- gestoreCorrelazioneApplicativa = new GestoreCorrelazioneApplicativa(caConfig);
-
- gestoreCorrelazioneApplicativa.verificaCorrelazione(pa.getCorrelazioneApplicativa(), urlProtocolContext, requestMessage,
- headerIntegrazioneRichiesta, false);
-
- if(gestoreCorrelazioneApplicativa.getIdCorrelazione()!=null)
- correlazioneApplicativa = gestoreCorrelazioneApplicativa.getIdCorrelazione();
-
- }catch(Exception e){
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_CORRELAZIONE_APPLICATIVA_RICHIESTA, "true");
-
- msgDiag.logErroreGenerico(e,"CorrelazioneApplicativa("+bustaRichiesta.getID()+")");
- logError(logCore, "Riscontrato errore durante la correlazione applicativa ["+bustaRichiesta.getID()+"]",e);
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Riscontrato errore durante la correlazione applicativa ["+bustaRichiesta.getID()+"]: "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
-
- if(this.msgContext.isGestioneRisposta()){
-
- ErroreIntegrazione errore = null;
- if(gestoreCorrelazioneApplicativa!=null){
- errore = gestoreCorrelazioneApplicativa.getErrore();
- }
- if(errore==null){
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_529_CORRELAZIONE_APPLICATIVA_RICHIESTA_NON_RIUSCITA);
- }
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(errore);
- 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;
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }
- else{
- // L'informazione nel caso di functionAsRouter o isMessaggioErrore o erroriProcessamento.size()>0 o erroriValidazione.size()>0 o bustaDiServizio non e' significativa
- // Invece nel caso di pa==null o di pa.getCorrelazioneApplicativa==null l'informazione eventualmente cmq letta prima non deve essere usata:
- correlazioneApplicativa = null;
- }
-
-
-
-
-
-
-
-
-
-
-
- /* --------------- Header Integrazione SOAP (aggiornamento/eliminazione) ------------------- */
- if(tipiIntegrazionePA!=null){
-
- if(inRequestPAMessage!=null){
- inRequestPAMessage.setBustaRichiesta(bustaRichiesta);
- inRequestPAMessage.setSoggettoMittente(soggettoFruitore);
- }
-
- for (int i = 0; i < tipiIntegrazionePA.length; i++) {
- try {
- IGestoreIntegrazionePA gestore = null;
- try {
- gestore = (IGestoreIntegrazionePA) pluginLoader.newIntegrazionePortaApplicativa(tipiIntegrazionePA[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 erogazioni (aggiornamento/eliminazione) di tipo ["+ tipiIntegrazionePA[i] + "]: " + e.getMessage());
- }
- if (gestore instanceof IGestoreIntegrazionePASoap) {
- if(propertiesReader.deleteHeaderIntegrazioneRequestPA()){
- ((IGestoreIntegrazionePASoap)gestore).deleteInRequestHeader(inRequestPAMessage);
- }
- else{
- ((IGestoreIntegrazionePASoap)gestore).updateInRequestHeader(inRequestPAMessage, idMessageRequest, servizioApplicativoFruitore, correlazioneApplicativa);
- }
- }
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"HeaderIntegrazione("+tipiIntegrazionePA[i]+")");
-
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore("Riscontrato errore durante la gestione dell'Header di Integrazione("+tipiIntegrazionePA[i]+"): "+e.getMessage());
- tracciamento.registraRichiesta(requestMessage,null,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
-
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_541_GESTIONE_HEADER_INTEGRAZIONE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }
- }
-
-
-
-
-
-
-
-
-
-
- /* ----------- Correlazione nei messaggi diagnostici ---------------*/
- msgDiag.setIdCorrelazioneApplicativa(correlazioneApplicativa);
- if(this.msgContext.getIntegrazione()!=null)
- this.msgContext.getIntegrazione().setIdCorrelazioneApplicativa(correlazioneApplicativa);
- parametriGenerazioneBustaErrore.setMsgDiag(msgDiag);
- parametriInvioBustaErrore.setMsgDiag(msgDiag);
-
-
-
-
-
-
-
-
-
-
-
- /* ----------- Emetto msg diagnostico di ricezione Busta ----------------------*/
- DettaglioEccezione dettaglioEccezione = null;
- boolean mittenteAnonimo = false;
- if(validatore.getBusta()!=null &&
- (validatore.getBusta().getMittente()!=null || validatore.getBusta().getTipoMittente()!=null)){
- mittenteAnonimo = false;
- }
- else{
- mittenteAnonimo = true;
- }
- if(isMessaggioErroreProtocollo){
- if(validatore.isMessaggioErroreIntestazione()){
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO_BUSTA_ERRORE, CostantiPdD.TIPO_MESSAGGIO_BUSTA_ERRORE_INTESTAZIONE);
- }else{
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO_BUSTA_ERRORE, CostantiPdD.TIPO_MESSAGGIO_BUSTA_ERRORE_PROCESSAMENTO);
- }
- msgDiag.logPersonalizzato("ricezioneMessaggioErrore");
-
- // Esamino se e' presente un elemento DettaglioEccezione
- try{
- dettaglioEccezione = XMLUtils.getDettaglioEccezione(logCore,requestMessage);
- }catch(Exception e){
- logError(logCore, "Errore durante l'analisi del dettaglio dell'eccezione",e);
- }
-
- }else{
- msgDiag.emitRicezioneMessaggioModuloBuste(msgDiag, pddContext, mittenteAnonimo);
- }
- /* -------- Profilo di Gestione ------------- */
- String versioneProtocollo = validatore.getProfiloGestione();
- msgDiag.mediumDebug("Profilo di gestione ["+RicezioneBuste.ID_MODULO+"] della busta: "+versioneProtocollo);
- richiestaApplicativa.setProfiloGestione(versioneProtocollo);
- parametriGenerazioneBustaErrore.setProfiloGestione(versioneProtocollo);
- IProtocolVersionManager moduleManager = protocolFactory.createProtocolVersionManager(versioneProtocollo);
- if( !functionAsRouter ){
- // Riferimento messaggio con un profilo sincrono non può essere ricevuto in questo contesto.
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione()) &&
- bustaRichiesta.getRiferimentoMessaggio()!=null &&
- !isMessaggioErroreProtocollo &&// aggiunto !isMessaggioErrore poiche' una busta di eccezione puo' contenenere in effetti il rifMsg
- (ruoloBustaRicevuta==null || !ruoloBustaRicevuta.equals(RuoloBusta.RICHIESTA)) // aggiunto questo controllo perchè i protocolli con id riferimento richiesta hanno il rif messaggio, ma il ruolo rimane RICHIESTA
- ){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.RIFERIMENTO_MESSAGGIO_NON_VALIDO.getErroreCooperazione(), protocolFactory);
- erroriValidazione.add(ecc);
- }
- }
- /* -------- Gestione errori ------------- */
- // Se sono in modalita router: se vi sono errori di processamento/validazione, ritorno subito l'errore.
- // altrimenti: se sono presenti errore di processamento, ritorno subito l'errore.
- msgDiag.mediumDebug("Gestione errori...");
- if( (erroriProcessamento.size()>0) || (functionAsRouter && (erroriValidazione.size()>0)) ){
- StringBuilder errore = new StringBuilder();
- for(int k=0; k<erroriProcessamento.size();k++){
- Eccezione erroreProcessamento = erroriProcessamento.get(k);
- try{
- errore.append("Processamento["+traduttore.toString(erroreProcessamento.getCodiceEccezione(),erroreProcessamento.getSubCodiceEccezione())+"] "+erroriProcessamento.get(k).getDescrizione(protocolFactory)+"\n");
- }catch(Exception e){
- logError(logCore, "getDescrizione Error:"+e.getMessage(),e);
- }
- }
- for(int k=0; k<erroriValidazione.size();k++){
- Eccezione erroreValidazione = erroriValidazione.get(k);
- try{
- errore.append("Validazione["+traduttore.toString(erroreValidazione.getCodiceEccezione(),erroreValidazione.getSubCodiceEccezione())+"] "+erroriValidazione.get(k).getDescrizione(protocolFactory)+"\n");
- }catch(Exception e){
- logError(logCore, "getDescrizione Error:"+e.getMessage(),e);
- }
- }
- msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, errore.toString());
- msgDiag.addKeyword(CostantiPdD.KEY_NUMERO_ECCEZIONI, (erroriProcessamento.size()+erroriValidazione.size())+"" );
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneBusta.bustaNonCorretta");
- // Tracciamento richiesta: non ancora registrata
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(msgDiag.getMessaggio_replaceKeywords(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneBusta.bustaNonCorretta"));
- tracciamento.registraRichiesta(requestMessage,securityInfoRequest,soapHeaderElement,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- if(this.msgContext.isGestioneRisposta()){
- OpenSPCoop2Message errorOpenSPCoopMsg = null;
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- if(erroriProcessamento.size()>0){
- // inserisco in erroriProcessamento anche erroriValidazione
- for(int j=0; j<erroriValidazione.size(); j++){
- erroriProcessamento.add(erroriValidazione.get(j));
- }
- parametriGenerazioneBustaErrore.setError(erroriProcessamento);
- errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,null);
- }else{
- parametriGenerazioneBustaErrore.setError(erroriValidazione);
- if(integrationFunctionErrorValidazione!=null) {
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionErrorValidazione);
- }
- errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
- }
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
- /* -------- Tracciamento ------------- */
- if(this.msgContext.isTracciamentoAbilitato()){
- msgDiag.mediumDebug("Tracciamento busta di richiesta...");
-
- EsitoElaborazioneMessaggioTracciato esitoTraccia = null;
- if( (erroriProcessamento.size()>0) || (erroriValidazione.size()>0) ){
-
- boolean foundErroriGravi = false;
-
- String dettaglioErrore = null;
- StringBuilder eccBuffer = new StringBuilder();
- for(int k = 0; k < erroriProcessamento.size() ; k++){
- Eccezione er = erroriProcessamento.get(k);
- if(k>0)
- eccBuffer.append(" ");
- eccBuffer.append(er.toString(protocolFactory));
- eccBuffer.append(";");
-
- if(moduleManager.isIgnoraEccezioniLivelloNonGrave()){
- if(er.getRilevanza()!=null){
- if(LivelloRilevanza.isEccezioneLivelloGrave(er.getRilevanza())){
- foundErroriGravi = true;
- }
- }else{
- foundErroriGravi = true;
- }
- }else{
- foundErroriGravi = true;
- }
- }
- for(int k = 0; k < erroriValidazione.size() ; k++){
- Eccezione er = erroriValidazione.get(k);
- if(eccBuffer.length()>0)
- eccBuffer.append(" ");
- eccBuffer.append(er.toString(protocolFactory));
- eccBuffer.append(";");
-
- if(moduleManager.isIgnoraEccezioniLivelloNonGrave()){
- if(er.getRilevanza()!=null){
- if(LivelloRilevanza.isEccezioneLivelloGrave(er.getRilevanza())){
- foundErroriGravi = true;
- }
- }else{
- foundErroriGravi = true;
- }
- }else{
- foundErroriGravi = true;
- }
- }
- msgDiag.addKeyword(CostantiPdD.KEY_NUMERO_ECCEZIONI, erroriProcessamento.size()+erroriValidazione.size()+"");
- msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, eccBuffer.toString());
- if(isMessaggioErroreProtocollo){
- dettaglioErrore = msgDiag.getMessaggio_replaceKeywords(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneBustaErrore.listaEccezioniMalformata");
- }else{
- dettaglioErrore = msgDiag.getMessaggio_replaceKeywords(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneBusta.bustaNonCorretta");
- }
- if(foundErroriGravi){
- esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneConErrore(dettaglioErrore);
- }
- else{
- esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneMessaggioRicevuto(dettaglioErrore);
- }
- }
- else{
- esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneMessaggioRicevuto();
- }
-
- // Tracciamento Busta Ricevuta
- tracciamento.registraRichiesta(requestMessage,securityInfoRequest,headerProtocolloRichiesta,bustaRichiesta,esitoTraccia,
- Tracciamento.createLocationString(true,this.msgContext.getSourceLocation()),
- correlazioneApplicativa);
- }
- /* -------- Check Mittente o Destinatario o Servizio conosciuto o identificativo errato ---------------- */
- msgDiag.mediumDebug("Controllo mittente/destinatario/servizio (se sconosciuto, risposta immediata sulla connessione)...");
- for(int k = 0; k < erroriValidazione.size() ; k++){
- Eccezione er = erroriValidazione.get(k);
- if( CodiceErroreCooperazione.isEccezioneMittente(er.getCodiceEccezione()) ||
- CodiceErroreCooperazione.isEccezioneDestinatario(er.getCodiceEccezione()) ||
- CodiceErroreCooperazione.isEccezioneServizio(er.getCodiceEccezione()) ||
- CodiceErroreCooperazione.isEccezioneIdentificativoMessaggio(er.getCodiceEccezione()) ||
- CodiceErroreCooperazione.isEccezioneSicurezzaAutorizzazione(er.getCodiceEccezione()) ){
- if(!functionAsRouter){
- // Può esistere un errore mittente, che non è altro che una segnalazione sull'indirizzo telematico
- if(moduleManager.isEccezioniLivelloInfoAbilitato()){
- if(LivelloRilevanza.INFO.equals(er.getRilevanza()))
- continue;
- }
- }
- StringBuilder eccBuffer = new StringBuilder();
- for(int j = 0; j < erroriValidazione.size() ; j++){
- if(j>0)
- eccBuffer.append("\n");
- eccBuffer.append(erroriValidazione.get(j).toString(protocolFactory));
- }
- msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, eccBuffer.toString());
- msgDiag.addKeyword(CostantiPdD.KEY_NUMERO_ECCEZIONI, erroriValidazione.size()+"" );
- msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO,"validazioneBusta.bustaNonCorretta");
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- List<Eccezione> errs = new ArrayList<>();
- for(int add = 0; add < erroriValidazione.size() ; add++){
- errs.add(erroriValidazione.get(add));
- }
- parametriGenerazioneBustaErrore.setError(errs);
-
- if(integrationFunctionErrorValidazione!=null) {
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionErrorValidazione);
- }
- else if(CodiceErroreCooperazione.isEccezioneSicurezzaAutorizzazione(er.getCodiceEccezione())) {
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.AUTHORIZATION);
- }
- else {
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.INVALID_INTEROPERABILITY_PROFILE_REQUEST);
- }
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- // se il mittente e' sconosciuto non e' possibile utilizzare l'invio su di una nuova connessione,
- // a meno della presenza dell'indirizzo telematico, poiche' non esistera un connettore su cui spedire
- parametriInvioBustaErrore.setUtilizzoIndirizzoTelematico(false);
- parametriInvioBustaErrore.setNewConnectionForResponse(false);
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }
-
-
- /* -------- Check Autorizzazione (Se non ho ricevuto un msg Errore Protocollo)---------------- */
-
- // Guardo se vi sono eccezioni di validazione
- // Se ci sono eccezioni di processamento vengono ritornate prima
- boolean eccezioniValidazioni = false;
- for(int k = 0; k < erroriValidazione.size() ; k++){
- Eccezione er = erroriValidazione.get(k);
- if(!functionAsRouter){
- // Check profilo linee guida 1.0
- // Può esistere un errore, che non è altro che una segnalazione sull'indirizzo telematico
- if(moduleManager.isEccezioniLivelloInfoAbilitato()){
- if(LivelloRilevanza.INFO.equals(er.getRilevanza()))
- continue;
- }
- }
- eccezioniValidazioni = true;
- break;
- }
-
- msgDiag.mediumDebug("Autorizzazione ...");
- String tipoAutorizzazione = null;
- try{
- if(functionAsRouter){
- tipoAutorizzazione = propertiesReader.getTipoAutorizzazioneBuste();
- }
- else{
- if(pa!=null){
- tipoAutorizzazione = configurazionePdDReader.getAutorizzazione(pa);
- }
- // Non ha senso effettuare l'autorizzazione basato sulla PD
- // else{
- // tipoAutorizzazione = configurazionePdDReader.getAutorizzazione(pd);
- // }
- }
- }catch(Exception notFound){
- // ignore
- }
- boolean isAttivoAutorizzazioneBuste = tipoAutorizzazione!=null && !CostantiConfigurazione.AUTORIZZAZIONE_NONE.equalsIgnoreCase(tipoAutorizzazione);
- this.msgContext.getIntegrazione().setTipoAutorizzazione(tipoAutorizzazione);
- if(tipoAutorizzazione!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTORIZZAZIONE, tipoAutorizzazione);
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTORIZZAZIONE_BUSTE, tipoAutorizzazione);
- }
- if(!isAttivoAutorizzazioneBuste){
- msgDiag.logPersonalizzato("autorizzazioneBusteDisabilitata");
- }
- DatiInvocazionePortaApplicativa datiInvocazione = null;
-
- if(isAttivoAutorizzazioneBuste &&
- isMessaggioErroreProtocollo==false &&
- bustaDiServizio==false &&
- eccezioniValidazioni==false){
-
- transaction.getTempiElaborazione().startAutorizzazione();
- try{
- msgDiag.mediumDebug("Autorizzazione di tipo ["+tipoAutorizzazione+"]...");
- // Controllo Autorizzazione
- String identitaMittente = null;
- if(credenziali!=null && !soggettoAutenticato){
- if(!"".equals(credenziali.toString())){
- identitaMittente = credenziali.toString();
- if(identitaMittente.endsWith(" ")){
- identitaMittente = identitaMittente.substring(0, identitaMittente.length()-1);
- }
- }
- }
- String subjectMessageSecurity = null;
- if(messageSecurityContext!=null){
- subjectMessageSecurity = messageSecurityContext.getSubject();
- }
- /* --- Calcolo idServizio e fruitore ---- */
- IDServizio idServizioPerAutorizzazione = getIdServizioPerAutorizzazione(idServizio, soggettoFruitore, functionAsRouter, bustaRichiesta, ruoloBustaRicevuta);
- IDSoggetto idSoggettoMittentePerAutorizzazione = getIDSoggettoMittentePerAutorizzazione(idServizio, soggettoFruitore, functionAsRouter, bustaRichiesta, ruoloBustaRicevuta, supportatoAutenticazioneSoggetti);
- Soggetto soggettoMittentePerAutorizzazione = null;
- if(idSoggettoMittentePerAutorizzazione!=null){
- soggettoMittentePerAutorizzazione = registroServiziReader.getSoggetto(idSoggettoMittentePerAutorizzazione, null, requestInfo);
- }
- String tipoMessaggio = "messaggio";
- if(ruoloBustaRicevuta!=null){
- if(RuoloBusta.RICEVUTA_RICHIESTA.equals(ruoloBustaRicevuta.toString()) || RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- tipoMessaggio = "ricevuta asincrona";
- }
- }
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO_BUSTA, tipoMessaggio);
- if(idSoggettoMittentePerAutorizzazione!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_MITTENTE_E_SERVIZIO_DA_AUTORIZZARE, "fruitore ["+idSoggettoMittentePerAutorizzazione.toString()+"] -> servizio ["+idServizioPerAutorizzazione.toString()+"]");
- }
- else{
- msgDiag.addKeyword(CostantiPdD.KEY_MITTENTE_E_SERVIZIO_DA_AUTORIZZARE, "servizio ["+idServizioPerAutorizzazione.toString()+"]");
- }
- if(identitaMittente!=null)
- msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, " credenzialiMittente "+identitaMittente);
- else
- msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, "");
- if(servizioApplicativoFruitore!=null)
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE_MSG, " identitaServizioApplicativoFruitore ["+servizioApplicativoFruitore+"]");
- else
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE_MSG, "");
- if(subjectMessageSecurity!=null)
- msgDiag.addKeyword(CostantiPdD.KEY_SUBJECT_MESSAGE_SECURITY_MSG, " subjectMessageSecurity ["+subjectMessageSecurity+"]");
- else
- msgDiag.addKeyword(CostantiPdD.KEY_SUBJECT_MESSAGE_SECURITY_MSG, "");
- msgDiag.logPersonalizzato("autorizzazioneBusteInCorso");
-
- IDServizioApplicativo identitaServizioApplicativoFruitore = new IDServizioApplicativo();
- identitaServizioApplicativoFruitore.setNome(servizioApplicativoFruitore);
- identitaServizioApplicativoFruitore.setIdSoggettoProprietario(idSoggettoMittentePerAutorizzazione);
-
- datiInvocazione = new DatiInvocazionePortaApplicativa();
- datiInvocazione.setBusta(bustaRichiesta);
- datiInvocazione.setToken(token);
- datiInvocazione.setPddContext(pddContext);
- datiInvocazione.setInfoConnettoreIngresso(inRequestContext.getConnettore());
- datiInvocazione.setIdServizio(idServizioPerAutorizzazione);
- datiInvocazione.setState(openspcoopstate.getStatoRichiesta());
- datiInvocazione.setCredenzialiPdDMittente(credenziali);
- datiInvocazione.setIdentitaServizioApplicativoFruitore(identitaServizioApplicativoFruitore);
- datiInvocazione.setSubjectServizioApplicativoFruitoreFromMessageSecurityHeader(subjectMessageSecurity);
- datiInvocazione.setIdPA(idPA);
- datiInvocazione.setPa(pa);
- datiInvocazione.setIdPD(idPD);
- datiInvocazione.setPd(pd);
- datiInvocazione.setIdSoggettoFruitore(idSoggettoMittentePerAutorizzazione);
- datiInvocazione.setSoggettoFruitore(soggettoMittentePerAutorizzazione);
- datiInvocazione.setRuoloBusta(ruoloBustaRicevuta);
-
- EsitoAutorizzazionePortaApplicativa esito =
- GestoreAutorizzazione.verificaAutorizzazionePortaApplicativa(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()+")");
- }
- if(esito.isAutorizzato()==false){
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_AUTORIZZAZIONE, "true");
- String descrizioneErrore = null;
- try{
- if(esito.getErroreCooperazione()!=null){
- descrizioneErrore = esito.getErroreCooperazione().getDescrizione(protocolFactory);
- }
- else{
- descrizioneErrore = esito.getErroreIntegrazione().getDescrizione(protocolFactory);
- }
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, descrizioneErrore);
- }catch(Exception e){
- logError(logCore, "getDescrizione Error:"+e.getMessage(),e);
- }
- msgDiag.addKeyword(CostantiPdD.KEY_POSIZIONE_ERRORE, traduttore.toString(esito.getErroreCooperazione().getCodiceErrore()));
- msgDiag.logPersonalizzato("autorizzazioneBusteFallita");
- String errorMsg = "Riscontrato errore durante il processo di Autorizzazione per il messaggio con identificativo ["+bustaRichiesta.getID()+"]: "+descrizioneErrore;
- if(esito.getEccezioneProcessamento()!=null){
- logError(logCore, errorMsg,esito.getEccezioneProcessamento());
- }
- else{
- logError(logCore, errorMsg);
- }
- if(this.msgContext.isGestioneRisposta()){
-
- if(esito.getErrorMessage()!=null) {
- this.msgContext.setMessageResponse(esito.getErrorMessage());
- }
- else {
-
- OpenSPCoop2Message errorOpenSPCoopMsg = null;
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- IntegrationFunctionError integrationFunctionError = esito.getIntegrationFunctionError();
- if(esito.getErroreCooperazione()!=null){
- parametriGenerazioneBustaErrore.setErroreCooperazione(esito.getErroreCooperazione());
- if(CodiceErroreCooperazione.SICUREZZA_AUTORIZZAZIONE_FALLITA.equals(esito.getErroreCooperazione().getCodiceErrore()) ||
- CodiceErroreCooperazione.SICUREZZA_FALSIFICAZIONE_MITTENTE.equals(esito.getErroreCooperazione().getCodiceErrore()) ||
- CodiceErroreCooperazione.SICUREZZA_TOKEN_AUTORIZZAZIONE_FALLITA.equals(esito.getErroreCooperazione().getCodiceErrore())){
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.AUTHORIZATION;
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
- }
- // Else necessario per Certificazione DigitPA tramite Router
- else if(CodiceErroreCooperazione.SERVIZIO_SCONOSCIUTO.equals(esito.getErroreCooperazione().getCodiceErrore())){
- parametriGenerazioneBustaErrore.setErroreCooperazione(
- ErroriCooperazione.SERVIZIO_SCONOSCIUTO.getErroreCooperazione()); // in modo da utilizzare la posizione standard.
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.NOT_FOUND;
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
- }
- else{
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore, esito.getEccezioneProcessamento());
- }
- }
- else{
- parametriGenerazioneBustaErrore.setErroreIntegrazione(esito.getErroreIntegrazione());
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore, esito.getEccezioneProcessamento());
- }
-
- if(esito.getWwwAuthenticateErrorHeader()!=null) {
- errorOpenSPCoopMsg.forceTransportHeader(HttpConstants.AUTHORIZATION_RESPONSE_WWW_AUTHENTICATE, esito.getWwwAuthenticateErrorHeader());
- }
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
-
- }
- }
- openspcoopstate.releaseResource();
- return;
- }else{
- msgDiag.logPersonalizzato("autorizzazioneBusteEffettuata");
- }
- }catch(Exception e){
- CostantiPdD.addKeywordInCache(msgDiag, false,
- pddContext, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTORIZZAZIONE);
- msgDiag.logErroreGenerico(e,"AutorizzazioneMessaggio("+bustaRichiesta.getID()+")");
- logError(logCore, "Riscontrato errore durante il processo di Autorizzazione per il messaggio con identificativo ["+bustaRichiesta.getID()+"]",e);
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_504_AUTORIZZAZIONE));
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- finally {
- transaction.getTempiElaborazione().endAutorizzazione();
- }
- }
-
-
-
-
-
-
-
-
- /* --------------- Verifica tipo soggetto fruitore e tipo servizio rispetto al canale utilizzato
- * (NOTA!: non sportarlo prima senno non si supera eventuali certificazioni) --------------- */
- msgDiag.mediumDebug("Verifica canale utilizzato...");
- List<String> tipiSoggettiSupportatiCanale = protocolFactory.createProtocolConfiguration().getTipiSoggetti();
- List<String> tipiServiziSupportatiCanale = protocolFactory.createProtocolConfiguration().getTipiServizi(requestMessage.getServiceBinding());
- ErroreCooperazione erroreVerificaTipoByProtocol = null;
- // Nota: se qualche informazione e' null verranno segnalati altri errori
- if(soggettoFruitore!=null && soggettoFruitore.getTipo()!=null &&
- !tipiSoggettiSupportatiCanale.contains(soggettoFruitore.getTipo())){
- if(autenticazioneOpzionale && !propertiesReader.isAutorizzazioneBustaAutenticazioneOpzionaleSoggettoFruitoreProfiloInteroperabilitaDifferenteServizioBloccaRichiesta()) {
- msgDiag.logPersonalizzato("protocolli.tipoSoggetto.fruitore.unsupported.warning");
- }
- else {
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL);
- msgDiag.logPersonalizzato("protocolli.tipoSoggetto.fruitore.unsupported");
- erroreVerificaTipoByProtocol = ErroriCooperazione.TIPO_MITTENTE_NON_VALIDO.getErroreCooperazione();
- }
- }
- else if(idServizio!=null && idServizio.getSoggettoErogatore()!=null && idServizio.getSoggettoErogatore().getTipo()!=null &&
- !tipiSoggettiSupportatiCanale.contains(idServizio.getSoggettoErogatore().getTipo())){
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL);
- msgDiag.logPersonalizzato("protocolli.tipoSoggetto.erogatore.unsupported");
- erroreVerificaTipoByProtocol = ErroriCooperazione.TIPO_DESTINATARIO_NON_VALIDO.getErroreCooperazione();
- }
- else if(idServizio!=null && idServizio.getTipo()!=null &&
- !tipiServiziSupportatiCanale.contains(idServizio.getTipo())){
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL);
- msgDiag.logPersonalizzato("protocolli.tipoServizio.unsupported");
- erroreVerificaTipoByProtocol = ErroriCooperazione.TIPO_SERVIZIO_NON_VALIDO.getErroreCooperazione();
- }
- else if(idApplicativoToken!=null && idApplicativoToken.getIdSoggettoProprietario()!=null &&
- idApplicativoToken.getIdSoggettoProprietario().getTipo()!=null &&
- !tipiSoggettiSupportatiCanale.contains(idApplicativoToken.getIdSoggettoProprietario().getTipo())){
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL);
- msgDiag.logPersonalizzato("protocolli.tipoSoggetto.applicativoToken.unsupported");
- erroreVerificaTipoByProtocol = ErroriCooperazione.TIPO_MITTENTE_NON_VALIDO.getErroreCooperazione();
- }
-
- if(erroreVerificaTipoByProtocol!=null){
- if(this.msgContext.isGestioneRisposta()){
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreCooperazione(erroreVerificaTipoByProtocol);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
-
-
-
-
-
- /* ------------ Validazione Contenuti Applicativi e Autorizzazione per Contenuto ------------- */
- ValidazioneContenutiApplicativi validazioneContenutoApplicativoApplicativo = null;
- List<Proprieta> proprietaPorta = null;
- String tipoAutorizzazionePerContenuto = null;
- if(functionAsRouter == false &&
- isMessaggioErroreProtocollo==false &&
- erroriProcessamento.size()==0 && erroriValidazione.size()==0 &&
- bustaDiServizio==false &&
- pa!=null){
- msgDiag.mediumDebug("Controllo abilitazione validazione XSD della richiesta...");
- boolean isRicevutaAsincrona_modalitaAsincrona = false;
- try{
- /* ----------- Identificazione profilo -------------- */
- if( (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) &&
- (bustaRichiesta.getRiferimentoMessaggio()!=null) )
- {
- msgDiag.mediumDebug("Controllo abilitazione validazione XSD della richiesta (check asincrono)...");
- // La validazione non deve essere effettuata se abbiamo una ricevuta asincrona, 'modalita' asincrona'
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- // Richiesta Asincrona
- if(bustaRichiesta.getRiferimentoMessaggio()==null){
- validazioneContenutoApplicativoApplicativo = configurazionePdDReader.getTipoValidazioneContenutoApplicativo(pa,implementazionePdDMittente, true);
- proprietaPorta = pa.getProprietaList();
- tipoAutorizzazionePerContenuto = configurazionePdDReader.getAutorizzazioneContenuto(pa);
- }else{
- // Risposta Asincrona
- if(RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- validazioneContenutoApplicativoApplicativo = configurazionePdDReader.getTipoValidazioneContenutoApplicativo(pd,implementazionePdDMittente, true);
- proprietaPorta = pd.getProprietaList();
- // NOTA: deve essere registrato un tipo di autorizzazione per contenuto busta uguale al tipo di autorizzazione utilizzato lato servizi applicativi.
- tipoAutorizzazionePerContenuto = configurazionePdDReader.getAutorizzazioneContenuto(pd);
- }
- // Ricevuta alla richiesta/risposta.
- else if(RuoloBusta.RICEVUTA_RICHIESTA.equals(ruoloBustaRicevuta.toString()) ||
- RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
- if( configurazionePdDReader.ricevutaAsincronaSimmetricaAbilitata(pd)) {
- isRicevutaAsincrona_modalitaAsincrona = true;
- }else{
- validazioneContenutoApplicativoApplicativo = configurazionePdDReader.getTipoValidazioneContenutoApplicativo(pd,implementazionePdDMittente, true);
- proprietaPorta = pd.getProprietaList();
- // NOTA: deve essere registrato un tipo di autorizzazione per contenuto busta uguale al tipo di autorizzazione utilizzato lato servizi applicativi.
- tipoAutorizzazionePerContenuto = configurazionePdDReader.getAutorizzazioneContenuto(pd);
- }
- }
- }
- }
- // Profilo Asincrono Asimmetrico
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- // Richiesta Asincrona
- if(bustaRichiesta.getRiferimentoMessaggio()==null){
- validazioneContenutoApplicativoApplicativo = configurazionePdDReader.getTipoValidazioneContenutoApplicativo(pa,implementazionePdDMittente, true);
- proprietaPorta = pa.getProprietaList();
- tipoAutorizzazionePerContenuto = configurazionePdDReader.getAutorizzazioneContenuto(pa);
- }else{
- // Risposta Asincrona
- if(RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- validazioneContenutoApplicativoApplicativo = configurazionePdDReader.getTipoValidazioneContenutoApplicativo(pa,implementazionePdDMittente, true);
- proprietaPorta = pa.getProprietaList();
- tipoAutorizzazionePerContenuto = configurazionePdDReader.getAutorizzazioneContenuto(pa);
- }
- // Ricevuta alla richiesta/risposta.
- else if(RuoloBusta.RICEVUTA_RICHIESTA.equals(ruoloBustaRicevuta.toString()) ||
- RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
- if( configurazionePdDReader.ricevutaAsincronaAsimmetricaAbilitata(pd)) {
- isRicevutaAsincrona_modalitaAsincrona = true;
- }else{
- validazioneContenutoApplicativoApplicativo = configurazionePdDReader.getTipoValidazioneContenutoApplicativo(pd,implementazionePdDMittente, true);
- proprietaPorta = pd.getProprietaList();
- // NOTA: deve essere registrato un tipo di autorizzazione per contenuto busta uguale al tipo di autorizzazione utilizzato lato servizi applicativi.
- tipoAutorizzazionePerContenuto = configurazionePdDReader.getAutorizzazioneContenuto(pd);
- }
- }
- }
- }
- // Chiudo eventuali prepared statement, che non voglio eseguire.
- ((StateMessage)openspcoopstate.getStatoRichiesta()).closePreparedStatement();
- }else{
- msgDiag.mediumDebug("Controllo abilitazione validazione dei contenuti applicativi della richiesta...");
- validazioneContenutoApplicativoApplicativo = configurazionePdDReader.getTipoValidazioneContenutoApplicativo(pa,implementazionePdDMittente, true);
- proprietaPorta = pa.getProprietaList();
- tipoAutorizzazionePerContenuto = configurazionePdDReader.getAutorizzazioneContenuto(pa);
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"getTipoValidazione/Autorizzazione ContenutoApplicativo");
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- if(isRicevutaAsincrona_modalitaAsincrona==false){
- 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,"");
- }
-
- // VALIDAZIONE CONTENUTI APPLICATIVI
-
- 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 della richiesta (initValidator)...");
- ValidatoreMessaggiApplicativi validatoreMessaggiApplicativi =
- new ValidatoreMessaggiApplicativi(registroServiziReader,idServizio,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, idServizio, 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(true);
-
- }
-
- }
-
- 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
- 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;
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ex.getErrore());
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,ex);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }catch(Exception ex){
- msgDiag.addKeywordErroreProcessamento(ex);
- logError(logCore, "Riscontrato errore durante la validazione dei contenuti applicativi (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
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_531_VALIDAZIONE_TRAMITE_INTERFACCIA_FALLITA));
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,ex);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }finally{
- transaction.getTempiElaborazione().endValidazioneRichiesta();
- if(binXSD!=null){
- try{
- binXSD.close();
- }catch(Exception e){
- // ignore
- }
- }
- }
- }
- else{
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRichiestaDisabilitata");
- }
- }
-
-
-
- // AUTORIZZAZIONE PER CONTENUTO
- this.msgContext.getIntegrazione().setTipoAutorizzazioneContenuto(tipoAutorizzazionePerContenuto);
- if(tipoAutorizzazionePerContenuto!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_AUTORIZZAZIONE_CONTENUTO, tipoAutorizzazionePerContenuto);
- }
- if (CostantiConfigurazione.AUTORIZZAZIONE_NONE.equalsIgnoreCase(tipoAutorizzazionePerContenuto) == false) {
-
- transaction.getTempiElaborazione().startAutorizzazioneContenuti();
- try {
-
- String identitaMittente = null;
- if(credenziali!=null && !soggettoAutenticato){
- if(!"".equals(credenziali.toString())){
- identitaMittente = credenziali.toString();
- if(identitaMittente.endsWith(" ")){
- identitaMittente = identitaMittente.substring(0, identitaMittente.length()-1);
- }
- }
- }
- String subjectMessageSecurity = null;
- if(messageSecurityContext!=null){
- subjectMessageSecurity = messageSecurityContext.getSubject();
- }
-
- IDServizio idServizioPerAutorizzazione = getIdServizioPerAutorizzazione(idServizio, soggettoFruitore, functionAsRouter, bustaRichiesta, ruoloBustaRicevuta);
- IDSoggetto idSoggettoMittentePerAutorizzazione = getIDSoggettoMittentePerAutorizzazione(idServizio, soggettoFruitore, functionAsRouter, bustaRichiesta, ruoloBustaRicevuta, supportatoAutenticazioneSoggetti);
- Soggetto soggettoMittentePerAutorizzazione = null;
- if(idSoggettoMittentePerAutorizzazione!=null){
- soggettoMittentePerAutorizzazione = registroServiziReader.getSoggetto(idSoggettoMittentePerAutorizzazione, null, requestInfo);
- }
-
- String tipoMessaggio = "messaggio";
- if(RuoloBusta.RICEVUTA_RICHIESTA.equals(ruoloBustaRicevuta.toString()) || RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- tipoMessaggio = "ricevuta asincrona";
- }
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_MESSAGGIO_BUSTA, tipoMessaggio);
- if(idSoggettoMittentePerAutorizzazione!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_MITTENTE_E_SERVIZIO_DA_AUTORIZZARE, "fruitore ["+idSoggettoMittentePerAutorizzazione.toString()+"] -> servizio ["+idServizioPerAutorizzazione.toString()+"]");
- }
- else{
- msgDiag.addKeyword(CostantiPdD.KEY_MITTENTE_E_SERVIZIO_DA_AUTORIZZARE, "servizio ["+idServizioPerAutorizzazione.toString()+"]");
- }
- if(identitaMittente!=null)
- msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, " credenzialiMittente "+identitaMittente);
- else
- msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI_MITTENTE_MSG, "");
- if(servizioApplicativoFruitore!=null)
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE_MSG, " identitaServizioApplicativoFruitore ["+servizioApplicativoFruitore+"]");
- else
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE_MSG, "");
- if(subjectMessageSecurity!=null)
- msgDiag.addKeyword(CostantiPdD.KEY_SUBJECT_MESSAGE_SECURITY_MSG, " subjectMessageSecurity ["+subjectMessageSecurity+"]");
- else
- msgDiag.addKeyword(CostantiPdD.KEY_SUBJECT_MESSAGE_SECURITY_MSG, "");
- msgDiag.logPersonalizzato("autorizzazioneContenutiBusteInCorso");
-
- if(datiInvocazione==null){
-
- IDServizioApplicativo identitaServizioApplicativoFruitore = new IDServizioApplicativo();
- identitaServizioApplicativoFruitore.setNome(servizioApplicativoFruitore);
- identitaServizioApplicativoFruitore.setIdSoggettoProprietario(idSoggettoMittentePerAutorizzazione);
-
- datiInvocazione = new DatiInvocazionePortaApplicativa();
- datiInvocazione.setBusta(bustaRichiesta);
- datiInvocazione.setToken(token);
- datiInvocazione.setPddContext(pddContext);
- datiInvocazione.setInfoConnettoreIngresso(inRequestContext.getConnettore());
- datiInvocazione.setIdServizio(idServizioPerAutorizzazione);
- datiInvocazione.setState(openspcoopstate.getStatoRichiesta());
- datiInvocazione.setCredenzialiPdDMittente(credenziali);
- datiInvocazione.setIdentitaServizioApplicativoFruitore(identitaServizioApplicativoFruitore);
- datiInvocazione.setSubjectServizioApplicativoFruitoreFromMessageSecurityHeader(subjectMessageSecurity);
- datiInvocazione.setIdPA(idPA);
- datiInvocazione.setPa(pa);
- datiInvocazione.setIdPD(idPD);
- datiInvocazione.setPd(pd);
- datiInvocazione.setIdSoggettoFruitore(idSoggettoMittentePerAutorizzazione);
- datiInvocazione.setSoggettoFruitore(soggettoMittentePerAutorizzazione);
- datiInvocazione.setRuoloBusta(ruoloBustaRicevuta);
- }
-
- // Controllo Autorizzazione
- EsitoAutorizzazionePortaApplicativa esito =
- GestoreAutorizzazione.verificaAutorizzazioneContenutoPortaApplicativa(tipoAutorizzazionePerContenuto, 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()+")");
- }
- if(esito.isAutorizzato()==false){
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_AUTORIZZAZIONE, "true");
- try{
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, esito.getErroreCooperazione().getDescrizione(protocolFactory));
- }catch(Exception e){
- logError(logCore, "getDescrizione Error:"+e.getMessage(),e);
- }
- msgDiag.addKeyword(CostantiPdD.KEY_POSIZIONE_ERRORE, traduttore.toString(esito.getErroreCooperazione().getCodiceErrore()));
- msgDiag.logPersonalizzato("autorizzazioneContenutiBusteFallita");
- if(this.msgContext.isGestioneRisposta()){
- OpenSPCoop2Message errorMsg = null;
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreCooperazione(esito.getErroreCooperazione());
- IntegrationFunctionError integrationFunctionError = esito.getIntegrationFunctionError();
- if(CodiceErroreCooperazione.SICUREZZA_AUTORIZZAZIONE_FALLITA.equals(esito.getErroreCooperazione().getCodiceErrore())
- || CodiceErroreCooperazione.SICUREZZA_FALSIFICAZIONE_MITTENTE.equals(esito.getErroreCooperazione().getCodiceErrore())){
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.CONTENT_AUTHORIZATION_DENY;
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- errorMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
- }
- else{
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(integrationFunctionError);
- errorMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,esito.getEccezioneProcessamento());
- }
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
-
- openspcoopstate.releaseResource();
- return;
- }else{
- msgDiag.logPersonalizzato("autorizzazioneContenutiBusteEffettuata");
- }
- }catch(Exception ex){
- CostantiPdD.addKeywordInCache(msgDiag, false,
- pddContext, CostantiPdD.KEY_INFO_IN_CACHE_FUNZIONE_AUTORIZZAZIONE_CONTENUTI);
- msgDiag.logErroreGenerico(ex,"AutorizzazioneContenuto Messaggio("+bustaRichiesta.getID()+")");
- logError(logCore, "Riscontrato errore durante il processo di Autorizzazione del Contenuto per il messaggio con identificativo ["+bustaRichiesta.getID()+"]",ex);
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_542_AUTORIZZAZIONE_CONTENUTO));
- OpenSPCoop2Message errorMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,ex);
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- finally {
- transaction.getTempiElaborazione().endAutorizzazioneContenuti();
- }
- }
- else{
- msgDiag.logPersonalizzato("autorizzazioneContenutiBusteDisabilitata");
- }
- }
-
- Utilities.printFreeMemory("RicezioneBuste - Recupero configurazione per salvataggio risposta in cache ...");
- msgDiag.mediumDebug("Recupero configurazione per salvataggio risposta in cache ...");
- try{
- ResponseCachingConfigurazione responseCachingConfig = null;
- if(pa!=null) {
- responseCachingConfig = configurazionePdDReader.getConfigurazioneResponseCaching(pa);
- }
- else {
- responseCachingConfig = configurazionePdDReader.getConfigurazioneResponseCaching();
- }
- 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");
- logError(logCore, "Calcolo Digest Salvataggio Risposta non riuscito: " + e);
- if (this.msgContext.isGestioneRisposta()) {
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_561_DIGEST_REQUEST));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
- /* ------------- Modalita' di gestione ---------------------------- */
- try {
- if ( oneWayStateless || sincronoStateless || asincronoStateless || oneWayVersione11 || routingStateless ) {
- openspcoopstate = OpenSPCoopState.toStateless(((OpenSPCoopStateful)openspcoopstate), true);
- parametriGenerazioneBustaErrore.setOpenspcoop(openspcoopstate);
- parametriInvioBustaErrore.setOpenspcoop(openspcoopstate);
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"OpenSPCoopState.toStateless");
- logError(logCore, "Creazione stato STATEFUL/STATELESS non riuscita: " + e);
- if (this.msgContext.isGestioneRisposta()) {
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- /* -------- Gestione Richiesta ---------- */
- String tipoMsg = Costanti.INBOX;
- if(functionAsRouter)
- tipoMsg = Costanti.OUTBOX;
- GestoreMessaggi msgRequest = new GestoreMessaggi(openspcoopstate, true, idMessageRequest, tipoMsg,msgDiag, inRequestContext.getPddContext());
- msgRequest.setOneWayVersione11(oneWayVersione11);
- msgRequest.setRoutingStateless(routingStateless);
- RepositoryBuste repositoryBuste = new RepositoryBuste(openspcoopstate.getStatoRichiesta(), true, protocolFactory);
- /* ------------
- Controllo di non aver gia' registrato la richiesta
- (se non l'ho registrata, non significa che non l'abbia gia' ricevuta, puo' darsi che l'abbia ricevuta
- e gia' completata di elaborare.
- Il controllo dell'history in Sbustamento effettuera' poi questo controllo e generera' un eventuale riscontro)
- L'unico caso in cui posso ricevere piu' di una copia di una busta dovrebbe avvenire con profili asincroni in modalita asincrona
- e con profili oneWay. In questo caso se ricevo una busta che sto gia' processando gestisco il caso particolare.
- Negli altri casi emetto anche un messaggio Errore di msg gia ricevuto.
- ------------
- */
- msgDiag.mediumDebug("Controllo presenza del messaggio gia' in gestione...");
- if( (!functionAsRouter) || (!routingStateless) ){
- 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 gestisco il duplicato
- else{
- boolean rispostaModalitaSincrona = org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
- (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) && configurazionePdDReader.ricevutaAsincronaSimmetricaAbilitata(pa)) ||
- (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) && configurazionePdDReader.ricevutaAsincronaAsimmetricaAbilitata(pa));
- // Se la modalita e' sincrona non deve essere possibile ricevere una busta due volte con lo stesso identificativo
- if(rispostaModalitaSincrona){
- msgDiag.addKeyword(CostantiPdD.KEY_PROPRIETARIO_MESSAGGIO, proprietarioMessaggio);
- msgDiag.logPersonalizzato("messaggioInGestione.gestioneSincrona");
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.RICHIESTA_DUPLICATA, "true");
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_537_BUSTA_GIA_RICEVUTA.get537_BustaGiaRicevuta(idMessageRequest));
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.CONFLICT_IN_QUEUE);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,null);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- else{
- // gestione risposta gia presente
- // se profiloTrasmissione=ALPIUUNAVOLTA
- // Se il proprietario attuale e' il modulo consegna contenuti applicativi posso ritornare un soap vuoto, (o riscontro/ricevuta a seconda del profilo)
- // Altrimenti provo ad aspettare un tempo ragionevole e ogni tanto rileggo il proprietario. Non appena raggiunge il modulo consegna contenuti applicativi
- // posso ritornare un soap vuoto (o riscontro/ricevuta a seconda del profilo)
- // altrimenti provo ad aspettare che il messaggio non esista piu' o abbia cmq come proprietario GestoreMessaggi per poi eliminarlo.
- //
- // Se scade il timeout cmq genero un errore di busta gia' in gestione.
- msgDiag.addKeyword(CostantiPdD.KEY_PROPRIETARIO_MESSAGGIO, proprietarioMessaggio);
- msgDiag.logPersonalizzato("messaggioInGestione.gestioneAsincrona");
- long scadenzaWhile = DateManager.getTimeMillis() + propertiesReader.getMsgGiaInProcessamentoAttesaAttiva();
- boolean isErroreMsgGiaRicevuto = true;
- boolean msgAttesaFineProcessamento = false;
- int millisecondiTrascorsi = 0;
- while( DateManager.getTimeMillis() < scadenzaWhile ){
- proprietarioMessaggio = msgRequest.getProprietario(this.msgContext.getIdModulo());
- if( (Inoltro.SENZA_DUPLICATI.equals(bustaRichiesta.getInoltro())) ||
- (this.msgContext.isForzaFiltroDuplicati_msgGiaInProcessamento()) ){
- // Se sono entrato in questo controllo vuole dire che prima esisteva un msg che aveva come proprietario Sbustamento o RicezioneBuste.
- // Quindi se ho raggiunto ConsegnaContenutiApplicativi, GestoreMessaggi o non esiste piu' il messaggio, vuole dire che e' stato elaborato.
- if(ConsegnaContenutiApplicativi.ID_MODULO.equals(proprietarioMessaggio) ||
- TimerGestoreMessaggi.ID_MODULO.equals(proprietarioMessaggio) ||
- (!msgRequest.existsMessage_noCache()) ){
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.RICHIESTA_DUPLICATA, "true");
-
- if(this.msgContext.isGestioneRisposta()){
- this.msgContext.setMessageResponse(ricezioneBusteGeneratoreBustaErrore.generaRispostaMsgGiaRicevuto(!this.msgContext.isForzaFiltroDuplicati_msgGiaInProcessamento(),
- bustaRichiesta,infoIntegrazione, msgDiag, openspcoopstate, logCore, propertiesReader,
- versioneProtocollo,ruoloBustaRicevuta,implementazionePdDMittente,protocolFactory,
- identitaPdD,idTransazione,loader,oneWayVersione11,implementazionePdDMittente,
- tracciamento,
- correlazioneApplicativa,
- pddContext, IntegrationFunctionError.CONFLICT));
- }
- openspcoopstate.releaseResource();
- return;
- }
- if(!msgAttesaFineProcessamento){
- msgDiag.addKeyword(CostantiPdD.KEY_TIMEOUT, ""+(propertiesReader.getMsgGiaInProcessamentoAttesaAttiva()/1000));
- msgDiag.logPersonalizzato("messaggioInGestione.attesaFineProcessamento.filtroDuplicatiAbilitato");
- msgAttesaFineProcessamento = true;
- }
- }else{
- if(!msgAttesaFineProcessamento){
- msgDiag.addKeyword(CostantiPdD.KEY_TIMEOUT, ""+(propertiesReader.getMsgGiaInProcessamentoAttesaAttiva()/1000));
- msgDiag.logPersonalizzato("messaggioInGestione.attesaFineProcessamento.filtroDuplicatiDisabilitato");
- msgAttesaFineProcessamento = true;
- }
- boolean existsMessage = msgRequest.existsMessage_noCache();
- if(existsMessage==false){
- msgDiag.logPersonalizzato("messaggioInGestione.attesaFineProcessamento.filtroDuplicatiDisabilitato.attesaTerminata");
- isErroreMsgGiaRicevuto = false;
- break;
- }
- if(TimerGestoreMessaggi.ID_MODULO.equals(proprietarioMessaggio)){
- msgDiag.logPersonalizzato("messaggioInGestione.attesaFineProcessamento.filtroDuplicatiDisabilitato.forzoEliminazione");
- String msg = msgDiag.getMessaggio_replaceKeywords("messaggioInGestione.attesaFineProcessamento.filtroDuplicatiDisabilitato.forzoEliminazione");
- if(propertiesReader.isMsgGiaInProcessamentoUseLock()) {
- msgRequest._deleteMessageWithLock(msg,propertiesReader.getMsgGiaInProcessamentoAttesaAttiva()-millisecondiTrascorsi,
- propertiesReader.getMsgGiaInProcessamentoCheckInterval());
- }
- else {
- msgRequest.deleteMessageByNow();
- }
- isErroreMsgGiaRicevuto = false;
- break;
- }
- }
- Utilities.sleep(propertiesReader.getMsgGiaInProcessamentoCheckInterval());
- millisecondiTrascorsi = millisecondiTrascorsi + propertiesReader.getMsgGiaInProcessamentoCheckInterval();
- }
- if(isErroreMsgGiaRicevuto){
- msgDiag.logPersonalizzato("messaggioInGestione.attesaFineProcessamento.timeoutScaduto");
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.RICHIESTA_DUPLICATA, "true");
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_537_BUSTA_GIA_RICEVUTA.get537_BustaGiaRicevuta(idMessageRequest));
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.CONFLICT_IN_QUEUE);
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,null);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore,false);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }
- }
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"ControlloPresenzaMessaggioGiaInGestione");
- logError(logCore, "Controllo/gestione presenza messaggio gia in gestione non riuscito",e);
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- openspcoopstate.releaseResource();
- return;
- }
- }
- /* ---------------- Creo sessione di gestione del messaggio ricevuto --------------------- */
- msgDiag.mediumDebug("Registrazione messaggio di richiesta nel RepositoryMessaggi...");
- try{
- msgRequest.registraMessaggio(requestMessage,dataIngressoRichiesta,
- (oneWayStateless || sincronoStateless || asincronoStateless || routingStateless),
- correlazioneApplicativa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"msgRequest.registraMessaggio");
- if(this.msgContext.isGestioneRisposta()){
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_508_SAVE_REQUEST_MSG));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata su fileSystem
- openspcoopstate.releaseResource();
- return;
- }
- /* ---------------- Salvo busta ricevuta (se non l'ho gia' ricevuta) --------------------- */
- msgDiag.mediumDebug("Registrazione busta di richiesta nel RepositoryBuste...");
- try{
- if( (!oneWayStateless) && (!sincronoStateless) && (!asincronoStateless) && (!routingStateless) ){
- if(repositoryBuste.isRegistrata(bustaRichiesta.getID(),tipoMsg)){
- try{
- repositoryBuste.aggiornaBusta(bustaRichiesta,tipoMsg,propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),erroriValidazione);
- repositoryBuste.impostaUtilizzoPdD(bustaRichiesta.getID(),tipoMsg);
- }catch(Exception e){
- if(propertiesReader.isMsgGiaInProcessamentoUseLock()) {
- String causa = "Aggiornamento dati busta con id ["+bustaRichiesta.getID()+"] tipo["+tipoMsg+"] 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(bustaRichiesta.getID(),tipoMsg)){
- repositoryBuste.aggiornaBusta(bustaRichiesta,tipoMsg,propertiesReader.getRepositoryIntervalloScadenzaMessaggi(),erroriValidazione);
- repositoryBuste.impostaUtilizzoPdD(bustaRichiesta.getID(),tipoMsg);
- }
- else{
- repositoryBuste.registraBusta(bustaRichiesta, tipoMsg, erroriValidazione, propertiesReader.getRepositoryIntervalloScadenzaMessaggi());
- }
- }finally{
- try{
- GestoreMessaggi.releaseLock(msgRequest,TimerLock.newInstance(TipoLock._getLockGestioneRepositoryMessaggi()),msgDiag, causa);
- }catch(Exception eUnlock){
- // ignore
- }
- }
- }
- else {
- throw e;
- }
- }
- }
- else{
- repositoryBuste.registraBusta(bustaRichiesta, tipoMsg, erroriValidazione, propertiesReader.getRepositoryIntervalloScadenzaMessaggi());
- }
- repositoryBuste.aggiornaInfoIntegrazione(bustaRichiesta.getID(),tipoMsg,infoIntegrazione);
- }else{
- ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(bustaRichiesta);
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"repositoryBuste.registraBusta");
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata su fileSystem
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
-
- /* ------------ Forward a Sbustamento o InoltroBuste (a seconda se il modulo assume funzione di Router) ------------- */
- try{
- if(functionAsRouter){ // solo stateful
- msgDiag.mediumDebug("Invio messaggio al modulo di InoltroBuste (router)...");
- msgRequest.aggiornaProprietarioMessaggio(org.openspcoop2.pdd.mdb.InoltroBuste.ID_MODULO);
- // Creazione InoltroBuste
- msgDiag.highDebug("Creazione ObjectMessage for send nell'infrastruttura.");
- inoltroMSG.setBusta(bustaRichiesta);
- RichiestaDelegata rd = new RichiestaDelegata(soggettoFruitore);
- rd.setDominio(identitaPdD);
- rd.setIdModuloInAttesa(this.msgContext.getIdModulo());
- rd.setIdServizio(idServizio);
- rd.setIdCorrelazioneApplicativa(correlazioneApplicativa);
- rd.setServizioApplicativo(servizioApplicativoFruitore);
- rd.setIntegrazione(this.msgContext.getIntegrazione());
- rd.setProtocol(this.msgContext.getProtocol());
- inoltroMSG.setRichiestaDelegata(rd);
- inoltroMSG.setImplementazionePdDSoggettoMittente(implementazionePdDMittente);
- inoltroMSG.setImplementazionePdDSoggettoDestinatario(implementazionePdDDestinatario);
- inoltroMSG.setPddContext(inRequestContext.getPddContext());
- // send jms solo x il comportamento stateful
- if (!routingStateless) {
-
- String classTypeNodeSender = null;
- INodeSender nodeSender = null;
- try{
- classTypeNodeSender = className.getNodeSender(propertiesReader.getNodeSender());
- nodeSender = (INodeSender) loader.newInstance(classTypeNodeSender);
- AbstractCore.init(nodeSender, pddContext, protocolFactory);
- }catch(Exception e){
- throw new Exception("Riscontrato errore durante il caricamento della classe ["+classTypeNodeSender+
- "] da utilizzare per la spedizione nell'infrastruttura: "+e.getMessage());
- }
-
- nodeSender.send(inoltroMSG, org.openspcoop2.pdd.mdb.InoltroBuste.ID_MODULO, msgDiag,
- identitaPdD,this.msgContext.getIdModulo(), idMessageRequest, msgRequest);
- }
- }else{
- msgDiag.mediumDebug("Invio messaggio al modulo di Sbustamento...");
- msgRequest.aggiornaProprietarioMessaggio(org.openspcoop2.pdd.mdb.Sbustamento.ID_MODULO);
- // 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);
- }
- }
-
- // setto parametri SbustamentoMessage
- msgDiag.highDebug("Creazione ObjectMessage for send nell'infrastruttura.");
- richiestaApplicativa.setIdCorrelazioneApplicativa(correlazioneApplicativa);
- richiestaApplicativa.setIdentitaServizioApplicativoFruitore(servizioApplicativoFruitore);
- sbustamentoMSG.setRichiestaApplicativa(richiestaApplicativa);
- sbustamentoMSG.setBusta(bustaRichiesta);
- sbustamentoMSG.setErrors(erroriValidazione, integrationFunctionErrorValidazione);
- sbustamentoMSG.setMessaggioErroreProtocollo(isMessaggioErroreProtocollo);
- sbustamentoMSG.setIsBustaDiServizio(bustaDiServizio);
- sbustamentoMSG.setServizioCorrelato(validatore.getServizioCorrelato());
- sbustamentoMSG.setTipoServizioCorrelato(validatore.getTipoServizioCorrelato());
- sbustamentoMSG.setVersioneServizioCorrelato(validatore.getVersioneServizioCorrelato());
- sbustamentoMSG.setRuoloBustaRicevuta(ruoloBustaRicevuta);
- sbustamentoMSG.setOneWayVersione11(oneWayVersione11);
- sbustamentoMSG.setStateless((oneWayStateless || sincronoStateless || asincronoStateless));
- sbustamentoMSG.setImplementazionePdDSoggettoMittente(implementazionePdDMittente);
- sbustamentoMSG.setImplementazionePdDSoggettoDestinatario(implementazionePdDDestinatario);
- sbustamentoMSG.setPddContext(inRequestContext.getPddContext());
- sbustamentoMSG.setDettaglioEccezione(dettaglioEccezione);
-
- if(validatore.getInfoServizio()!=null){
- sbustamentoMSG.setFiltroDuplicatiRichiestoAccordo(Inoltro.SENZA_DUPLICATI.equals(validatore.getInfoServizio().getInoltro()));
- if(StatoFunzionalitaProtocollo.REGISTRO.equals(moduleManager.getConsegnaAffidabile(bustaRichiesta)))
- sbustamentoMSG.setConfermaRicezioneRichiestoAccordo(validatore.getInfoServizio().getConfermaRicezione());
- if(StatoFunzionalitaProtocollo.REGISTRO.equals(moduleManager.getConsegnaInOrdine(bustaRichiesta)))
- sbustamentoMSG.setConsegnaOrdineRichiestoAccordo(validatore.getInfoServizio().getOrdineConsegna());
- }
- // send jms solo x il comportamento stateful
- if (!portaStateless) {
- logDebug(logCore, RicezioneBuste.ID_MODULO + " :eseguo send a sbustamento");
-
- String classTypeNodeSender = null;
- INodeSender nodeSender = null;
- try{
- classTypeNodeSender = className.getNodeSender(propertiesReader.getNodeSender());
- nodeSender = (INodeSender) loader.newInstance(classTypeNodeSender);
- AbstractCore.init(nodeSender, pddContext, protocolFactory);
- }catch(Exception e){
- throw new Exception("Riscontrato errore durante il caricamento della classe ["+classTypeNodeSender+
- "] da utilizzare per la spedizione nell'infrastruttura: "+e.getMessage());
- }
-
- nodeSender.send(sbustamentoMSG, org.openspcoop2.pdd.mdb.Sbustamento.ID_MODULO, msgDiag,
- identitaPdD,this.msgContext.getIdModulo(), idMessageRequest, msgRequest);
- logDebug(logCore, RicezioneBuste.ID_MODULO + " :send a sbustamento eseguita");
- }
- }
- } catch (Exception e) {
- if(functionAsRouter){
- logError(logCore, "Spedizione->InoltroBuste(router) non riuscita",e);
- msgDiag.logErroreGenerico(e,"GenericLib.nodeSender.send(InoltroBuste)");
- }else{
- logError(logCore, "Spedizione->Sbustamento non riuscita",e);
- msgDiag.logErroreGenerico(e,"GenericLib.nodeSender.send(Sbustamento)");
- }
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND));
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata su fileSystem
- openspcoopstate.releaseResource();
- return;
- }
- /* ------------ Commit connessione al DB (RichiestaSalvata) ------------- */
- msgDiag.mediumDebug("Commit delle operazioni per la gestione della richiesta...");
- try{
- openspcoopstate.commit();
- logDebug(logCore, RicezioneBuste.ID_MODULO+ " :RicezioneBuste commit eseguito");
- }catch (Exception e) {
- msgDiag.logErroreGenerico(e,"openspcoopstate.commit()");
- if(this.msgContext.isGestioneRisposta()){
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_506_COMMIT_JDBC));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- }
- msgRequest.deleteMessageFromFileSystem(); // elimino richiesta salvata
- openspcoopstate.releaseResource();
- return;
- }
- // *** GB ***
- if(validatore!=null){
- if(validatore.getValidatoreSintattico()!=null){
- validatore.getValidatoreSintattico().setHeaderSOAP(null);
- }
- validatore.setValidatoreSintattico(null);
- }
- validatore = null;
- // *** GB ***
-
- if ( portaStateless==false && routingStateless== false ) {
- // Aggiornamento cache messaggio
- if(msgRequest!=null)
- msgRequest.addMessaggiIntoCache_readFromTable(RicezioneBuste.ID_MODULO, "richiesta");
- // Aggiornamento cache proprietario messaggio
- if(msgRequest!=null)
- msgRequest.addProprietariIntoCache_readFromTable(RicezioneBuste.ID_MODULO, "richiesta",null,functionAsRouter);
- // Rilascia connessione al DB
- msgDiag.mediumDebug("Commit delle operazioni per la gestione della richiesta effettuato, rilascio della connessione...");
- openspcoopstate.releaseResource();
- }
-
-
-
- /* FIX bug riferimentoMessaggio errato, contiene un id generato nel flusso di risposta (e poi non usato in seguito a errori) invece di quello della richiesta */
- bustaRichiesta = bustaRichiesta.newInstance(); // Per evitare che mi venga modificato da ImbustamentoRisposte (Non ho capito il motivo)
-
-
-
-
-
- /* ------------------------------ STATELESS ROUTING -------------------------------- */
- if(routingStateless){
- ((OpenSPCoopStateless)openspcoopstate).setMessageLib(inoltroMSG);
- ((OpenSPCoopStateless)openspcoopstate).setIDMessaggioSessione(idMessageRequest);
- // Durante le invocazioni non deve essere utilizzata la connessione al database
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(false);
- // InoltroBuste
- InoltroBuste lib = null;
- try{
- lib = new InoltroBuste(logCore);
- EsitoLib esito = lib.onMessage(openspcoopstate);
- if ( esito.getStatoInvocazione() == EsitoLib.OK ||
- esito.getStatoInvocazione() == EsitoLib.ERRORE_GESTITO ){
- msgDiag.mediumDebug("Invocazione libreria InoltroBuste riuscito con esito: "+esito.getStatoInvocazione());
- }
- else if (esito.getStatoInvocazione() == EsitoLib.ERRORE_NON_GESTITO ) {
- throw new Exception("Errore non gestito dalla libreria");
- }
- //else {
- // throw new Exception("Esito libreria sconosciuto");
- //}
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"GestioneRoutingStateless");
- logError(logCore, "Errore Generale durante la gestione del routing stateless: "+e.getMessage(),e);
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- getErroreIntegrazione());
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- // ripristino utilizzo connessione al database
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- }
- /* ------------------------------ STATELESS NO-ROUTING -------------------------------- */
- /* Il ciclo seguente chiama tutte le librerie della gestione MDB di openspcoop, fino a quando non viene restituito un messaggio
- * di libreria destinato a questo modulo oppure fino a che non si verifica un errore.
- * Se la chiamata di libreria ci restituisce uno stato d'errore ed e' stata settata una risposta da inviare al mittente
- * usciamo dal ciclo e gestiamo la risposta esattamente come facciamo se tutte le librerie sono andate a buon fine. Se ci
- * viene restituito un errore senza messaggio di risposta, ne creiamo uno noi (generico) e lo inviamo al mittente
- */
- if (portaStateless) {
-
- ((OpenSPCoopStateless)openspcoopstate).setMessageLib(sbustamentoMSG);
- ((OpenSPCoopStateless)openspcoopstate).setIDMessaggioSessione(idMessageRequest);
- // Durante le invocazioni non deve essere utilizzata la connessione al database
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(false);
- EsitoLib esito = new EsitoLib();
- try {
- ((OpenSPCoopStateless)openspcoopstate).setDestinatarioResponseMsgLib(""); // Verra aggiornato dalle librerie
- while (((OpenSPCoopStateless)openspcoopstate).getDestinatarioResponseMsgLib().startsWith(RicezioneBuste.ID_MODULO) == false) {
- boolean libreriaSbustamento = false;
- if ( ((OpenSPCoopStateless)openspcoopstate).getDestinatarioRequestMsgLib().startsWith(Sbustamento.ID_MODULO) ) {
- libreriaSbustamento = true;
- }
-
- if ( ((OpenSPCoopStateless)openspcoopstate).getDestinatarioResponseMsgLib().startsWith(ImbustamentoRisposte.ID_MODULO) ) {
- /* Verifico che non abbia rilasciato la connessione, se si la riprendo */
- if( propertiesReader.isRinegoziamentoConnessione(bustaRichiesta.getProfiloDiCollaborazione()) && (oneWayStateless || sincronoStateless || asincronoStateless)
- && openspcoopstate.resourceReleased()){
- /* per default disabilitato
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- ((OpenSPCoopStateless)openspcoopstate).initResource(identitaPdD, ImbustamentoRisposte.ID_MODULO, idTransazione);
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(false);
- */
- // update states
- registroServiziReader = registroServiziReader.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
- configurazionePdDReader = configurazionePdDReader.refreshState(registroServiziReader);
- tracciamento.updateState(configurazionePdDReader);
- msgDiag.updateState(configurazionePdDReader);
- }
- }
- esito = chiamaLibreria(((OpenSPCoopStateless)openspcoopstate), logCore);
- if ( oneWayVersione11 && newConnectionForResponse &&
- esito.getStatoInvocazione() == EsitoLib.OK &&
- libreriaSbustamento) {
- ((OpenSPCoopStateless)openspcoopstate).setDestinatarioResponseMsgLib(RicezioneBuste.ID_MODULO);
- // Ho finito di gestire la richiesta in questo caso.
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- openspcoopstate.commit();
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(false);
- }
- if ( esito.getStatoInvocazione() == EsitoLib.ERRORE_GESTITO ) {
- if(oneWayVersione11 && newConnectionForResponse &&
- libreriaSbustamento ){
- // Ho finito di gestire la richiesta in questo caso.
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- openspcoopstate.commit();
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(false);
- }
- break;
- }
-
- else if (esito.getStatoInvocazione() == EsitoLib.ERRORE_NON_GESTITO ) {
- throw new Exception("Errore non gestito dalla libreria");
- }
-
- if(libreriaSbustamento==true){
- // invocazione della libreriaSbustamento terminata, posso rilasciare la connessione se sono in stateless puro
- if( propertiesReader.isRinegoziamentoConnessione(bustaRichiesta.getProfiloDiCollaborazione()) && (oneWayStateless || sincronoStateless || asincronoStateless) ){
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- openspcoopstate.commit();
- openspcoopstate.releaseResource();
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(false);
- }
- }
-
- //else {
- // throw new Exception("Esito libreria sconosciuto");
- //}
- }
- }catch (Exception e) {
- msgDiag.logErroreGenerico(e,"GestioneStateless");
- logError(logCore, "Errore Generale durante la gestione stateless: "+e.getMessage(),e);
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- getErroreIntegrazione());
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- // 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);
- tracciamento.updateState(configurazionePdDReader);
- msgDiag.updateState(configurazionePdDReader);
-
-
- /* ------------ GestioneRisposta non effettuata ------------- */
- msgDiag.mediumDebug("Gestione risposta...");
- if(this.msgContext.isGestioneRisposta()==false){
- if(portaStateless)
- openspcoopstate.releaseResource();
- return;
- }
-
- boolean richiestaRispostaProtocollo = true;
- /* -------Scenario Routing -------------
- * Una busta e 'potenzialmente ricevibile da questo modulo se:
- * - profilo sincrono
- * - impostazione della newConnectionForResponse = false
- * Se ricevo una busta non sincrona e newConnectionForResponse=true ho quindi terminato.
- *
- * Una busta NON DEVE cmq esssre ricevuta.
- * Es. puo' darsi che la PdD finale mandi il sincrono su di una nuova connessione.
- */
-
- if(functionAsRouter){
- if( (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())==false) &&
- newConnectionForResponse ) {
- this.msgContext.setMessageResponse(MessageUtilities.buildEmptyMessage(requestMessage.getFactory(),requestMessage.getMessageType(),MessageRole.RESPONSE));
- return;
- }
- richiestaRispostaProtocollo = false;
- }
- /* -------Scenario Normale -------------
- * Una busta e' potenzialmente ricevibile da questo modulo se:
- * - indTelematicoAbilitato && indTelematicoMittente==null
- * - indTelematicoNonAbilitato
- * - profilo sincrono (e valgono i punti sopra degli indirizzi telematici)
- * - profilo non sincrono && newConnectionForReponse = false
- * Se ricevuo una busta che possiede un indTelMittente e la gestione e' abilitata ho quindi terminato.
- * Se ricevo una busta non sincrona e newConnectionForResponse=true ho quindi terminato.
- *
- * Una busta DEVE essere ricevuta quindi, superati i controlli sopra se:
- * - profilo oneway && confermaRicezione (poiche' se vado su newConnection o indTelematico sono gia' uscito)
- * - profilo sincrono (poiche' se vi e' un indTelematico sono gia' uscito)
- * Quindi una risposta dopo i controlli sopra e' sempre aspettata, a meno di eccezioni:
- * Se ricevo una busta Errore
- * Se ricevo una busta di Servizio
- * Se viene richiesta un profilo OneWay senza confermaRicezione
- */
- else{
- if ( utilizzoIndirizzoTelematico && bustaRichiesta.getIndirizzoMittente()!=null &&
- moduleManager.isUtilizzoIndirizzoSoggettoPresenteBusta() &&
- (!oneWayStateless) && (!sincronoStateless) && (!asincronoStateless) ){
- this.msgContext.setMessageResponse(MessageUtilities.buildEmptyMessage(requestMessage.getFactory(),requestMessage.getMessageType(),MessageRole.RESPONSE));
- if(portaStateless){
- openspcoopstate.releaseResource();
- }
- return;
- } else if( (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())==false) &&
- newConnectionForResponse &&
- (!oneWayStateless) && (!sincronoStateless) && (!asincronoStateless) ) {
- this.msgContext.setMessageResponse(MessageUtilities.buildEmptyMessage(requestMessage.getFactory(),requestMessage.getMessageType(),MessageRole.RESPONSE));
- if(portaStateless){
- openspcoopstate.releaseResource();
- }
- return;
- } else {
- if ( isMessaggioErroreProtocollo ) {
- richiestaRispostaProtocollo = false;
- } else if ( bustaDiServizio ) {
- richiestaRispostaProtocollo = false;
- } else if( StatoFunzionalitaProtocollo.DISABILITATA.equals(moduleManager.getConsegnaAffidabile(bustaRichiesta)) ||
- (propertiesReader.isGestioneRiscontri(implementazionePdDMittente)==false) ||
- (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione()) &&
- (bustaRichiesta.isConfermaRicezione()==false))
- ){
- richiestaRispostaProtocollo = false;
- }
- else if( org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ){
- richiestaRispostaProtocollo = false;
- }
- }
- }
-
-
- /* ---------- Parametri Gestione risposta ------------- */
-
- RicezioneBusteGestioneRisposta parametriGestioneRisposta =
- new RicezioneBusteGestioneRisposta();
- parametriGestioneRisposta.setOpenspcoopstate(openspcoopstate);
-
- parametriGestioneRisposta.setRegistroServiziReader(registroServiziReader);
- parametriGestioneRisposta.setConfigurazionePdDReader(configurazionePdDReader);
- parametriGestioneRisposta.setMsgDiag(msgDiag);
- parametriGestioneRisposta.setTracciamento(tracciamento);
- parametriGestioneRisposta.setLogCore(logCore);
- parametriGestioneRisposta.setPropertiesReader(propertiesReader);
-
- parametriGestioneRisposta.setIdentitaPdD(identitaPdD);
- parametriGestioneRisposta.setIdMessageRequest(idMessageRequest);
-
- parametriGestioneRisposta.setMittenteAnonimo(mittenteAnonimo);
- parametriGestioneRisposta.setImplementazionePdDMittente(implementazionePdDMittente);
-
- parametriGestioneRisposta.setHeaderIntegrazioneRichiesta(headerIntegrazioneRichiesta);
- parametriGestioneRisposta.setTipiIntegrazionePA(tipiIntegrazionePA);
-
- parametriGestioneRisposta.setMsgRequest(msgRequest);
- parametriGestioneRisposta.setRepositoryBuste(repositoryBuste);
- parametriGestioneRisposta.setRequestMessage(requestMessage);
-
- parametriGestioneRisposta.setPortaStateless(portaStateless);
- parametriGestioneRisposta.setOneWayStateless(oneWayStateless);
- parametriGestioneRisposta.setOneWayVers11(oneWayVersione11);
- parametriGestioneRisposta.setSincronoStateless(sincronoStateless);
- parametriGestioneRisposta.setAsincronoStateless(asincronoStateless);
- parametriGestioneRisposta.setRoutingStateless(routingStateless);
-
- parametriGestioneRisposta.setRichiestaRispostaProtocollo(richiestaRispostaProtocollo);
-
- parametriGestioneRisposta.setTipoPorta(tipoPorta);
- parametriGestioneRisposta.setFunctionAsRouter(functionAsRouter);
- parametriGestioneRisposta.setPortaApplicativa(pa);
- parametriGestioneRisposta.setPortaDelegata(pd);
- parametriGestioneRisposta.setSoggettoMittente(soggettoFruitore);
- parametriGestioneRisposta.setIdServizio(idServizio);
- parametriGestioneRisposta.setCorrelazioneApplicativa(correlazioneApplicativa);
-
- parametriGestioneRisposta.setPddContext(inRequestContext.getPddContext());
- parametriGestioneRisposta.setInfoIntegrazione(infoIntegrazione);
- parametriGestioneRisposta.setTransaction(transaction);
-
- parametriGestioneRisposta.setProtocolFactory(protocolFactory);
- parametriGestioneRisposta.setTraduttore(traduttore);
- parametriGestioneRisposta.setModuleManager(moduleManager);
-
- parametriGestioneRisposta.setBustaRichiesta(bustaRichiesta);
- parametriGestioneRisposta.setErroriValidazione(erroriValidazione);
- parametriGestioneRisposta.setVersioneProtocollo(versioneProtocollo);
- parametriGestioneRisposta.setRuoloBustaRicevuta(ruoloBustaRicevuta);
- parametriGestioneRisposta.setReadQualifiedAttribute(readQualifiedAttribute);
- parametriGestioneRisposta.setProprietaManifestAttachments(proprietaManifestAttachments);
-
- parametriGestioneRisposta.setMessageSecurityContext(messageSecurityContext);
- parametriGestioneRisposta.setFlowPropertiesResponse(flowPropertiesResponse);
-
- parametriGestioneRisposta.setParametriGenerazioneBustaErrore(parametriGenerazioneBustaErrore);
- parametriGestioneRisposta.setParametriInvioBustaErrore(parametriInvioBustaErrore);
- parametriGestioneRisposta.setRicezioneBusteGeneratoreBustaErrore(ricezioneBusteGeneratoreBustaErrore);
-
- /* ------------ Lettura parametri del messaggio ricevuto e ValidityCheck -------------- */
- try {
- gestioneRisposta(parametriGestioneRisposta);
- } catch (Exception e) {
- logError(logCore, "ErroreGenerale",e);
- msgDiag.logErroreGenerico(e, "Generale");
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- getErroreIntegrazione());
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
-
- }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){
- String credenzialiFornite = "";
- if(credenziali!=null){
- credenzialiFornite = credenziali.toString();
- }
- msgDiag.addKeyword(CostantiPdD.KEY_CREDENZIALI, credenzialiFornite);
- }
- private void gestioneRisposta(RicezioneBusteGestioneRisposta parametriGestioneRisposta) throws Exception{
- /* ------- Lettura parametri ---------- */
- IOpenSPCoopState openspcoopstate = parametriGestioneRisposta.getOpenspcoopstate();
-
- MsgDiagnostico msgDiag = parametriGestioneRisposta.getMsgDiag();
- Tracciamento tracciamento = parametriGestioneRisposta.getTracciamento();
- Logger logCore = parametriGestioneRisposta.getLogCore();
- OpenSPCoop2Properties propertiesReader = parametriGestioneRisposta.getPropertiesReader();
-
- IDSoggetto identitaPdD = parametriGestioneRisposta.getIdentitaPdD();
- String idMessageRequest = parametriGestioneRisposta.getIdMessageRequest();
-
- boolean mittenteAnonimo = parametriGestioneRisposta.isMittenteAnonimo();
- String implementazionePdDMittente = parametriGestioneRisposta.getImplementazionePdDMittente();
-
- /* --- HeaderIntegrazione headerIntegrazioneRichiesta = parametriGestioneRisposta.getHeaderIntegrazioneRichiesta();
- String[] tipiIntegrazionePA = parametriGestioneRisposta.getTipiIntegrazionePA(); --- */
-
- GestoreMessaggi msgRequest = parametriGestioneRisposta.getMsgRequest();
- RepositoryBuste repositoryBuste = parametriGestioneRisposta.getRepositoryBuste();
- OpenSPCoop2Message requestMessage = parametriGestioneRisposta.getRequestMessage();
-
- boolean portaStateless = parametriGestioneRisposta.isPortaStateless();
- boolean oneWayStateless = parametriGestioneRisposta.isOneWayStateless();
- boolean oneWayVersione11 = parametriGestioneRisposta.isOneWayVers11();
- boolean sincronoStateless = parametriGestioneRisposta.isSincronoStateless();
- boolean asincronoStateless = parametriGestioneRisposta.isAsincronoStateless();
- boolean routingStateless = parametriGestioneRisposta.isRoutingStateless();
-
- boolean richiestaRispostaProtocollo = parametriGestioneRisposta.isRichiestaRispostaProtocollo();
-
- TipoPdD tipoPorta = parametriGestioneRisposta.getTipoPorta();
- boolean functionAsRouter = parametriGestioneRisposta.isFunctionAsRouter();
-
- 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);
- Integrazione infoIntegrazione = parametriGestioneRisposta.getInfoIntegrazione();
- Transaction transaction = parametriGestioneRisposta.getTransaction();
-
- IProtocolFactory<?> protocolFactory = parametriGestioneRisposta.getProtocolFactory();
- ITraduttore traduttore = parametriGestioneRisposta.getTraduttore();
- IProtocolVersionManager moduleManager = parametriGestioneRisposta.getModuleManager();
-
- Busta bustaRichiesta = parametriGestioneRisposta.getBustaRichiesta();
- java.util.List<Eccezione> erroriValidazione = parametriGestioneRisposta.getErroriValidazione();
- String versioneProtocollo = parametriGestioneRisposta.getVersioneProtocollo();
- RuoloBusta ruoloBustaRicevuta = parametriGestioneRisposta.getRuoloBustaRicevuta();
- boolean readQualifiedAttribute = parametriGestioneRisposta.isReadQualifiedAttribute();
- ProprietaManifestAttachments proprietaManifestAttachments = parametriGestioneRisposta.getProprietaManifestAttachments();
-
- PortaApplicativa pa = parametriGestioneRisposta.getPortaApplicativa();
- PortaDelegata pd = parametriGestioneRisposta.getPortaDelegata();
-
- IDSoggetto soggettoFruitore = parametriGestioneRisposta.getSoggettoMittente();
- IDServizio idServizio = parametriGestioneRisposta.getIdServizio();
- String correlazioneApplicativa = parametriGestioneRisposta.getCorrelazioneApplicativa();
-
- MessageSecurityContext messageSecurityContext = parametriGestioneRisposta.getMessageSecurityContext();
- FlowProperties flowPropertiesResponse = parametriGestioneRisposta.getFlowPropertiesResponse();
-
- RicezioneBusteParametriGenerazioneBustaErrore parametriGenerazioneBustaErrore = parametriGestioneRisposta.getParametriGenerazioneBustaErrore();
- RicezioneBusteParametriInvioBustaErrore parametriInvioBustaErrore = parametriGestioneRisposta.getParametriInvioBustaErrore();
- RicezioneBusteGeneratoreBustaErrore ricezioneBusteGeneratoreBustaErrore = parametriGestioneRisposta.getRicezioneBusteGeneratoreBustaErrore();
-
- RegistroServiziManager registroServiziReader = parametriGestioneRisposta.getRegistroServiziReader();
- ConfigurazionePdDManager configurazionePdDReader = parametriGestioneRisposta.getConfigurazionePdDReader();
-
- Loader loader = Loader.getInstance();
- PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
-
- GestoreMessaggi msgResponse = null;
- OpenSPCoop2Message responseMessage = MessageUtilities.buildEmptyMessage(requestMessage.getFactory(),requestMessage.getMessageType(),MessageRole.RESPONSE);
- Busta bustaRisposta = null;
- String idMessaggioSblocco = null;
- boolean contenutoRispostaPresente = false;
- RicezioneBusteMessage ricezioneBusteMSG = null;
- String idCorrelazioneApplicativaRisposta = null;
- try{
- msgDiag.mediumDebug("Attesa/lettura risposta...");
- if ( portaStateless==false && routingStateless== false ) {
-
- String classType = null;
- INodeReceiver nodeReceiver = null;
- try{
- classType = ClassNameProperties.getInstance().getNodeReceiver(propertiesReader.getNodeReceiver());
- nodeReceiver = (INodeReceiver) loader.newInstance(classType);
- AbstractCore.init(nodeReceiver, pddContext, protocolFactory);
- }catch(Exception e){
- throw new Exception("Riscontrato errore durante il caricamento della classe ["+classType+
- "] da utilizzare per la ricezione dall'infrastruttura: "+e.getMessage());
- }
-
- ricezioneBusteMSG = (RicezioneBusteMessage) nodeReceiver.receive(msgDiag,identitaPdD,this.msgContext.getIdModulo(),
- idMessageRequest,propertiesReader.getNodeReceiverTimeoutRicezioneBuste(),
- propertiesReader.getNodeReceiverCheckInterval());
-
- // aggiorno pddContext
- pddContext = ricezioneBusteMSG.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 BUSTE ["+key+"]");
- this.msgContext.getPddContext().addObject(key, pddContext.getObject(key));
- }
- }
- }
- }
- else{
- ricezioneBusteMSG = (RicezioneBusteMessage) openspcoopstate.getMessageLib();
- }
- contenutoRispostaPresente = ricezioneBusteMSG.getBustaRisposta()!=null;
- if( richiestaRispostaProtocollo && (contenutoRispostaPresente==false) ){
- throw new Exception("Risposta attesa e non ritornata: ErroreInterno");
- }
- // Leggo il contenuto
- if(contenutoRispostaPresente){
- bustaRisposta = ricezioneBusteMSG.getBustaRisposta();
- this.msgContext.getProtocol().setIdRisposta(bustaRisposta.getID());
- this.msgContext.getProtocol().setCollaborazione(bustaRisposta.getCollaborazione());
- }else{
- idMessaggioSblocco = ricezioneBusteMSG.getIdMessaggioSblocco();
- }
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"GestioneRisposta("+this.msgContext.getIdModulo()+")");
- logError(logCore, "Gestione risposta ("+this.msgContext.getIdModulo()+") con errore",e);
-
- // per la costruzione dell'errore ho bisogno di una connessione al database
- if ( portaStateless==false && routingStateless== false ) {
- try{
- msgDiag.mediumDebug("Richiesta connessione al database per la gestione della risposta...");
- openspcoopstate.updateResource(idTransazione);
- }catch(Exception eDB){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION),eDB,
- "openspcoopstate.updateDatabaseResource");
- return;
- }
- }
- // In caso di Timeout elimino messaggi di richiesta ancora in processamento.
- if(e instanceof NodeTimeoutException) {
- try{
- msgDiag.logPersonalizzato("timeoutRicezioneRisposta");
- msgRequest.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- openspcoopstate.commit();
- }catch(Exception eDel){
- msgDiag.logErroreGenerico(eDel.getMessage(),"EliminazioneMessaggioScadutoTimeoutRicezioneRisposta");
- }
- }
- // Spedisco errore
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_513_RECEIVE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- // rilascio connessione e ritorno messaggio
- openspcoopstate.releaseResource();
- return;
- }
- // Aggiornamento Informazioni
- if(contenutoRispostaPresente){
- msgDiag.setIdMessaggioRisposta(bustaRisposta.getID());
- msgDiag.addKeywords(bustaRisposta, false);
- }else{
- msgDiag.setIdMessaggioRisposta(idMessaggioSblocco);
- }
- parametriGenerazioneBustaErrore.setMsgDiag(msgDiag);
- parametriInvioBustaErrore.setMsgDiag(msgDiag);
-
- if ( portaStateless==false && routingStateless== false ) {
- /* ------------ Re-ottengo Connessione al DB -------------- */
- try{
- msgDiag.mediumDebug("Richiesta connessione al database per la gestione della risposta...");
- openspcoopstate.updateResource(idTransazione);
- }catch(Exception e){
- setSOAPFault_processamento(IntegrationFunctionError.INTERNAL_RESPONSE_ERROR,logCore,msgDiag,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_505_GET_DB_CONNECTION),e,
- "openspcoopstate.updateDatabaseResource");
- return;
- }
- // MsgResponse
- if(contenutoRispostaPresente){
- msgResponse = new GestoreMessaggi(openspcoopstate, false, bustaRisposta.getID(),Costanti.OUTBOX,msgDiag,pddContext);
- }else{
- msgResponse = new GestoreMessaggi(openspcoopstate, false,idMessaggioSblocco,Costanti.OUTBOX,msgDiag,pddContext);
- }
- //tempiAttraversamentoGestioneMessaggi = msgResponse.getTempiAttraversamentoPdD();
- //dimensioneMessaggiAttraversamentoGestioneMessaggi = msgResponse.getDimensioneMessaggiAttraversamentoPdD();
- /* ------------ Lettura Contenuto Messaggio (mapping in Message) -------------- */
- if(contenutoRispostaPresente || functionAsRouter){
- msgDiag.mediumDebug("Lettura messaggio di risposta...");
- 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();
- }catch(Exception e){
- // Il router potrebbe ricevere il SOAPFault da reinoltrare
- if( (!functionAsRouter) || (contenutoRispostaPresente==true) ){
- msgDiag.logErroreGenerico(e,"msgResponse.getMessage()");
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_511_READ_RESPONSE_MSG));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- }
- }
- }
- else {
- responseMessage = ((OpenSPCoopStateless)openspcoopstate).getRispostaMsg();
- idCorrelazioneApplicativaRisposta = ((OpenSPCoopStateless)openspcoopstate).getIDCorrelazioneApplicativaRisposta();
- if(responseMessage!=null){
- parametriGenerazioneBustaErrore.setParseException(responseMessage.getParseException());
- }
- /*tempiAttraversamentoGestioneMessaggi =
- ((OpenSPCoopStateless) openspcoopstate).getTempiAttraversamentoPDD();
- dimensioneMessaggiAttraversamentoGestioneMessaggi =
- ((OpenSPCoopStateless) openspcoopstate).getDimensioneMessaggiAttraversamentoPDD();*/
- }
- /* ---- Aggiorno informazioni correlazione applicativa risposta ---- */
- parametriGenerazioneBustaErrore.setCorrelazioneApplicativaRisposta(idCorrelazioneApplicativaRisposta);
- parametriInvioBustaErrore.setCorrelazioneApplicativaRisposta(idCorrelazioneApplicativaRisposta);
- msgDiag.setIdCorrelazioneRisposta(idCorrelazioneApplicativaRisposta);
- if(this.msgContext.getIntegrazione()!=null)
- this.msgContext.getIntegrazione().setIdCorrelazioneApplicativaRisposta(idCorrelazioneApplicativaRisposta);
- // Gestione Busta di Risposta
- if(contenutoRispostaPresente){
- /* ----------- Trasmissione ------------------ */
- Trasmissione tras = null;
- if( propertiesReader.isGenerazioneListaTrasmissioni(implementazionePdDMittente)){
- msgDiag.mediumDebug("Impostazione trasmissione nella busta di risposta...");
- // Tracciamento in busta
- tras = new Trasmissione();
-
- // origine
- tras.setOrigine(identitaPdD.getNome());
- tras.setTipoOrigine(identitaPdD.getTipo());
- tras.setIdentificativoPortaOrigine(identitaPdD.getCodicePorta());
-
- // trasmissione
- // Cerco destinatario con identita che sto assumendo (l'origine di quella trasmissione e' la destinazione di questa!)
- // che come mittente non possieda il mittente attuale della busta (senno potrebbe essere il potenziale
- // precedente hop che ha aggiunto una trasmissione da lui a questo hop)
- for(int i=0;i<bustaRichiesta.sizeListaTrasmissioni();i++){
- if( identitaPdD.getTipo().equals(bustaRichiesta.getTrasmissione(i).getTipoDestinazione()) &&
- identitaPdD.getNome().equals(bustaRichiesta.getTrasmissione(i).getDestinazione()) ){
- boolean tipoOrigineValido = true;
- try {
- traduttore.toProtocolOrganizationType(bustaRichiesta.getTrasmissione(i).getTipoOrigine());
- }catch(Exception e) {
- tipoOrigineValido = false;
- }
- if(tipoOrigineValido) {
- tras.setDestinazione(bustaRichiesta.getTrasmissione(i).getOrigine());
- tras.setTipoDestinazione(bustaRichiesta.getTrasmissione(i).getTipoOrigine());
- }
- }
- }
- if(tras.getDestinazione()==null || tras.getTipoDestinazione()==null){
- tras.setDestinazione(bustaRisposta.getDestinatario());
- tras.setTipoDestinazione(bustaRisposta.getTipoDestinatario());
- }
- try{
- String dominio = registroServiziReader.getDominio(new IDSoggetto(tras.getTipoDestinazione(),tras.getDestinazione()), null, protocolFactory, requestInfo);
- tras.setIdentificativoPortaDestinazione(dominio);
- }catch(Exception e){
- // ignore
- }
-
- // oraRegistrazione
- tras.setOraRegistrazione(bustaRisposta.getOraRegistrazione());
- tras.setTempo(propertiesReader.getTipoTempoBusta(implementazionePdDMittente));
-
- bustaRisposta.addTrasmissione(tras);
- }
- /* ------------ Gestione Funzionalita' speciali per Attachments (Manifest) ------------- */
- boolean scartaBody = false;
- if(!functionAsRouter){
- boolean allegaBody = configurazionePdDReader.isAllegaBody(pa);
- if(allegaBody){
- // E' stato effettuato prima l'inserimento del body come allegato.
- // Forzo lo scartamento.
- scartaBody = true;
- }else{
- scartaBody = configurazionePdDReader.isScartaBody(pa);
- }
- }
- /* ------------ Aggiunta eccezioni di livello info riscontrate dalla validazione, se profilo e' lineeGuida1.1 ------------- */
- if(!functionAsRouter){
- if( bustaRisposta.sizeListaEccezioni()==0 && moduleManager.isIgnoraEccezioniLivelloNonGrave()){
- for(int i=0; i<erroriValidazione.size();i++){
- Eccezione ec = erroriValidazione.get(i);
- if(LivelloRilevanza.INFO.equals(ec.getRilevanza())){
- bustaRisposta.addEccezione(ec);
- }
- }
- }
- }
- /* ------------ Imbustamento (Prima della Sicurezza) ------------- */
-
- msgDiag.mediumDebug("Imbustamento della risposta...");
- BustaRawContent<?> headerBustaRisposta = null;
- boolean gestioneManifestRisposta = false;
- Imbustamento imbustatore = null;
- try{
- if(functionAsRouter){
- gestioneManifestRisposta = configurazionePdDReader.isGestioneManifestAttachments();
- }else{
- if( org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) &&
- RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString()) &&
- pd!=null){ // devo generare la ricevuta alla risposta
- gestioneManifestRisposta = configurazionePdDReader.isGestioneManifestAttachments(pd,protocolFactory);
- }else{
- gestioneManifestRisposta = configurazionePdDReader.isGestioneManifestAttachments(pa,protocolFactory);
- }
- }
- imbustatore = new Imbustamento(logCore, protocolFactory,openspcoopstate.getStatoRichiesta());
- if(functionAsRouter &&
- !( identitaPdD.getTipo().equals(bustaRisposta.getTipoMittente()) && identitaPdD.getNome().equals(bustaRisposta.getMittente()) )
- ){
- // Aggiungo trasmissione solo se la busta e' stata generata dalla porta di dominio destinataria della richiesta.
- // Se il mittente e' il router, logicamente la busta sara' un errore generato dal router
- if( propertiesReader.isGenerazioneListaTrasmissioni(implementazionePdDMittente)){
- msgDiag.highDebug("Tipo Messaggio Risposta prima dell'imbustamento ["+responseMessage.getClass().getName()+"]");
- ProtocolMessage protocolMessage = imbustatore.addTrasmissione(responseMessage, tras, readQualifiedAttribute,
- FaseImbustamento.PRIMA_SICUREZZA_MESSAGGIO);
- if(protocolMessage!=null && !protocolMessage.isPhaseUnsupported()) {
- headerBustaRisposta = protocolMessage.getBustaRawContent();
- responseMessage = protocolMessage.getMessage(); // updated
- }
- msgDiag.highDebug("Tipo Messaggio Risposta dopo l'imbustamento ["+responseMessage.getClass().getName()+"]");
- }
- else{
- Validatore v = new Validatore(responseMessage,pddContext,openspcoopstate.getStatoRichiesta(), logCore, protocolFactory);
- headerBustaRisposta = v.getHeaderProtocollo_senzaControlli();
- }
- }else{
- msgDiag.highDebug("Tipo Messaggio Risposta prima dell'imbustamento ["+responseMessage.getClass().getName()+"]");
- ProtocolMessage protocolMessage = imbustatore.imbustamentoRisposta(responseMessage,pddContext,
- bustaRisposta,bustaRichiesta,
- infoIntegrazione,gestioneManifestRisposta,scartaBody,proprietaManifestAttachments,
- FaseImbustamento.PRIMA_SICUREZZA_MESSAGGIO);
- if(protocolMessage!=null && !protocolMessage.isPhaseUnsupported()) {
- headerBustaRisposta = protocolMessage.getBustaRawContent();
- responseMessage = protocolMessage.getMessage(); // updated
- }
- msgDiag.highDebug("Tipo Messaggio Risposta dopo l'imbustamento ["+responseMessage.getClass().getName()+"]");
- }
- }catch(Exception e){
-
- // STATEFUL
- if (msgResponse!=null && !portaStateless && !routingStateless){
- try {
- // Aggiorno proprietario Messaggio
- msgDiag.mediumDebug("Aggiornamento proprietario messaggio risposta ...");
- msgResponse.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- }catch(Throwable t) {
- // ignore
- }
- }
-
- if(functionAsRouter &&
- !( identitaPdD.getTipo().equals(bustaRisposta.getTipoMittente()) && identitaPdD.getNome().equals(bustaRisposta.getMittente()) )
- ){
- msgDiag.logErroreGenerico(e,"imbustatore.pre-security.addTrasmissione(risposta)");
- }else{
- msgDiag.logErroreGenerico(e,"imbustatore.pre-security-imbustamento(risposta)");
- }
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_526_GESTIONE_IMBUSTAMENTO));
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.INTEROPERABILITY_PROFILE_ENVELOPING_RESPONSE_FAILED);
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- if(responseMessage!=null && responseMessage.getParseException()!=null){
- errorOpenSPCoopMsg.setParseException(responseMessage.getParseException());
- }
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
-
- /* ------------ Init MTOM Processor -------------- */
- MTOMProcessor mtomProcessor = null;
- if(!functionAsRouter){
- if(flowPropertiesResponse!=null){
- msgDiag.mediumDebug("init MTOM Processor ...");
- mtomProcessor = new MTOMProcessor(flowPropertiesResponse.mtom, flowPropertiesResponse.messageSecurity,
- tipoPorta, msgDiag, logCore, pddContext);
- }
- }
-
-
-
-
-
- /* ------------ MTOM Processor BeforeSecurity -------------- */
- if(mtomProcessor!=null){
- try{
- mtomProcessor.mtomBeforeSecurity(responseMessage, RuoloMessaggio.RISPOSTA);
- }catch(Exception e){
-
- // STATEFUL
- if (msgResponse!=null && !portaStateless && !routingStateless){
- try {
- // Aggiorno proprietario Messaggio
- msgDiag.mediumDebug("Aggiornamento proprietario messaggio risposta ...");
- msgResponse.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- }catch(Throwable t) {
- // ignore
- }
- }
-
- // L'errore viene registrato dentro il metodo mtomProcessor.mtomBeforeSecurity
- //msgDiag.logErroreGenerico(e,"MTOMProcessor(BeforeSec-"+mtomProcessor.getMTOMProcessorType()+")");
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_557_MTOM_PROCESSOR_ERROR));
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.ATTACHMENTS_PROCESSING_RESPONSE_FAILED);
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- }
- /* ------------ Message-Security -------------- */
- if(!functionAsRouter){
- if(flowPropertiesResponse != null && flowPropertiesResponse.messageSecurity!=null &&
- flowPropertiesResponse.messageSecurity.getFlowParameters() !=null &&
- flowPropertiesResponse.messageSecurity.getFlowParameters().size() > 0){
- try{
- // Aggiorno valori dinamici
- configurazionePdDReader.updateMessageSecurityForSender(flowPropertiesResponse.messageSecurity, logCore, responseMessage, bustaRichiesta, requestInfo, pddContext,
- flowPropertiesResponse.messageSecurityRequest);
-
- messageSecurityContext.setFunctionAsClient(SecurityConstants.SECURITY_CLIENT);
- messageSecurityContext.setOutgoingProperties(flowPropertiesResponse.messageSecurity.getFlowParameters());
-
- String tipoSicurezza = SecurityConstants.convertActionToString(messageSecurityContext.getOutgoingProperties());
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_SICUREZZA_MESSAGGIO_RISPOSTA, tipoSicurezza);
- pddContext.addObject(CostantiPdD.TIPO_SICUREZZA_MESSAGGIO_RISPOSTA, tipoSicurezza);
-
- msgDiag.logPersonalizzato("messageSecurity.processamentoRispostaInCorso");
-
- if(org.openspcoop2.security.message.engine.WSSUtilities.isNormalizeToSaajImpl(messageSecurityContext)){
- msgDiag.mediumDebug("Normalize to saajImpl");
- //System.out.println("RicezioneBuste.response.normalize");
- responseMessage = responseMessage.normalizeToSaajImpl();
- }
-
- DynamicMapBuilderUtils.injectDynamicMap(bustaRichiesta, requestInfo, pddContext, logCore);
- if(messageSecurityContext.processOutgoing(responseMessage,pddContext,
- transaction!=null ? transaction.getTempiElaborazione() : null) == false){
-
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO , messageSecurityContext.getMsgErrore() );
- msgDiag.logPersonalizzato("messageSecurity.processamentoRispostaInErrore");
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreCooperazione(ErroriCooperazione.MESSAGE_SECURITY.
- getErroreMessageSecurity(messageSecurityContext.getMsgErrore(), messageSecurityContext.getCodiceErrore()));
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.MESSAGE_SECURITY_RESPONSE_FAILED);
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- else{
- msgDiag.logPersonalizzato("messageSecurity.processamentoRispostaEffettuato");
- }
-
- }catch(Exception e){
-
- // STATEFUL
- if (msgResponse!=null && !portaStateless && !routingStateless){
- try {
- // Aggiorno proprietario Messaggio
- msgDiag.mediumDebug("Aggiornamento proprietario messaggio risposta ...");
- msgResponse.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- }catch(Throwable t) {
- // ignore
- }
- }
-
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("messageSecurity.processamentoRispostaInErrore");
- logError(logCore, "[MessageSecurityResponse]" + e.getMessage(),e);
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- }
- else{
- msgDiag.logPersonalizzato("messageSecurity.processamentoRispostaDisabilitato");
- }
- }
-
-
-
- /* ------------ MTOM Processor AfterSecurity -------------- */
- if(mtomProcessor!=null){
- try{
- mtomProcessor.mtomAfterSecurity(responseMessage, RuoloMessaggio.RISPOSTA);
- }catch(Exception e){
-
- // STATEFUL
- if (msgResponse!=null && !portaStateless && !routingStateless){
- try {
- // Aggiorno proprietario Messaggio
- msgDiag.mediumDebug("Aggiornamento proprietario messaggio risposta ...");
- msgResponse.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- }catch(Throwable t) {
- // ignore
- }
- }
-
- // L'errore viene registrato dentro il metodo mtomProcessor.mtomAfterSecurity
- //msgDiag.logErroreGenerico(e,"MTOMProcessor(AfterSec-"+mtomProcessor.getMTOMProcessorType()+")");
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_557_MTOM_PROCESSOR_ERROR));
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.ATTACHMENTS_PROCESSING_RESPONSE_FAILED);
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- }
-
-
-
-
-
- /* ------------ Imbustamento (Dopo della Sicurezza) ------------- */
-
- msgDiag.mediumDebug("Imbustamento della risposta dopo la sicurezza...");
- try{
- if(functionAsRouter &&
- !( identitaPdD.getTipo().equals(bustaRisposta.getTipoMittente()) && identitaPdD.getNome().equals(bustaRisposta.getMittente()) )
- ){
- // Aggiungo trasmissione solo se la busta e' stata generata dalla porta di dominio destinataria della richiesta.
- // Se il mittente e' il router, logicamente la busta sara' un errore generato dal router
- if( propertiesReader.isGenerazioneListaTrasmissioni(implementazionePdDMittente)){
- msgDiag.highDebug("Tipo Messaggio Risposta prima dell'imbustamento (after-security) ["+responseMessage.getClass().getName()+"]");
- ProtocolMessage protocolMessage = imbustatore.addTrasmissione(responseMessage, tras, readQualifiedAttribute,
- FaseImbustamento.DOPO_SICUREZZA_MESSAGGIO);
- if(protocolMessage!=null && !protocolMessage.isPhaseUnsupported()) {
- headerBustaRisposta = protocolMessage.getBustaRawContent();
- responseMessage = protocolMessage.getMessage(); // updated
- }
- msgDiag.highDebug("Tipo Messaggio Risposta dopo l'imbustamento (after-security) ["+responseMessage.getClass().getName()+"]");
- }
- // else gia' effettuato nella precedente fase pre-sicurezza
- }else{
- msgDiag.highDebug("Tipo Messaggio Risposta prima dell'imbustamento (after-security) ["+responseMessage.getClass().getName()+"]");
- ProtocolMessage protocolMessage = imbustatore.imbustamentoRisposta(responseMessage,pddContext,
- bustaRisposta,bustaRichiesta,
- infoIntegrazione,gestioneManifestRisposta,scartaBody,proprietaManifestAttachments,
- FaseImbustamento.DOPO_SICUREZZA_MESSAGGIO);
- if(protocolMessage!=null && !protocolMessage.isPhaseUnsupported()) {
- headerBustaRisposta = protocolMessage.getBustaRawContent();
- responseMessage = protocolMessage.getMessage(); // updated
- }
- msgDiag.highDebug("Tipo Messaggio Risposta dopo l'imbustamento (after-security) ["+responseMessage.getClass().getName()+"]");
- }
- }catch(Exception e){
-
- // STATEFUL
- if (msgResponse!=null && !portaStateless && !routingStateless){
- try {
- // Aggiorno proprietario Messaggio
- msgDiag.mediumDebug("Aggiornamento proprietario messaggio risposta ...");
- msgResponse.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- }catch(Throwable t) {
- // ignore
- }
- }
-
- if(functionAsRouter &&
- !( identitaPdD.getTipo().equals(bustaRisposta.getTipoMittente()) && identitaPdD.getNome().equals(bustaRisposta.getMittente()) )
- ){
- msgDiag.logErroreGenerico(e,"imbustatore.after-security.addTrasmissione(risposta)");
- }else{
- msgDiag.logErroreGenerico(e,"imbustatore.after-security-imbustamento(risposta)");
- }
- OpenSPCoop2Message errorOpenSPCoopMsg = null;
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setIntegrationFunctionError(IntegrationFunctionError.INTEROPERABILITY_PROFILE_ENVELOPING_RESPONSE_FAILED);
- if(e!=null && e instanceof ProtocolException && ((ProtocolException)e).isInteroperabilityError() ) {
- parametriGenerazioneBustaErrore.setErroreCooperazione(ErroriCooperazione.ERRORE_GENERICO_PROTOCOLLO_NON_CORRETTO.
- getErroreCooperazione(e.getMessage()));
- errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreValidazione(parametriGenerazioneBustaErrore);
- }
- else {
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_526_GESTIONE_IMBUSTAMENTO));
- errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
- }
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
-
-
-
- /* ---------- Tracciamento Busta Ricevuta ------------- */
- msgDiag.mediumDebug("Tracciamento busta di risposta...");
- if(this.msgContext.isTracciamentoAbilitato()){
- EsitoElaborazioneMessaggioTracciato esitoTraccia =
- EsitoElaborazioneMessaggioTracciato.getEsitoElaborazioneMessaggioInviato();
- SecurityInfo securityInfoResponse = null;
- if(!functionAsRouter){
- if(messageSecurityContext!=null && messageSecurityContext.getDigestReader(responseMessage.getFactory())!=null){
- IValidazioneSemantica validazioneSemantica = protocolFactory.createValidazioneSemantica(openspcoopstate.getStatoRichiesta());
- securityInfoResponse = validazioneSemantica.readSecurityInformation(messageSecurityContext.getDigestReader(responseMessage.getFactory()),responseMessage);
- }
- }
- tracciamento.registraRisposta(responseMessage,securityInfoResponse,headerBustaRisposta,bustaRisposta,esitoTraccia,
- Tracciamento.createLocationString(false,this.msgContext.getSourceLocation()),
- correlazioneApplicativa,idCorrelazioneApplicativaRisposta);
- }
- IValidatoreErrori validatoreErrori = protocolFactory.createValidatoreErrori(openspcoopstate.getStatoRichiesta());
- IProtocolManager protocolManager = protocolFactory.createProtocolManager();
- ProprietaValidazioneErrori pValidazioneErrori = new ProprietaValidazioneErrori();
- pValidazioneErrori.setIgnoraEccezioniNonGravi(protocolManager.isIgnoraEccezioniNonGravi());
- pValidazioneErrori.setVersioneProtocollo(versioneProtocollo);
- if( validatoreErrori.isBustaErrore(bustaRisposta,responseMessage,pValidazioneErrori) ) {
- if(mittenteAnonimo){
- msgDiag.logPersonalizzato("generazioneMessaggioErroreRisposta.mittenteAnonimo");
- }
- else{
- msgDiag.logPersonalizzato("generazioneMessaggioErroreRisposta");
- }
- }else{
- if(mittenteAnonimo){
- msgDiag.logPersonalizzato("generazioneMessaggioRisposta.mittenteAnonimo");
- }
- else{
- msgDiag.logPersonalizzato("generazioneMessaggioRisposta");
- }
- }
-
- /* -------- Elimino accesso daPdD --------- */
- msgDiag.mediumDebug("Eliminazione accesso da PdD...");
- repositoryBuste.eliminaUtilizzoPdDFromOutBox(bustaRisposta.getID());
- }
-
-
-
-
-
-
-
- /* ----- Header Integrazione ------ */
- if(pa!=null){
- msgDiag.mediumDebug("Gestione header di integrazione messaggio di risposta...");
- HeaderIntegrazione headerIntegrazioneRisposta = new HeaderIntegrazione(idTransazione);
- headerIntegrazioneRisposta.setBusta(new HeaderIntegrazioneBusta());
- headerIntegrazioneRisposta.getBusta().setTipoMittente(bustaRichiesta.getTipoMittente());
- headerIntegrazioneRisposta.getBusta().setMittente(bustaRichiesta.getMittente());
- headerIntegrazioneRisposta.getBusta().setTipoDestinatario(bustaRichiesta.getTipoDestinatario());
- headerIntegrazioneRisposta.getBusta().setDestinatario(bustaRichiesta.getDestinatario());
- headerIntegrazioneRisposta.getBusta().setTipoServizio(bustaRichiesta.getTipoServizio());
- headerIntegrazioneRisposta.getBusta().setServizio(bustaRichiesta.getServizio());
- headerIntegrazioneRisposta.getBusta().setVersioneServizio(bustaRichiesta.getVersioneServizio());
- headerIntegrazioneRisposta.getBusta().setAzione(bustaRichiesta.getAzione());
- if(bustaRichiesta.getCollaborazione()!=null) {
- headerIntegrazioneRisposta.getBusta().setIdCollaborazione(bustaRichiesta.getCollaborazione());
- }
- else if(bustaRisposta!=null && bustaRisposta.getCollaborazione()!=null) {
- headerIntegrazioneRisposta.getBusta().setIdCollaborazione(bustaRisposta.getCollaborazione());
- }
- headerIntegrazioneRisposta.getBusta().setID(bustaRichiesta.getID());
- headerIntegrazioneRisposta.getBusta().setProfiloDiCollaborazione(bustaRichiesta.getProfiloDiCollaborazione());
- headerIntegrazioneRisposta.setIdApplicativo(correlazioneApplicativa);
-
- String[] tipiIntegrazionePA_response = null;
- msgDiag.mediumDebug("Header integrazione...");
- if(functionAsRouter ){
- msgDiag.highDebug("Header integrazione (Default gestori integrazione Router)");
- if(RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.containsKey(protocolFactory.getProtocol()))
- tipiIntegrazionePA_response = RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.get(protocolFactory.getProtocol());
- else
- tipiIntegrazionePA_response = RicezioneBuste.defaultGestoriIntegrazionePA;
- }else{
- msgDiag.highDebug("Header integrazione (Gestori integrazione...)");
- if(pa!=null && this.msgContext.isTracciamentoAbilitato()){
- msgDiag.mediumDebug("Lettura header di integrazione...");
- try {
- tipiIntegrazionePA_response = configurazionePdDReader.getTipiIntegrazione(pa);
- } catch (Exception e) {
- msgDiag.logErroreGenerico(e,"configurazionePdDReader.getTipiIntegrazione(pa)");
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE));
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- msgDiag.highDebug("Header integrazione (Gestori integrazione terminato)");
- if (tipiIntegrazionePA_response == null){
- if(RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.containsKey(protocolFactory.getProtocol()))
- tipiIntegrazionePA_response = RicezioneBuste.defaultPerProtocolloGestoreIntegrazionePA.get(protocolFactory.getProtocol());
- else
- tipiIntegrazionePA_response = RicezioneBuste.defaultGestoriIntegrazionePA;
- }
- }
- }
-
- OutResponsePAMessage outResponsePAMessage = new OutResponsePAMessage();
- outResponsePAMessage.setBustaRichiesta(bustaRichiesta);
- outResponsePAMessage.setMessage(responseMessage);
- Map<String, List<String>> propertiesIntegrazioneRisposta = new HashMap<>();
- outResponsePAMessage.setHeaders(propertiesIntegrazioneRisposta);
- outResponsePAMessage.setPortaDelegata(pd);
- outResponsePAMessage.setPortaApplicativa(pa);
- outResponsePAMessage.setSoggettoMittente(soggettoFruitore);
- outResponsePAMessage.setServizio(idServizio);
-
- if(tipiIntegrazionePA_response!=null) {
- for (int i = 0; i < tipiIntegrazionePA_response.length; i++) {
- try {
- IGestoreIntegrazionePA gestore = null;
- try {
- gestore = (IGestoreIntegrazionePA) pluginLoader.newIntegrazionePortaApplicativa(tipiIntegrazionePA_response[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 erogazioni (Risposta Update/Delete) di tipo ["+ tipiIntegrazionePA_response[i] + "]: " + e.getMessage());
- }
- if(gestore instanceof IGestoreIntegrazionePASoap){
- if(propertiesReader.deleteHeaderIntegrazioneResponsePA()){
- if(responseMessage==null){
- responseMessage = MessageUtilities.buildEmptyMessage(requestMessage.getFactory(),requestMessage.getMessageType(), MessageRole.RESPONSE);
- outResponsePAMessage.setMessage(responseMessage);
- }
- gestore.setOutResponseHeader(headerIntegrazioneRisposta,outResponsePAMessage);
- }else{
- // gia effettuato l'update dell'header in InoltroBuste
- }
- }else{
- if(responseMessage==null){
- responseMessage = MessageUtilities.buildEmptyMessage(requestMessage.getFactory(),requestMessage.getMessageType(), MessageRole.RESPONSE);
- outResponsePAMessage.setMessage(responseMessage);
- }
- gestore.setOutResponseHeader(headerIntegrazioneRisposta,outResponsePAMessage);
- }
- } else {
- throw new Exception("Gestore non inizializzato");
- }
-
- } catch (Exception e) {
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_HEADER_INTEGRAZIONE,tipiIntegrazionePA_response[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);
-
- }
-
-
- // STATELESS
- if (oneWayStateless || sincronoStateless || asincronoStateless) {
- msgDiag.mediumDebug("Aggiorno proprietario messaggio richiesta ...");
- try {
- /* Lo stateless che non è onewayVersione11 non salva niente su database */
- //msgRequest.setReadyForDrop(true);
- //msgRequest.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- //repositoryBuste.eliminaBustaStatelessFromInBox(idMessageRequest);
- // Committo modifiche (I commit servono per eventuali modifiche ai duplicati)
- openspcoopstate.commit();
- } catch (Exception e) {
- logError(logCore, "Riscontrato errore durante l'aggiornamento proprietario messaggio", e);
- msgDiag.logErroreGenerico(e, "openspcoopstate.commit(stateless risposta)");
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- getErroreIntegrazione());
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- }
- /* ----- OneWay stateful/stateless ibrido ------ */
- if (oneWayVersione11) {
- msgDiag.mediumDebug("Commit della gestione oneWay stateful/stateless ibrido ...");
- try {
- // Committo modifiche
- openspcoopstate.commit();
- } catch (Exception e) {
- logError(logCore, "Riscontrato errore durante il commit della gestione oneWay stateful/stateless ibrido", e);
- msgDiag.logErroreGenerico(e, "openspcoopstate.commit(oneway1.1 risposta)");
-
- parametriGenerazioneBustaErrore.setBusta(bustaRichiesta);
- parametriGenerazioneBustaErrore.setErroreIntegrazione(ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- getErroreIntegrazione());
-
- OpenSPCoop2Message errorOpenSPCoopMsg = ricezioneBusteGeneratoreBustaErrore.generaBustaErroreProcessamento(parametriGenerazioneBustaErrore,e);
-
- // Nota: la bustaRichiesta e' stata trasformata da generaErroreProcessamento
- parametriInvioBustaErrore.setOpenspcoopMsg(errorOpenSPCoopMsg);
- parametriInvioBustaErrore.setBusta(parametriGenerazioneBustaErrore.getBusta());
- ricezioneBusteGeneratoreBustaErrore.sendRispostaBustaErrore(parametriInvioBustaErrore);
- openspcoopstate.releaseResource();
- return;
- }
- }
- // STATEFUL
- if (!portaStateless && !routingStateless){
- /* ---------- Gestione Transazione Modulo ---------------- */
- // Aggiorno proprietario Messaggio
- msgDiag.mediumDebug("Aggiornamento proprietario messaggio...");
- if(msgResponse!=null) {
- msgResponse.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- }
- // Commit JDBC
- msgDiag.mediumDebug("Commit delle operazioni per la gestione della risposta...");
- openspcoopstate.commit();
- // Aggiornamento cache messaggio
- if(msgResponse!=null)
- msgResponse.addMessaggiIntoCache_readFromTable(RicezioneBuste.ID_MODULO, "risposta");
- // Aggiornamento cache proprietario messaggio
- if(msgResponse!=null)
- msgResponse.addProprietariIntoCache_readFromTable(RicezioneBuste.ID_MODULO, "risposta",idMessageRequest,functionAsRouter);
- }
- // Rilascio connessione al DB
- msgDiag.mediumDebug("Commit delle operazioni per la gestione della richiesta effettuato, rilascio della connessione...");
- openspcoopstate.releaseResource();
- // Risposta
- msgDiag.mediumDebug("Imposto risposta nel context...");
- this.msgContext.setMessageResponse(responseMessage);
- msgDiag.mediumDebug("Lavoro Terminato.");
-
- }
-
-
- private boolean gestioneRispostaAsincrona_checkPresenzaRichiesta(long scadenzaControllo,int checkInterval,Busta bustaRichiesta,
- IOpenSPCoopState openspcoopstate,MsgDiagnostico msgDiag,boolean newConnectionForResponse,
- PdDContext pddContext) throws Exception{
- boolean attendiTerminazioneRichiesta = false;
- IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName((String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
-
- // Puo' potenzialmente essere una ricevuta alla richiesta (new connection for response)
- // o alla risposta (e cmq la risposta l'ho generata io e quindi e' chiaro che ho finito di gestire la richiesta)
- boolean isRicevutaRichiesta = false;
- boolean isRicevutaRisposta = false;
- if(newConnectionForResponse){
- if( ((org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()))
- ||
- (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()))) &&
- bustaRichiesta.getRiferimentoMessaggio()!=null) {
- // Le ricevute hanno il riferimento messaggio anche nelle linee guida!
- ProfiloDiCollaborazione profiloCollaborazione = new ProfiloDiCollaborazione(openspcoopstate.getStatoRichiesta(),protocolFactory);
- isRicevutaRichiesta = profiloCollaborazione.asincrono_isRicevutaRichiesta(bustaRichiesta.getRiferimentoMessaggio());
- isRicevutaRisposta = profiloCollaborazione.asincrono_isRicevutaRisposta(bustaRichiesta.getRiferimentoMessaggio());
- }
- }
- while( DateManager.getTimeMillis() < scadenzaControllo ){
- msgDiag.mediumDebug("RICHIESTA NOW["+DateManager.getTimeMillis()+"] < SCADENZA["+scadenzaControllo+"]");
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- if( (bustaRichiesta.getRiferimentoMessaggio()!=null) ||
- ( bustaRichiesta.getCollaborazione()!=null && (bustaRichiesta.getCollaborazione().equals(bustaRichiesta.getID())==false) )
- ){
- if(
- ( newConnectionForResponse==false )
- ||
- ( (!isRicevutaRichiesta) && (!isRicevutaRisposta) )
- ){
- String idRichiesta = bustaRichiesta.getRiferimentoMessaggio();
- if(idRichiesta==null){
- // LineeGuida non sara' presente il riferimentoMessaggio ma l'elemento collaborazione
- idRichiesta = bustaRichiesta.getCollaborazione();
- }
- GestoreMessaggi checkRichiesta = new GestoreMessaggi(openspcoopstate, false, idRichiesta,Costanti.OUTBOX,msgDiag,pddContext);
- attendiTerminazioneRichiesta = checkRichiesta.existsMessageInProcessamento();
- if(!attendiTerminazioneRichiesta)
- break;
- /*else{
- String proprietario = checkRichiesta.getProprietario(RicezioneBuste.ID_MODULO);
- msgDiag.infoOpenSPCoop("RICHIESTA ID["+bustaRichiesta.getRiferimentoMessaggio()+"] OUTBOX attendiTerminazioneRichiesta["+attendiTerminazioneRichiesta+"] PROPRIETARIO["+proprietario+"]");
- }*/
- }else{
- break; // si tratta di una ricevuta alla richiesta o alla risposta asincrona simmetrica in un caso di newConnectionForResponse
- }
- }else{
- break; // non si tratta di una risposta asincrona simmetrica, ma di una richiesta
- }
- }else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- if( (bustaRichiesta.getRiferimentoMessaggio()!=null) ||
- ( bustaRichiesta.getCollaborazione()!=null && (bustaRichiesta.getCollaborazione().equals(bustaRichiesta.getID())==false) )
- ){
- if(
- ( newConnectionForResponse==false )
- ||
- ( (!isRicevutaRichiesta) && (!isRicevutaRisposta) )
- ){
- String idRichiesta = bustaRichiesta.getRiferimentoMessaggio();
- if(idRichiesta==null){
- // LineeGuida non sara' presente il riferimentoMessaggio ma l'elemento collaborazione
- idRichiesta = bustaRichiesta.getCollaborazione();
- }
- GestoreMessaggi checkRichiesta =
- new GestoreMessaggi(openspcoopstate, false, idRichiesta,Costanti.INBOX,msgDiag,pddContext);
- attendiTerminazioneRichiesta = checkRichiesta.existsMessageInProcessamento();
- if(!attendiTerminazioneRichiesta)
- break;
- /*else{
- String proprietario = checkRichiesta.getProprietario(RicezioneBuste.ID_MODULO);
- msgDiag.infoOpenSPCoop("RICHIESTA ID["+bustaRichiesta.getRiferimentoMessaggio()+"] INBOX attendiTerminazioneRichiesta["+attendiTerminazioneRichiesta+"] PROPRIETARIO["+proprietario+"]");
- }*/
- }else{
- break; // si tratta di una ricevuta alla richiesta o risposta asincrona asimmetrica in un caso di newConnectionForResponse
- }
- }else{
- break; // non si tratta di una richiesta-stato asincrona asimmetrica, ma di una richiesta
- }
- }else{
- break;
- }
- if(bustaRichiesta.getProfiloDiCollaborazione()!=null){
- msgDiag.mediumDebug("Busta di risposta con profilo ["+bustaRichiesta.getProfiloDiCollaborazione().getEngineValue()+"] non gestibile, si attende il completamento" +
- " della gestione della richiesta");
- }
- else{
- msgDiag.mediumDebug("Busta di risposta con profilo null?? non gestibile, si attende il completamento" +
- " della gestione della richiesta");
- }
- Utilities.sleep(checkInterval);
- }
- return attendiTerminazioneRichiesta;
- }
- private boolean gestioneRispostaAsincrona_checkPresenzaRicevutaRichiesta(long scadenzaControllo,int checkInterval,Busta bustaRichiesta,
- IOpenSPCoopState openspcoopstate,MsgDiagnostico msgDiag,boolean newConnectionForResponse,
- PdDContext pddContext)throws Exception{
- boolean attendiTerminazioneRicevutaRichiesta = false;
- IProtocolFactory<?> protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName((String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
-
- // Puo' potenzialmente essere una ricevuta alla richiesta (new connection for response)
- // o alla risposta (e cmq la risposta l'ho generata io e quindi e' chiaro che ho finito di gestire la richiesta)
- boolean isRicevutaRichiesta = false;
- boolean isRicevutaRisposta = false;
- if(newConnectionForResponse){
- if( ((org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()))
- ||
- (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()))) &&
- bustaRichiesta.getRiferimentoMessaggio()!=null) {
- // Le ricevute hanno il riferimento messaggio anche nelle linee guida!
- ProfiloDiCollaborazione profiloCollaborazione = new ProfiloDiCollaborazione(openspcoopstate.getStatoRichiesta(),protocolFactory);
- isRicevutaRichiesta = profiloCollaborazione.asincrono_isRicevutaRichiesta(bustaRichiesta.getRiferimentoMessaggio());
- isRicevutaRisposta = profiloCollaborazione.asincrono_isRicevutaRisposta(bustaRichiesta.getRiferimentoMessaggio());
- }
- }
- while( DateManager.getTimeMillis() < scadenzaControllo ){
- msgDiag.mediumDebug("RICEVUTA RICHIESTA NOW["+DateManager.getTimeMillis()+"] < SCADENZA["+scadenzaControllo+"]");
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- if( (bustaRichiesta.getRiferimentoMessaggio()!=null) ||
- ( bustaRichiesta.getCollaborazione()!=null && (bustaRichiesta.getCollaborazione().equals(bustaRichiesta.getID())==false) )
- ){
- if(
- ( newConnectionForResponse==false )
- ||
- ( (!isRicevutaRichiesta) && (!isRicevutaRisposta) )
- ){
- String idRicevutaRichiesta = bustaRichiesta.getRiferimentoMessaggio();
- if(idRicevutaRichiesta==null){
- // LineeGuida non sara' presente il riferimentoMessaggio ma l'elemento collaborazione
- idRicevutaRichiesta = bustaRichiesta.getCollaborazione();
- }
- GestoreMessaggi checkRicevutaRichiesta = new GestoreMessaggi(openspcoopstate, false, idRicevutaRichiesta,Costanti.INBOX,msgDiag,pddContext);
- attendiTerminazioneRicevutaRichiesta = checkRicevutaRichiesta.existsMessageInProcessamentoByReference();
- if(!attendiTerminazioneRicevutaRichiesta)
- break;
- /*else{
- String proprietario = checkRicevutaRichiesta.getProprietario(RicezioneBuste.ID_MODULO);
- msgDiag.infoOpenSPCoop("RICHIESTA ID["+bustaRichiesta.getRiferimentoMessaggio()+"] INBOX attendiTerminazioneRichiesta["+attendiTerminazioneRicevutaRichiesta+"] PROPRIETARIO["+proprietario+"]");
- }*/
- }else{
- break; // si tratta di una ricevuta alla richiesta o risposta asincrona simmetrica in un caso di newConnectionForResponse
- }
- }else{
- break; // non si tratta di una risposta asincrona simmetrica, ma di una richiesa
- }
- }else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
- if( (bustaRichiesta.getRiferimentoMessaggio()!=null) ||
- ( bustaRichiesta.getCollaborazione()!=null && (bustaRichiesta.getCollaborazione().equals(bustaRichiesta.getID())==false) )
- ){
- if(
- ( newConnectionForResponse==false )
- ||
- ( (!isRicevutaRichiesta) && (!isRicevutaRisposta) )
- ){
- String idRicevutaRichiesta = bustaRichiesta.getRiferimentoMessaggio();
- if(idRicevutaRichiesta==null){
- // LineeGuida non sara' presente il riferimentoMessaggio ma l'elemento collaborazione
- idRicevutaRichiesta = bustaRichiesta.getCollaborazione();
- }
- GestoreMessaggi checkRicevutaRichiesta = new GestoreMessaggi(openspcoopstate, false, idRicevutaRichiesta,Costanti.OUTBOX,msgDiag,pddContext);
- attendiTerminazioneRicevutaRichiesta = checkRicevutaRichiesta.existsMessageInProcessamentoByReference();
- if(!attendiTerminazioneRicevutaRichiesta)
- break;
- /*else{
- String proprietario = checkRicevutaRichiesta.getProprietario(RicezioneBuste.ID_MODULO);
- msgDiag.infoOpenSPCoop("RICHIESTA ID["+bustaRichiesta.getRiferimentoMessaggio()+"] OUTBOX attendiTerminazioneRichiesta["+attendiTerminazioneRicevutaRichiesta+"] PROPRIETARIO["+proprietario+"]");
- }*/
- }else{
- break; // si tratta di una ricevuta alla richiesta o risposta asincrona asimmetrica in un caso di newConnectionForResponse
- }
- }else{
- break; // non si tratta di una richiesta-stato asincrona asimmetrica, ma di una richiesta
- }
- }else{
- break;
- }
- if(bustaRichiesta.getProfiloDiCollaborazione()!=null)
- msgDiag.mediumDebug("Busta di risposta con profilo ["+bustaRichiesta.getProfiloDiCollaborazione().getEngineValue()+"] non gestibile, si attende il completamento" +
- " della gestione della ricevuta alla richiesta");
- else{
- msgDiag.mediumDebug("Busta di risposta con profilo null??? non gestibile, si attende il completamento" +
- " della gestione della ricevuta alla richiesta");
- }
- Utilities.sleep(checkInterval);
- }
- return attendiTerminazioneRicevutaRichiesta;
- }
-
- private EsitoLib chiamaLibreria(OpenSPCoopStateless openspcoopstate, Logger log) throws OpenSPCoopStateException, GenericLibException{
- /* --------------------------- SBUSTAMENTO ------------------------ */
- if (openspcoopstate.getDestinatarioRequestMsgLib().startsWith(Sbustamento.ID_MODULO)) {
- Sbustamento lib = new Sbustamento(log);
- return lib.onMessage(openspcoopstate);
- }
- /* ---------------------------ConsegnaContenutiApplicativi----------------------------- */
- else if (openspcoopstate.getDestinatarioRequestMsgLib().startsWith(ConsegnaContenutiApplicativi.ID_MODULO)) {
- ConsegnaContenutiApplicativi lib = new ConsegnaContenutiApplicativi(log);
- EsitoLib result = lib.onMessage(openspcoopstate);
- if (result.getStatoInvocazione()==EsitoLib.OK) openspcoopstate.setDestinatarioRequestMsgLib("");
- return result;
- }
- /* ---------------------- -ImbustamentoRisposte ------------------------------- */
- else if (openspcoopstate.getDestinatarioResponseMsgLib().startsWith(ImbustamentoRisposte.ID_MODULO)) {
- ImbustamentoRisposte lib = new ImbustamentoRisposte(log);
- return lib.onMessage(openspcoopstate);
- }
- /* --------------------- -InoltroRisposte----------------------------- */
- else if (openspcoopstate.getDestinatarioResponseMsgLib().startsWith(InoltroRisposte.ID_MODULO)) {
- InoltroRisposte lib = new InoltroRisposte(log);
- return lib.onMessage(openspcoopstate);
- }
- else throw new OpenSPCoopStateException(RicezioneBuste.ID_MODULO + ".chiamaLibreria: nome libreria non valido");
- }
-
-
- private IDServizio getIdServizioPerAutorizzazione(IDServizio idServizio,IDSoggetto soggettoFruitore,
- boolean functionAsRouter,Busta bustaRichiesta,RuoloBusta ruoloBustaRicevuta) throws Exception{
- IDSoggetto soggettoDestinatarioPerAutorizzazione = null;
- if(functionAsRouter){
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }else if (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ){
- if(ruoloBustaRicevuta==null){
- // router
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }
- else{
- if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString()) || RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }else{
- if(soggettoFruitore==null){
- throw new Exception("Soggetto fruitore non identificato");
- }
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }
- }
- }else if (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ){
- if(ruoloBustaRicevuta==null){
- // router
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }
- else{
- if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString()) || RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }else{
- if(soggettoFruitore==null){
- throw new Exception("Soggetto fruitore non identificato");
- }
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }
- }
- }else{
- soggettoDestinatarioPerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }
- IDServizio idServizioPerAutorizzazione = IDServizioFactory.getInstance().
- getIDServizioFromValues(idServizio.getTipo(), idServizio.getNome(), soggettoDestinatarioPerAutorizzazione, idServizio.getVersione());
- idServizioPerAutorizzazione.setUriAccordoServizioParteComune(idServizio.getUriAccordoServizioParteComune());
- idServizioPerAutorizzazione.setAzione(idServizio.getAzione());
- idServizioPerAutorizzazione.setTipologia(idServizio.getTipologia());
-
- return idServizioPerAutorizzazione;
- }
-
- private IDSoggetto getIDSoggettoMittentePerAutorizzazione(IDServizio idServizio,IDSoggetto soggettoFruitore,
- boolean functionAsRouter,Busta bustaRichiesta,RuoloBusta ruoloBustaRicevuta, boolean supportatoAutenticazioneSoggetti) throws Exception{
- IDSoggetto soggettoMittentePerAutorizzazione = null;
- if(functionAsRouter){
- if(soggettoFruitore==null){
- throw new Exception("Soggetto fruitore non identificato");
- }
- soggettoMittentePerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
- if(soggettoFruitore==null){
- if(supportatoAutenticazioneSoggetti){
- return null; // invocazione anonima
- }else{
- throw new Exception("Soggetto fruitore non identificato");
- }
- }
- soggettoMittentePerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }else if (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ){
- if(ruoloBustaRicevuta==null){
- if(soggettoFruitore==null){
- if(supportatoAutenticazioneSoggetti){
- return null; // invocazione anonima
- }else{
- throw new Exception("Soggetto fruitore non identificato");
- }
- }
- soggettoMittentePerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }else{
- if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString()) || RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- if(soggettoFruitore==null){
- if(supportatoAutenticazioneSoggetti){
- return null; // invocazione anonima
- }else{
- throw new Exception("Soggetto fruitore non identificato");
- }
- }
- soggettoMittentePerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }else{
- soggettoMittentePerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }
- }
- }else if (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ){
- if(ruoloBustaRicevuta==null){
- if(soggettoFruitore==null){
- if(supportatoAutenticazioneSoggetti){
- return null; // invocazione anonima
- }else{
- throw new Exception("Soggetto fruitore non identificato");
- }
- }
- soggettoMittentePerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }else{
- if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString()) || RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
- if(soggettoFruitore==null){
- if(supportatoAutenticazioneSoggetti){
- return null; // invocazione anonima
- }else{
- throw new Exception("Soggetto fruitore non identificato");
- }
- }
- soggettoMittentePerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }else{
- soggettoMittentePerAutorizzazione = new IDSoggetto(idServizio.getSoggettoErogatore().getTipo(),idServizio.getSoggettoErogatore().getNome(),
- idServizio.getSoggettoErogatore().getCodicePorta());
- }
- }
- }else{
- if(soggettoFruitore==null){
- if(supportatoAutenticazioneSoggetti){
- return null; // invocazione anonima
- }else{
- throw new Exception("Soggetto fruitore non identificato");
- }
- }
- soggettoMittentePerAutorizzazione = new IDSoggetto(soggettoFruitore.getTipo(),soggettoFruitore.getNome(),
- soggettoFruitore.getCodicePorta());
- }
- return soggettoMittentePerAutorizzazione;
- }
-
-
- @SuppressWarnings("deprecation")
- private void overwriteIdSoggetto(IDServizio idServizio, IDSoggetto idSoggetto){
- idServizio.setSoggettoErogatore(idSoggetto);
- }
- @SuppressWarnings("deprecation")
- private void cleanDatiServizio(IDServizio idServizio){
- idServizio.setVersione(null);
- idServizio.setNome(null);
- idServizio.setTipo(null);
- }
- }