ConsegnaContenutiApplicativi.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.mdb;
- import java.io.ByteArrayInputStream;
- import java.sql.Timestamp;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import javax.xml.soap.SOAPBody;
- import javax.xml.soap.SOAPFault;
- import org.apache.commons.io.output.NullOutputStream;
- import org.openspcoop2.core.config.CorrelazioneApplicativaRisposta;
- import org.openspcoop2.core.config.DumpConfigurazione;
- import org.openspcoop2.core.config.GestioneErrore;
- import org.openspcoop2.core.config.PortaApplicativa;
- import org.openspcoop2.core.config.PortaApplicativaServizioApplicativo;
- import org.openspcoop2.core.config.PortaDelegata;
- import org.openspcoop2.core.config.Proprieta;
- import org.openspcoop2.core.config.ResponseCachingConfigurazione;
- import org.openspcoop2.core.config.ServizioApplicativo;
- import org.openspcoop2.core.config.Trasformazioni;
- import org.openspcoop2.core.config.ValidazioneContenutiApplicativi;
- import org.openspcoop2.core.config.constants.CostantiConfigurazione;
- import org.openspcoop2.core.config.constants.ProprietaProtocolloValore;
- import org.openspcoop2.core.config.constants.StatoFunzionalita;
- import org.openspcoop2.core.config.constants.TipoBehaviour;
- import org.openspcoop2.core.constants.CostantiConnettori;
- import org.openspcoop2.core.constants.TipoPdD;
- import org.openspcoop2.core.id.IDAccordo;
- 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.registry.driver.IDAccordoFactory;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.core.transazioni.TransazioneApplicativoServer;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.OpenSPCoop2MessageFactory;
- import org.openspcoop2.message.OpenSPCoop2RestJsonMessage;
- import org.openspcoop2.message.OpenSPCoop2RestXmlMessage;
- import org.openspcoop2.message.OpenSPCoop2SoapMessage;
- import org.openspcoop2.message.constants.MessageRole;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.message.exception.ParseException;
- import org.openspcoop2.message.soap.SoapUtils;
- import org.openspcoop2.message.soap.TunnelSoapUtils;
- import org.openspcoop2.message.soap.mtom.MtomXomReference;
- import org.openspcoop2.message.utils.MessageUtilities;
- import org.openspcoop2.monitor.sdk.transaction.FaseTracciamento;
- import org.openspcoop2.pdd.config.ClassNameProperties;
- import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
- import org.openspcoop2.pdd.config.ForwardProxy;
- 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.CostantiPdD;
- import org.openspcoop2.pdd.core.EJBUtils;
- import org.openspcoop2.pdd.core.EJBUtilsException;
- 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.LocalForwardEngine;
- import org.openspcoop2.pdd.core.LocalForwardException;
- import org.openspcoop2.pdd.core.LocalForwardParameter;
- import org.openspcoop2.pdd.core.PdDContext;
- import org.openspcoop2.pdd.core.ProtocolContext;
- import org.openspcoop2.pdd.core.ValidatoreMessaggiApplicativi;
- import org.openspcoop2.pdd.core.ValidatoreMessaggiApplicativiException;
- import org.openspcoop2.pdd.core.ValidatoreMessaggiApplicativiRest;
- import org.openspcoop2.pdd.core.behaviour.BehaviourForwardToConfiguration;
- import org.openspcoop2.pdd.core.behaviour.BehaviourLoadBalancer;
- import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneGestioneConsegnaNotifiche;
- import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MessaggioDaNotificare;
- import org.openspcoop2.pdd.core.connettori.ConnettoreBase;
- import org.openspcoop2.pdd.core.connettori.ConnettoreBaseHTTP;
- import org.openspcoop2.pdd.core.connettori.ConnettoreException;
- import org.openspcoop2.pdd.core.connettori.ConnettoreMsg;
- import org.openspcoop2.pdd.core.connettori.ConnettoreUtils;
- import org.openspcoop2.pdd.core.connettori.GestoreErroreConnettore;
- import org.openspcoop2.pdd.core.connettori.IConnettore;
- import org.openspcoop2.pdd.core.connettori.InfoConnettoreUscita;
- import org.openspcoop2.pdd.core.connettori.RepositoryConnettori;
- import org.openspcoop2.pdd.core.controllo_traffico.ConnettoreUtilities;
- import org.openspcoop2.pdd.core.controllo_traffico.DatiTempiRisposta;
- import org.openspcoop2.pdd.core.handlers.GestoreHandlers;
- import org.openspcoop2.pdd.core.handlers.HandlerException;
- import org.openspcoop2.pdd.core.handlers.InResponseContext;
- import org.openspcoop2.pdd.core.handlers.OutRequestContext;
- import org.openspcoop2.pdd.core.integrazione.HeaderIntegrazione;
- import org.openspcoop2.pdd.core.integrazione.IGestoreIntegrazionePA;
- import org.openspcoop2.pdd.core.integrazione.IGestoreIntegrazionePASoap;
- import org.openspcoop2.pdd.core.integrazione.InResponsePAMessage;
- import org.openspcoop2.pdd.core.integrazione.OutRequestPAMessage;
- import org.openspcoop2.pdd.core.state.IOpenSPCoopState;
- import org.openspcoop2.pdd.core.state.OpenSPCoopStateDBManager;
- 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.TokenForward;
- import org.openspcoop2.pdd.core.transazioni.GestoreConsegnaMultipla;
- import org.openspcoop2.pdd.core.transazioni.Transaction;
- import org.openspcoop2.pdd.core.transazioni.TransactionContext;
- import org.openspcoop2.pdd.core.trasformazioni.GestoreTrasformazioni;
- import org.openspcoop2.pdd.core.trasformazioni.GestoreTrasformazioniException;
- import org.openspcoop2.pdd.core.trasformazioni.GestoreTrasformazioniUtilities;
- import org.openspcoop2.pdd.logger.DiagnosticInputStream;
- 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.transazioni.InformazioniTransazione;
- import org.openspcoop2.pdd.logger.transazioni.TracciamentoManager;
- import org.openspcoop2.pdd.services.DirectVMProtocolInfo;
- import org.openspcoop2.pdd.services.ServicesUtils;
- import org.openspcoop2.pdd.services.error.RicezioneBusteExternalErrorGenerator;
- import org.openspcoop2.pdd.timers.TimerGestoreMessaggi;
- import org.openspcoop2.protocol.basic.builder.EsitoBuilder;
- import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
- import org.openspcoop2.protocol.engine.constants.Costanti;
- import org.openspcoop2.protocol.engine.driver.ConsegnaInOrdine;
- import org.openspcoop2.protocol.engine.validator.ValidazioneSintattica;
- import org.openspcoop2.protocol.registry.RegistroServiziManager;
- import org.openspcoop2.protocol.sdk.Busta;
- import org.openspcoop2.protocol.sdk.Context;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.Riscontro;
- import org.openspcoop2.protocol.sdk.builder.ProprietaManifestAttachments;
- import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
- import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
- import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
- import org.openspcoop2.protocol.sdk.constants.RuoloMessaggio;
- import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.protocol.utils.EsitiProperties;
- import org.openspcoop2.utils.LimitExceededIOException;
- import org.openspcoop2.utils.LimitedInputStream;
- import org.openspcoop2.utils.MapKey;
- import org.openspcoop2.utils.TimeoutIOException;
- import org.openspcoop2.utils.TimeoutInputStream;
- import org.openspcoop2.utils.Utilities;
- import org.openspcoop2.utils.date.DateManager;
- import org.openspcoop2.utils.io.Base64Utilities;
- import org.openspcoop2.utils.io.notifier.NotifierInputStreamParams;
- import org.openspcoop2.utils.rest.problem.JsonDeserializer;
- import org.openspcoop2.utils.rest.problem.ProblemConstants;
- import org.openspcoop2.utils.rest.problem.ProblemRFC7807;
- import org.openspcoop2.utils.rest.problem.XmlDeserializer;
- import org.openspcoop2.utils.transport.TransportRequestContext;
- import org.openspcoop2.utils.transport.TransportResponseContext;
- import org.openspcoop2.utils.transport.TransportUtils;
- import org.openspcoop2.utils.transport.http.HttpRequestMethod;
- import org.slf4j.Logger;
- import org.w3c.dom.Node;
- /**
- * Contiene la libreria ConsegnaContenutiApplicativi
- *
- * @author Poli Andrea (apoli@link.it)
- * @author Tronci Fabio (tronci@link.it)
- * @author Tommaso Burlon (tommaso.burlon@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- *
- */
- public class ConsegnaContenutiApplicativi extends GenericLib {
- public static final String ID_MODULO = "ConsegnaContenutiApplicativi";
- public ConsegnaContenutiApplicativi(Logger log) throws GenericLibException {
- super(ConsegnaContenutiApplicativi.ID_MODULO, log);
- inizializza();
- }
- @Override
- protected synchronized void inizializza() throws GenericLibException {
- super.inizializza();
- ConsegnaContenutiApplicativi.initializeService(ClassNameProperties.getInstance(), this.propertiesReader);
- }
- /** IGestoreIntegrazionePA: lista di gestori, ordinati per priorita' minore */
- public static String[] defaultGestoriIntegrazionePA = null;
- private static java.util.concurrent.ConcurrentHashMap<String, String[]> defaultPerProtocolloGestoreIntegrazionePA = null;
-
- /** Indicazione se sono state inizializzate le variabili del servizio */
- public static boolean initializeService = false;
- /**
- * Inizializzatore del servizio ConsegnaContenutiApplicativi
- *
- * @throws Exception
- */
- public static synchronized void initializeService(ClassNameProperties className,OpenSPCoop2Properties propertiesReader) {
- if(ConsegnaContenutiApplicativi.initializeService)
- return;
- boolean error = false;
- Logger logCore = OpenSPCoop2Logger.getLoggerOpenSPCoopCore();
- PddPluginLoader pluginLoader = PddPluginLoader.getInstance();
-
- // Inizializzo IGestoreIntegrazionePA list
- ConsegnaContenutiApplicativi.defaultGestoriIntegrazionePA = propertiesReader.getTipoIntegrazionePA();
- for(int i=0; i<ConsegnaContenutiApplicativi.defaultGestoriIntegrazionePA.length; i++){
- try{
- IGestoreIntegrazionePA gestore = pluginLoader.newIntegrazionePortaApplicativa(ConsegnaContenutiApplicativi.defaultGestoriIntegrazionePA[i]);
- gestore.toString();
- logCore.info("Inizializzazione gestore dati di integrazione per le erogazioni di tipo "+
- ConsegnaContenutiApplicativi.defaultGestoriIntegrazionePA[i]+" effettuata.");
- }catch(Exception e){
- logCore.error(e.getMessage(),e);
- error = true;
- }
- }
-
- // Inizializzo IGestoreIntegrazionePA per protocollo
- ConsegnaContenutiApplicativi.defaultPerProtocolloGestoreIntegrazionePA = new java.util.concurrent.ConcurrentHashMap<String, String[]>();
- try{
- 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) {
- logCore.error(e.getMessage(),e);
- error = true;
- }
- }
- if(tipiIntegrazionePerProtocollo.size()>0){
- ConsegnaContenutiApplicativi.defaultPerProtocolloGestoreIntegrazionePA.put(protocol, tipiIntegrazionePerProtocollo.toArray(new String[1]));
- }
- }
- }
- }catch(Exception e){
- logCore.error(
- "Riscontrato errore durante l'inizializzazione dei tipi di integrazione per protocollo: "+e.getMessage(),e);
- error = true;
- }
-
-
- ConsegnaContenutiApplicativi.initializeService = !error;
- }
- /**
- * Attivato, quando viene ricevuto sulla coda associata al mdb (coda RequestIN_Soap)
- * un messaggio JMS. Questo metodo implementa la logica del modulo ConsegnaContenutiApplicativi
- * dell'infrastruttura OpenSPCoop.
- *
- */
- @Override
- public EsitoLib _onMessage(IOpenSPCoopState openspcoopstate,
- RegistroServiziManager registroServiziManager,ConfigurazionePdDManager configurazionePdDManager,
- MsgDiagnostico msgDiag) throws OpenSPCoopStateException {
-
- ConsegnaContenutiApplicativiMessage consegnaContenutiApplicativiMsg = (ConsegnaContenutiApplicativiMessage) openspcoopstate.getMessageLib();
-
- if(consegnaContenutiApplicativiMsg==null) {
- throw new OpenSPCoopStateException("ConsegnaContenutiApplicativiMessage is null");
- }
-
- IDPortaApplicativa idApplicativa = null;
- if(consegnaContenutiApplicativiMsg.getRichiestaApplicativa()!=null) {
- idApplicativa = consegnaContenutiApplicativiMsg.getRichiestaApplicativa().getIdPortaApplicativa();
- }
-
- OpenSPCoopStateDBManager dbManagerSource = OpenSPCoopStateDBManager.runtime;
-
- // Costruisco eventuale oggetto TransazioneServerApplicativo
- TransazioneApplicativoServer transazioneApplicativoServer = null;
- ConsegnaContenutiApplicativiBehaviourMessage behaviourConsegna = consegnaContenutiApplicativiMsg.getBehaviour();
- Date oraRegistrazione = null;
- if(behaviourConsegna!=null && behaviourConsegna.getIdTransazioneApplicativoServer()!=null) {
- transazioneApplicativoServer = new TransazioneApplicativoServer();
- transazioneApplicativoServer.setIdTransazione(behaviourConsegna.getIdTransazioneApplicativoServer().getIdTransazione());
- transazioneApplicativoServer.setServizioApplicativoErogatore(behaviourConsegna.getIdTransazioneApplicativoServer().getServizioApplicativoErogatore());
- transazioneApplicativoServer.setConnettoreNome(behaviourConsegna.getIdTransazioneApplicativoServer().getConnettoreNome());
- if(behaviourConsegna.getOraRegistrazioneTransazioneApplicativoServer()!=null) {
- transazioneApplicativoServer.setDataRegistrazione(behaviourConsegna.getOraRegistrazioneTransazioneApplicativoServer());
- oraRegistrazione = behaviourConsegna.getOraRegistrazioneTransazioneApplicativoServer();
- }
- else {
- transazioneApplicativoServer.setDataRegistrazione(DateManager.getDate());
- }
- String protocol = (String) consegnaContenutiApplicativiMsg.getPddContext().getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME);
- transazioneApplicativoServer.setProtocollo(protocol);
- transazioneApplicativoServer.setDataAccettazioneRichiesta(DateManager.getDate());
- transazioneApplicativoServer.setIdentificativoMessaggio(consegnaContenutiApplicativiMsg.getBusta().getID());
- transazioneApplicativoServer.setConsegnaTrasparente(true);
-
- msgDiag.setTransazioneApplicativoServer(transazioneApplicativoServer, idApplicativa);
-
- dbManagerSource = OpenSPCoopStateDBManager.consegnePreseInCarico;
- }
- BehaviourLoadBalancer loadBalancer = null;
- if(consegnaContenutiApplicativiMsg!=null && consegnaContenutiApplicativiMsg.getLoadBalancer()!=null) {
- loadBalancer = consegnaContenutiApplicativiMsg.getLoadBalancer();
- }
-
- EsitoLib esitoLib = null;
- try {
- if(loadBalancer!=null) {
- try {
- loadBalancer.getLoadBalancerPool().addActiveConnection(loadBalancer.getConnectorName());
- }catch(Throwable t) {
- String prefix = "";
- if(transazioneApplicativoServer!=null) {
- prefix = "["+transazioneApplicativoServer.getIdTransazione()+"]["+transazioneApplicativoServer.getServizioApplicativoErogatore()+"] " ;
- }
- this.log.error(prefix+"Errore durante il salvataggio delle informazioni di load balancer: "+t.getMessage(),t);
- }
- }
- esitoLib = this.engine_onMessage(openspcoopstate, dbManagerSource,
- registroServiziManager, configurazionePdDManager, msgDiag, transazioneApplicativoServer, oraRegistrazione);
- }finally {
- if(loadBalancer!=null) {
- try {
- loadBalancer.getLoadBalancerPool().removeActiveConnection(loadBalancer.getConnectorName());
- }catch(Throwable t) {
- String prefix = "";
- if(transazioneApplicativoServer!=null) {
- prefix = "["+transazioneApplicativoServer.getIdTransazione()+"]["+transazioneApplicativoServer.getServizioApplicativoErogatore()+"] " ;
- }
- this.log.error(prefix+"Errore durante il salvataggio delle informazioni di load balancer: "+t.getMessage(),t);
- }
- try {
- boolean erroreUtilizzoConnettore = false;
- if(consegnaContenutiApplicativiMsg.getPddContext()!=null){
- Object o = consegnaContenutiApplicativiMsg.getPddContext().getObject(org.openspcoop2.core.constants.Costanti.ERRORE_UTILIZZO_CONNETTORE);
- if(o!=null && (o instanceof Boolean)){
- erroreUtilizzoConnettore = (Boolean) o;
- }
- }
- if(erroreUtilizzoConnettore) {
- loadBalancer.getLoadBalancerPool().registerConnectionError(loadBalancer.getConnectorName());
- }
- }catch(Throwable t) {
- String prefix = "";
- if(transazioneApplicativoServer!=null) {
- prefix = "["+transazioneApplicativoServer.getIdTransazione()+"]["+transazioneApplicativoServer.getServizioApplicativoErogatore()+"] " ;
- }
- this.log.error(prefix+"Errore durante il salvataggio delle informazioni di load balancer (register error connection): "+t.getMessage(),t);
- }
- }
- }
-
- if(transazioneApplicativoServer!=null) {
-
- if(EsitoLib.OK != esitoLib.getStatoInvocazione()) {
- if(esitoLib.getMotivazioneErroreNonGestito()!=null && !"".equals(esitoLib.getMotivazioneErroreNonGestito())) {
- transazioneApplicativoServer.setUltimoErrore(esitoLib.getMotivazioneErroreNonGestito());
- }
- else if(esitoLib.getErroreNonGestito()!=null) {
- Throwable e = Utilities.getInnerNotEmptyMessageException(esitoLib.getErroreNonGestito());
- if(e!=null) {
- transazioneApplicativoServer.setUltimoErrore(e.getMessage());
- }
- else {
- transazioneApplicativoServer.setUltimoErrore(esitoLib.getErroreNonGestito().toString());
- }
- }
- else {
- transazioneApplicativoServer.setUltimoErrore("Errore Generico durante il processamento del messaggio");
- }
- }
-
- if(consegnaContenutiApplicativiMsg!=null && consegnaContenutiApplicativiMsg.getPddContext()!=null) {
- Object o = consegnaContenutiApplicativiMsg.getPddContext().get(DiagnosticInputStream.DIAGNOSTIC_INPUT_STREAM_RESPONSE_COMPLETE_DATE);
- if(o==null) {
- o = consegnaContenutiApplicativiMsg.getPddContext().get(DiagnosticInputStream.DIAGNOSTIC_INPUT_STREAM_RESPONSE_ERROR_DATE);
- }
- if(o!=null && o instanceof Date) {
- Date d = (Date) o;
- transazioneApplicativoServer.setDataIngressoRispostaStream(d);
- }
- }
-
- try {
- RequestInfo requestInfo = null;
- Context context = null;
- if(consegnaContenutiApplicativiMsg!=null) {
- context = consegnaContenutiApplicativiMsg.getPddContext();
- if(context!=null && context.containsKey(org.openspcoop2.core.constants.Costanti.REQUEST_INFO)) {
- requestInfo = (RequestInfo) context.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
- }
- }
- GestoreConsegnaMultipla.getInstance().safeUpdateConsegna(transazioneApplicativoServer, idApplicativa, openspcoopstate, requestInfo, context);
- }catch(Throwable t) {
- this.log.error("["+transazioneApplicativoServer.getIdTransazione()+"]["+transazioneApplicativoServer.getServizioApplicativoErogatore()+"] Errore durante il salvataggio delle informazioni relative al servizio applicativo: "+t.getMessage(),t);
- }
- }
-
- return esitoLib;
- }
-
- private EsitoLib engine_onMessage(IOpenSPCoopState openspcoopstate, OpenSPCoopStateDBManager dbManagerSource,
- RegistroServiziManager registroServiziManager,ConfigurazionePdDManager configurazionePdDManager,
- MsgDiagnostico msgDiag,
- TransazioneApplicativoServer transazioneApplicativoServer,
- Date oraRegistrazione) throws OpenSPCoopStateException {
- Date dataConsegna = DateManager.getDate();
-
- EsitoLib esito = new EsitoLib();
-
- if(openspcoopstate==null) {
- if(msgDiag!=null) {
- msgDiag.logErroreGenerico("openspcoopstate is null", "openspcoopstate.checkNull");
- }
- else {
- this.log.error("openspcoopstate is null");
- }
- esito.setEsitoInvocazione(false);
- return esito;
- }
-
- ConsegnaContenutiApplicativiMessage consegnaContenutiApplicativiMsg = (ConsegnaContenutiApplicativiMessage) openspcoopstate.getMessageLib();
-
- ConsegnaContenutiApplicativiBehaviourMessage behaviourConsegna = consegnaContenutiApplicativiMsg.getBehaviour();
- String idMessaggioPreBehaviour = null;
- BehaviourForwardToConfiguration behaviourForwardToConfiguration = null;
- GestioneErrore gestioneErroreBehaviour = null;
- if(behaviourConsegna!=null) {
- idMessaggioPreBehaviour = behaviourConsegna.getIdMessaggioPreBehaviour();
- behaviourForwardToConfiguration = behaviourConsegna.getBehaviourForwardToConfiguration();
- gestioneErroreBehaviour = behaviourConsegna.getGestioneErrore();
- }
-
- if(msgDiag==null) {
- if(this.log!=null) {
- this.log.error("MsgDiagnostico is null");
- }
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- return esito;
- }
-
- /* PddContext */
- PdDContext pddContext = consegnaContenutiApplicativiMsg.getPddContext();
-
- if(pddContext==null) {
- msgDiag.logErroreGenerico("PddContext is null", "PdDContext.checkNull");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- return esito;
- }
-
- String idTransazione = PdDContext.getValue(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, pddContext);
-
- RequestInfo requestInfo = (RequestInfo) pddContext.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
- boolean requestInfoForMemoryOptimization = false;
- if(pddContext.containsKey(org.openspcoop2.core.constants.Costanti.REQUEST_INFO_IN_MEMORY)) {
- requestInfoForMemoryOptimization = (Boolean) pddContext.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO_IN_MEMORY);
- }
-
- /* Protocol Factory */
- IProtocolFactory<?> protocolFactory = null;
- try{
- protocolFactory = this.protocolFactoryManager.getProtocolFactoryByName((String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "ProtocolFactory.instanziazione");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
-
- // Transaction
- Transaction transactionNullable = null;
- try{
- transactionNullable = TransactionContext.getTransaction(idTransazione);
- }catch(Exception e){
- // La transazione potrebbe essere stata eliminata nelle comunicazioni stateful
- // msgDiag.logErroreGenerico(e, "getTransaction");
- // openspcoopstate.releaseResource();
- // esito.setEsitoInvocazione(false);
- // esito.setStatoInvocazioneErroreNonGestito(e);
- // return esito;
- }
-
- msgDiag.setPddContext(pddContext, protocolFactory);
- /* ID e tipo di implementazione PdD con cui interoperare */
- String idMessaggioConsegna = openspcoopstate.getIDMessaggioSessione();
- String implementazionePdDMittente = consegnaContenutiApplicativiMsg.getImplementazionePdDSoggettoMittente();
- String implementazionePdDDestinatario = consegnaContenutiApplicativiMsg.getImplementazionePdDSoggettoDestinatario();
- RichiestaApplicativa richiestaApplicativa = consegnaContenutiApplicativiMsg.getRichiestaApplicativa();
- RichiestaDelegata richiestaDelegata = consegnaContenutiApplicativiMsg.getRichiestaDelegata();
- Busta bustaRichiesta = consegnaContenutiApplicativiMsg.getBusta(); // in caso di richiesta delegata serve per il profilo asincrono
- TipoPdD tipoPdD = TipoPdD.APPLICATIVA;
- if(msgDiag.getPorta()==null) {
- if(richiestaApplicativa!=null && richiestaApplicativa.getIdPortaApplicativa()!=null) {
- msgDiag.updatePorta(tipoPdD, richiestaApplicativa.getIdPortaApplicativa().getNome(), requestInfo);
- }
- else if(richiestaDelegata!=null && richiestaDelegata.getIdPortaDelegata()!=null) {
- msgDiag.updatePorta(TipoPdD.DELEGATA, richiestaDelegata.getIdPortaDelegata().getNome(), requestInfo);
- }
- }
-
- msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_CONSEGNA_CONTENUTI_APPLICATIVI);
- if(bustaRichiesta!=null){
- msgDiag.addKeywords(bustaRichiesta, true);
- }
- String descrizioneBehaviour = "";
- if(bustaRichiesta!=null){
- descrizioneBehaviour = bustaRichiesta.removeProperty(CostantiPdD.KEY_DESCRIZIONE_BEHAVIOUR);
- if(descrizioneBehaviour==null){
- descrizioneBehaviour = "";
- }
- if(!"".equals(descrizioneBehaviour)){
- descrizioneBehaviour = " ("+descrizioneBehaviour+")";
- }
- }
- msgDiag.addKeyword(CostantiPdD.KEY_DESCRIZIONE_BEHAVIOUR, descrizioneBehaviour);
-
- // VM ProtocolInfo (se siamo arrivati da un canale VM)
- // Per il caso di LocalForward (se si mettera il tracciamento)
- if(pddContext!=null && bustaRichiesta!=null)
- DirectVMProtocolInfo.setInfoFromContext(pddContext, bustaRichiesta);
-
- // Dati per GestoreEventi
- String servizio = null;
- String tipoServizio = null;
- String azione = null;
- if(bustaRichiesta!=null){
- servizio = bustaRichiesta.getServizio();
- tipoServizio = bustaRichiesta.getTipoServizio();
- azione = bustaRichiesta.getAzione(); // in caso di richiesta delegata serve per il profilo asincrono
- }
- String idModuloInAttesa = null; // in caso di richiesta delegata serve per il profilo asincrono
- IDSoggetto identitaPdD = null;
- IDSoggetto soggettoFruitore = null;
- String servizioApplicativo = null;
- String scenarioCooperazione = null;
- IDServizio idServizio = null;
- IDAccordo idAccordoServizio = null;
- boolean isRicevutaAsincrona = false;
- String [] tipiIntegrazione = null;
- boolean allegaBody = false;
- boolean scartaBody = false;
- String servizioApplicativoFruitore = null;
- String idCorrelazioneApplicativa = null;
- String idCorrelazioneApplicativaRisposta = null;
- boolean portaDiTipoStateless = false;
- CorrelazioneApplicativaRisposta correlazioneApplicativaRisposta = null;
- boolean gestioneManifest = false;
- ProprietaManifestAttachments proprietaManifestAttachments = this.propertiesReader.getProprietaManifestAttachments(implementazionePdDMittente);
- Trasformazioni trasformazioni = null;
- IDSoggetto soggettoErogatoreServizioHeaderIntegrazione = null;
- IDSoggetto soggettoFruitoreHeaderIntegrazione = null;
- String profiloGestione = null;
-
- DumpConfigurazione dumpConfig = null;
-
- boolean localForward = false;
-
- ResponseCachingConfigurazione responseCachingConfig = null;
-
- IntegrationContext integrationContext = null;
- ProtocolContext protocolContext = null;
-
- if(richiestaApplicativa!=null){
- identitaPdD = richiestaApplicativa.getDominio();
- soggettoFruitore = richiestaApplicativa.getSoggettoFruitore();
- servizioApplicativo = richiestaApplicativa.getServizioApplicativo();
- idModuloInAttesa = richiestaApplicativa.getIdModuloInAttesa();
- scenarioCooperazione = richiestaApplicativa.getScenario();
- isRicevutaAsincrona = richiestaApplicativa.isRicevutaAsincrona();
- idServizio = richiestaApplicativa.getIDServizio();
- if(bustaRichiesta!=null){
- if(idServizio.getSoggettoErogatore()!=null){
- if(idServizio.getSoggettoErogatore().getCodicePorta()==null){
- idServizio.getSoggettoErogatore().setCodicePorta(bustaRichiesta.getIdentificativoPortaDestinatario());
- }
- }
- }
- if(azione!=null && !"".equals(azione) && idServizio!=null &&
- (idServizio.getAzione()==null || "".equals(idServizio.getAzione()))) {
- idServizio.setAzione(azione);
- }
- idAccordoServizio = richiestaApplicativa.getIdAccordo();
- if(idServizio!=null) {
- soggettoErogatoreServizioHeaderIntegrazione = idServizio.getSoggettoErogatore();
- }
- profiloGestione = richiestaApplicativa.getProfiloGestione();
- servizioApplicativoFruitore = richiestaApplicativa.getIdentitaServizioApplicativoFruitore();
- idCorrelazioneApplicativa = richiestaApplicativa.getIdCorrelazioneApplicativa();
- localForward = richiestaApplicativa.isLocalForward();
-
- integrationContext = richiestaApplicativa.getIntegrazione();
- protocolContext = richiestaApplicativa.getProtocol();
-
- }else{
- identitaPdD = richiestaDelegata.getDominio();
- soggettoFruitore = richiestaDelegata.getIdSoggettoFruitore();
- servizioApplicativo = richiestaDelegata.getServizioApplicativo();
- idModuloInAttesa = richiestaDelegata.getIdModuloInAttesa();
- scenarioCooperazione = richiestaDelegata.getScenario();
- isRicevutaAsincrona = richiestaDelegata.isRicevutaAsincrona();
- idServizio = richiestaDelegata.getIdServizio();
- if(bustaRichiesta!=null){
- if(idServizio!=null && idServizio.getSoggettoErogatore()!=null){
- if(idServizio.getSoggettoErogatore().getCodicePorta()==null){
- idServizio.getSoggettoErogatore().setCodicePorta(bustaRichiesta.getIdentificativoPortaDestinatario());
- }
- }
- }
- if(azione!=null && !"".equals(azione) && idServizio!=null &&
- (idServizio.getAzione()==null || "".equals(idServizio.getAzione()))) {
- idServizio.setAzione(azione);
- }
- idAccordoServizio = richiestaDelegata.getIdAccordo();
- if ( bustaRichiesta!=null && Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA.equals(scenarioCooperazione) ){
- soggettoErogatoreServizioHeaderIntegrazione = new IDSoggetto(bustaRichiesta.getTipoDestinatario(),bustaRichiesta.getDestinatario());
- soggettoFruitoreHeaderIntegrazione = new IDSoggetto(bustaRichiesta.getTipoMittente(),bustaRichiesta.getMittente(), bustaRichiesta.getIdentificativoPortaMittente());
- }else{
- soggettoErogatoreServizioHeaderIntegrazione = idServizio.getSoggettoErogatore();
- }
- profiloGestione = richiestaDelegata.getProfiloGestione();
- servizioApplicativoFruitore = richiestaDelegata.getServizioApplicativo();
- idCorrelazioneApplicativa = richiestaDelegata.getIdCorrelazioneApplicativa();
-
- integrationContext = richiestaDelegata.getIntegrazione();
- protocolContext = richiestaDelegata.getProtocol();
- }
-
- IDServizio servizioHeaderIntegrazione = null;
- if(bustaRichiesta!=null){
- // Per ricambiare il servizio in correlato per:
- // - AsincronoAsimmetrico, richiestaStato
- // - AsincronoSimmetrico, risposta
- try{
- servizioHeaderIntegrazione = IDServizioFactory.getInstance().getIDServizioFromValues(bustaRichiesta.getTipoServizio(), bustaRichiesta.getServizio(),
- soggettoErogatoreServizioHeaderIntegrazione, bustaRichiesta.getVersioneServizio());
- servizioHeaderIntegrazione.setAzione(bustaRichiesta.getAzione());
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaApplicativa.getIDServizioFromValues");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
-
- IDServizioApplicativo servizioApplicativoToken = null;
- if(pddContext!=null && pddContext.containsKey(org.openspcoop2.core.constants.Costanti.ID_APPLICATIVO_TOKEN)) {
- servizioApplicativoToken = (IDServizioApplicativo) pddContext.getObject(org.openspcoop2.core.constants.Costanti.ID_APPLICATIVO_TOKEN);
- }
-
- msgDiag.mediumDebug("Profilo di gestione ["+ConsegnaContenutiApplicativi.ID_MODULO+"] della busta: "+profiloGestione);
- msgDiag.setDominio(identitaPdD); // imposto anche il dominio nel msgDiag
- msgDiag.setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
- msgDiag.addKeyword(CostantiPdD.KEY_SA_EROGATORE, servizioApplicativo);
- if(servizioApplicativoFruitore!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, servizioApplicativoFruitore);
- }
- boolean soggettoVirtuale = false;
- try{
- soggettoVirtuale = configurazionePdDManager.isSoggettoVirtuale( identitaPdD, requestInfo );
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "isSoggettoVirtuale("+identitaPdD+")");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
-
- // Aggiornamento Informazioni
- msgDiag.setIdMessaggioRichiesta(idMessaggioConsegna);
- if(idMessaggioPreBehaviour!=null){
- msgDiag.setIdMessaggioRichiesta(idMessaggioPreBehaviour);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RICHIESTA, idMessaggioPreBehaviour);
- }
- if(soggettoFruitoreHeaderIntegrazione!=null)
- msgDiag.setFruitore(soggettoFruitoreHeaderIntegrazione);
- else
- msgDiag.setFruitore(soggettoFruitore);
- if(servizioHeaderIntegrazione!=null){
- msgDiag.setServizio(servizioHeaderIntegrazione);
- }else{
- msgDiag.setServizio(idServizio);
- }
- if(transazioneApplicativoServer!=null) {
- msgDiag.setServizioApplicativo(servizioApplicativo);
- }
- // Calcolo Profilo di Collaborazione
- msgDiag.mediumDebug("Calcolo profilo di collaborazione...");
- ProfiloDiCollaborazione profiloCollaborazione = EJBUtils.calcolaProfiloCollaborazione(scenarioCooperazione);
- PortaApplicativa pa = null;
- IDPortaApplicativa idPA = null;
- PortaDelegata pd = null;
- IDPortaDelegata idPD = null;
- ServizioApplicativo sa = null;
- if(richiestaApplicativa!=null){
- idPA = richiestaApplicativa.getIdPortaApplicativa();
- try{
- msgDiag.mediumDebug("getPortaApplicativa...");
- pa = configurazionePdDManager.getPortaApplicativa(idPA, requestInfo);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaApplicativa.getPortaApplicativa");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("getServizioApplicativo(pa)...");
- IDServizioApplicativo idSA = new IDServizioApplicativo();
- idSA.setNome(richiestaApplicativa.getServizioApplicativo());
- idSA.setIdSoggettoProprietario(richiestaApplicativa.getIDServizio().getSoggettoErogatore());
- sa = configurazionePdDManager.getServizioApplicativo(idSA, requestInfo);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaApplicativa.getServizioApplicativo");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- if(pa!=null)
- correlazioneApplicativaRisposta = pa.getCorrelazioneApplicativaRisposta();
- }else{
- idPD = richiestaDelegata.getIdPortaDelegata();
- try{
- msgDiag.mediumDebug("getPortaDelegata...");
- pd = configurazionePdDManager.getPortaDelegata(idPD, requestInfo);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaDelegata.getPortaApplicativa");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("getServizioApplicativo(pd)...");
- IDServizioApplicativo idSA = new IDServizioApplicativo();
- idSA.setNome(richiestaDelegata.getServizioApplicativo());
- idSA.setIdSoggettoProprietario(richiestaDelegata.getIdSoggettoFruitore());
- sa = configurazionePdDManager.getServizioApplicativo(idSA, requestInfo);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaDelegata.getServizioApplicativo");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- if(pd!=null)
- correlazioneApplicativaRisposta = pd.getCorrelazioneApplicativaRisposta();
- }
- // Recupero informazioni behaviour
- TipoBehaviour behaviourType = null;
- boolean salvaRispostaPerNotifiche = false;
- MessaggioDaNotificare tipiMessaggiNotificabili = null;
- String identificativoMessaggioDoveSalvareLaRisposta = null;
- MessaggioDaNotificare tipoMessaggioDaNotificare_notificaAsincrona = null;
- boolean transactionContext_notificaAsincrona = false;
- HttpRequestMethod metodoHttpDaNotificare_notificaAsincrona = null;
- String nomeConnettoreMultiplo = null;
- String nomeServizioApplicativoErogatoreConnettoreMultiplo = null;
- String nomeConnettoreAPIImplementation = null;
- String nomeServizioApplicativoErogatoreAPIImplementation = null;
- try{
- if(pa!=null && pa.getBehaviour()!=null) {
-
- behaviourType = TipoBehaviour.toEnumConstant(pa.getBehaviour().getNome());
-
- // NomeConnettore
- if(transazioneApplicativoServer!=null) {
- for (PortaApplicativaServizioApplicativo pasa : pa.getServizioApplicativoList()) {
- if(pasa!=null && pasa.getNome()!=null && pasa.getNome().equals(transazioneApplicativoServer.getServizioApplicativoErogatore())) {
- nomeServizioApplicativoErogatoreConnettoreMultiplo = transazioneApplicativoServer.getServizioApplicativoErogatore();
- nomeConnettoreMultiplo = pasa.getDatiConnettore()!= null ? pasa.getDatiConnettore().getNome() : null;
- if(nomeConnettoreMultiplo==null) {
- nomeConnettoreMultiplo=CostantiConfigurazione.NOME_CONNETTORE_DEFAULT;
- }
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.CONSEGNA_MULTIPLA_NOME_CONNETTORE, nomeConnettoreMultiplo);
- break;
- }
- }
- }
- else {
- for (PortaApplicativaServizioApplicativo pasa : pa.getServizioApplicativoList()) {
- if(pasa!=null && pasa.getNome()!=null && pasa.getNome().equals(servizioApplicativo)) {
- nomeServizioApplicativoErogatoreAPIImplementation = servizioApplicativo;
- nomeConnettoreAPIImplementation = pasa.getDatiConnettore()!= null ? pasa.getDatiConnettore().getNome() : null;
- if(nomeConnettoreAPIImplementation==null) {
- nomeConnettoreAPIImplementation=CostantiConfigurazione.NOME_CONNETTORE_DEFAULT;
- }
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.CONSEGNA_MULTIPLA_NOME_CONNETTORE_API, nomeConnettoreAPIImplementation);
- break;
- }
- }
- }
-
- if(TipoBehaviour.CONSEGNA_CON_NOTIFICHE.equals(behaviourType)) {
- if(transazioneApplicativoServer==null) {
- List<String> serviziApplicativiAbilitatiForwardTo = readServiziApplicativiAbilitatiForwardTo(pddContext);
- if(serviziApplicativiAbilitatiForwardTo!=null && !serviziApplicativiAbilitatiForwardTo.isEmpty()) {
- tipiMessaggiNotificabili = org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.readMessaggiNotificabili(pa, serviziApplicativiAbilitatiForwardTo);
- if(tipiMessaggiNotificabili!=null &&
- (
- MessaggioDaNotificare.RISPOSTA.equals(tipiMessaggiNotificabili)
- ||
- MessaggioDaNotificare.ENTRAMBI.equals(tipiMessaggiNotificabili)
- )) {
- salvaRispostaPerNotifiche = true;
- identificativoMessaggioDoveSalvareLaRisposta = CostantiPdD.PREFIX_MESSAGGIO_CONNETTORE_MULTIPLO+0+CostantiPdD.SEPARATOR_MESSAGGIO_CONNETTORE_MULTIPLO+idMessaggioConsegna;
- }
-
- boolean injectTransactionContext = org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.isSaveTransactionContext(pa, serviziApplicativiAbilitatiForwardTo);
- if(injectTransactionContext) {
- if(identificativoMessaggioDoveSalvareLaRisposta==null) {
- identificativoMessaggioDoveSalvareLaRisposta = CostantiPdD.PREFIX_MESSAGGIO_CONNETTORE_MULTIPLO+0+CostantiPdD.SEPARATOR_MESSAGGIO_CONNETTORE_MULTIPLO+idMessaggioConsegna;
- }
- pddContext.addObject(CostantiPdD.SALVA_CONTESTO_IDENTIFICATIVO_MESSAGGIO_NOTIFICA, identificativoMessaggioDoveSalvareLaRisposta);
- }
- }
- }
- else {
- for (PortaApplicativaServizioApplicativo pasa : pa.getServizioApplicativoList()) {
- if(pasa!=null && pasa.getNome()!=null && pasa.getNome().equals(transazioneApplicativoServer.getServizioApplicativoErogatore())) {
- ConfigurazioneGestioneConsegnaNotifiche config = org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.MultiDeliverUtils.read(pasa);
- if(config!=null) {
- tipoMessaggioDaNotificare_notificaAsincrona = config.getMessaggioDaNotificare();
- transactionContext_notificaAsincrona = config.isInjectTransactionSyncContext();
- metodoHttpDaNotificare_notificaAsincrona = config.getHttpMethod();
- }
- if(tipoMessaggioDaNotificare_notificaAsincrona==null) {
- tipoMessaggioDaNotificare_notificaAsincrona = MessaggioDaNotificare.RICHIESTA;
- }
- if(metodoHttpDaNotificare_notificaAsincrona==null &&
- (
- MessaggioDaNotificare.RISPOSTA.equals(tipoMessaggioDaNotificare_notificaAsincrona) ||
- MessaggioDaNotificare.ENTRAMBI.equals(tipoMessaggioDaNotificare_notificaAsincrona)
- )
- ) {
- metodoHttpDaNotificare_notificaAsincrona = HttpRequestMethod.POST;
- }
- break;
- }
- }
- }
- }
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "ConfigurazioneBehaviour");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- // Recupero anche pd in caso di local forward
- if(localForward && pd==null){
- try{
- msgDiag.mediumDebug("getPortaDelegata...");
- pd = configurazionePdDManager.getPortaDelegata(richiestaDelegata.getIdPortaDelegata(), requestInfo);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaDelegata.getPortaApplicativa");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
-
- // La lettura dalla configurazione deve essere dopo il transaction manager
- if(richiestaApplicativa!=null && !localForward){
- try{
- msgDiag.mediumDebug("isAllegaBody(pa)...");
- allegaBody = configurazionePdDManager.isAllegaBody(pa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaApplicativa.isAllegaBody");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("isScartaBody(pa)...");
- scartaBody = configurazionePdDManager.isScartaBody(pa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaApplicativa.isScartaBody");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("getTipiIntegrazione(pa)...");
- tipiIntegrazione = configurazionePdDManager.getTipiIntegrazione(pa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaApplicativa.getTipiIntegrazione");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("isModalitaStateless(pa)...");
- portaDiTipoStateless = configurazionePdDManager.isModalitaStateless(pa, profiloCollaborazione);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaApplicativa.isModalitaStateless("+profiloCollaborazione+")");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("isGestioneManifestAttachments(pa)...");
- gestioneManifest = configurazionePdDManager.isGestioneManifestAttachments(pa,protocolFactory);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "isGestioneManifestAttachments(pa)");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("readDumpConfig(pa)...");
- dumpConfig = configurazionePdDManager.getDumpConfigurazione(pa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "readDumpConfig(pa)");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("readResponseCachingConfig(pa)...");
- responseCachingConfig = configurazionePdDManager.getConfigurazioneResponseCaching(pa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "readResponseCachingConfig(pa)");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("readTrasformazioni(pa)...");
- trasformazioni = configurazionePdDManager.getTrasformazioni(pa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "readTrasformazioni(pa)");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
-
- }else{
- try{
- msgDiag.mediumDebug("isAllegaBody(pd)...");
- allegaBody = configurazionePdDManager.isAllegaBody(pd);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaDelegata.isAllegaBody");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("isScartaBody(pd)...");
- scartaBody = configurazionePdDManager.isScartaBody(pd);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaDelegata.isScartaBody");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("getTipiIntegrazione(pd)...");
- tipiIntegrazione = configurazionePdDManager.getTipiIntegrazione(pd);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaDelegata.getTipiIntegrazione");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("isModalitaStateless(pd)...");
- portaDiTipoStateless = configurazionePdDManager.isModalitaStateless(pd, profiloCollaborazione);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RichiestaDelegata.isModalitaStateless("+profiloCollaborazione+")");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("isGestioneManifestAttachments(pd)...");
- gestioneManifest = configurazionePdDManager.isGestioneManifestAttachments(pd,protocolFactory);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "isGestioneManifestAttachments(pd)");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("readDumpConfig(pd)...");
- dumpConfig = configurazionePdDManager.getDumpConfigurazione(pd);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "readDumpConfig(pd)");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("readResponseCachingConfig(pd)...");
- responseCachingConfig = configurazionePdDManager.getConfigurazioneResponseCaching(pd);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "readResponseCachingConfig(pd)");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- try{
- msgDiag.mediumDebug("readTrasformazioni(pd)...");
- trasformazioni = configurazionePdDManager.getTrasformazioni(pd);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "readTrasformazioni(pd)");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
- if(idMessaggioPreBehaviour!=null) {
- portaDiTipoStateless = false;
- }
- else if(soggettoVirtuale) {
- portaDiTipoStateless = false;
- }
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.STATELESS, portaDiTipoStateless+"");
-
- LocalForwardEngine localForwardEngine = null;
- LocalForwardParameter localForwardParameter = null;
- try{
-
- if(localForward){
-
- localForwardParameter = new LocalForwardParameter();
- localForwardParameter.setLog(this.log);
- localForwardParameter.setConfigurazionePdDReader(configurazionePdDManager);
- localForwardParameter.setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
- localForwardParameter.setIdentitaPdD(identitaPdD);
- localForwardParameter.setIdModulo(this.idModulo);
- localForwardParameter.setIdRequest(idMessaggioConsegna);
- localForwardParameter.setImplementazionePdDDestinatario(implementazionePdDDestinatario);
- localForwardParameter.setImplementazionePdDMittente(implementazionePdDMittente);
- localForwardParameter.setIdPdDMittente(registroServiziManager.getIdPortaDominio(soggettoFruitore, null, requestInfo));
- localForwardParameter.setIdPdDDestinatario(registroServiziManager.getIdPortaDominio(idServizio.getSoggettoErogatore(), null, requestInfo));
- localForwardParameter.setMsgDiag(msgDiag);
- localForwardParameter.setOpenspcoopstate(openspcoopstate);
- localForwardParameter.setPddContext(pddContext);
- localForwardParameter.setProtocolFactory(protocolFactory);
- localForwardParameter.setRichiestaDelegata(richiestaDelegata);
- localForwardParameter.setRichiestaApplicativa(richiestaApplicativa);
- localForwardParameter.setStateless(portaDiTipoStateless);
- localForwardParameter.setBusta(bustaRichiesta);
-
- localForwardEngine = new LocalForwardEngine(localForwardParameter);
- }
-
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "LocalForwardEngine.init");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
-
-
-
- /* ------------------ Connessione al DB --------------- */
- msgDiag.mediumDebug("Richiesta connessione al database per la gestione della richiesta...");
- openspcoopstate.initResource(identitaPdD, ConsegnaContenutiApplicativi.ID_MODULO,idTransazione,dbManagerSource);
- registroServiziManager.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
- configurazionePdDManager = configurazionePdDManager.refreshState(registroServiziManager);
- msgDiag.updateState(configurazionePdDManager);
-
- /* ----------- Analisi tipo di Consegna Contenuti Applicativi:
- OneWay (InvocazioneServizio) in modalita asincrona:
- - Non serve aspettare una risposta applicativa
- - Non serve generare una risposta (eventuale busta con riscontri e' gia' stata inviata)
- OneWay (InvocazioneServizio) in modalita sincrona:
- - Bisogna aspettare una risposta applicativa sincrona
- - Bisogna solo sbloccare RicezioneBuste non appena ricevuto http 200.
- Sincrono (InvocazioneServizio):
- - Bisogna aspettare una risposta applicativa sincrona
- - Bisogna quindi generare un busta della risposta sincrona
- AsincronoSimmetrico (InvocazioneServizio):
- - Non serve aspettare una risposta applicativa se la ricevuta applicativa e' disabilitata
- altrimenti deve essere aspettata.
- - Non serve generare una risposta (la ricevuta e' gia' stata inviata) se la ricevuta applicativa e' disabilitata
- altrimenti bisogna generare un busta contenente la ricevuta
- AsincronoSimmetrico (ConsegnaRisposta):
- - Non serve aspettare una risposta applicativa se la ricevuta applicativa e' disabilitata
- altrimenti deve essere aspettata.
- - Non serve generare una risposta (la ricevuta e' gia' stata inviata) se la ricevuta applicativa e' disabilitata
- altrimenti bisogna generare un busta contenente la ricevuta
- AsincronoAsimmetrico (InvocazioneServizio):
- - Non serve aspettare una risposta applicativa (sara' poi richiesta con il polling) se la ricevuta applicativa e' disabilitata
- altrimenti deve essere aspettata.
- - Non serve generare una risposta (la ricevuta e' gia' stata inviata) se la ricevuta applicativa e' disabilitata
- altrimenti bisogna generare un busta contenente la ricevuta
- AsincronoAsimmetrico (Polling):
- - Bisogna aspettare una risposta applicativa 'sincrona' comunque
- - Bisogna quindi generare un busta della risposta contenente il risultato del polling
- ConsegnaContenutiApplicativi:
- - Non serve aspettare una risposta applicativa
- - Non serve generare una risposta (e' la parte finale di consegna gia' della risposta)
- ------------- */
- boolean existsModuloInAttesaRispostaApplicativa = false;
- if(idMessaggioPreBehaviour!=null){
- existsModuloInAttesaRispostaApplicativa = false;
- }
- else if(Costanti.SCENARIO_SINCRONO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ){
- existsModuloInAttesaRispostaApplicativa = true;
- }
- else if(Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING.equals(scenarioCooperazione)){
- existsModuloInAttesaRispostaApplicativa = true;
- }
- else if (Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ||
- Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ||
- Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA.equals(scenarioCooperazione)){
- existsModuloInAttesaRispostaApplicativa = portaDiTipoStateless || isRicevutaAsincrona;
- }
- else if( (richiestaApplicativa!=null) && Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(richiestaApplicativa.getScenario()) ){
- existsModuloInAttesaRispostaApplicativa = portaDiTipoStateless;
- }
- /* ------------------ Inizializzazione Contesto di gestione della Richiesta --------------- */
- msgDiag.mediumDebug("Inizializzo contesto per la gestione...");
- // EJBUtils (per eventuali errori)
- EJBUtils ejbUtils = null;
- try{
- String idMessaggioGestoreMessaggiRichiesta = idMessaggioConsegna;
- if(idMessaggioPreBehaviour!=null){
- idMessaggioGestoreMessaggiRichiesta = bustaRichiesta.getID();
- }
- ejbUtils = new EJBUtils(identitaPdD,tipoPdD,ConsegnaContenutiApplicativi.ID_MODULO,idMessaggioConsegna,
- idMessaggioGestoreMessaggiRichiesta,Costanti.INBOX,openspcoopstate,msgDiag,false,
- consegnaContenutiApplicativiMsg.getImplementazionePdDSoggettoMittente(),
- consegnaContenutiApplicativiMsg.getImplementazionePdDSoggettoDestinatario(),
- profiloGestione,pddContext
- );
- ejbUtils.setServizioApplicativoErogatore(servizioApplicativo);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "EJBUtils.new");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
-
- // GestoriMessaggio
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (GestoreMessaggio)...");
- String idMessaggioGestoreMessaggiRichiesta = idMessaggioConsegna;
- if(idMessaggioPreBehaviour!=null){
- idMessaggioGestoreMessaggiRichiesta = bustaRichiesta.getID();
- }
- GestoreMessaggi msgRequest = new GestoreMessaggi(openspcoopstate, true, idMessaggioGestoreMessaggiRichiesta,Costanti.INBOX,msgDiag,pddContext);
- OpenSPCoop2Message consegnaMessagePrimaTrasformazione = null;
- OpenSPCoop2Message consegnaResponseMessagePrimaTrasformazione = null;
- Context notificaTransactionContext = null;
- GestoreMessaggi msgResponse = null;
- msgRequest.setPortaDiTipoStateless(portaDiTipoStateless);
-
- // RequestInfo
- if(
- (requestInfo==null)
- ||
- (requestInfoForMemoryOptimization)
- ||
- (idTransazione==null)
- ) {
- // devo leggerlo dal messaggio
- try {
- RequestInfo _requestInfoForMemoryOptimization = null;
- if(requestInfoForMemoryOptimization) {
- _requestInfoForMemoryOptimization = requestInfo;
- }
- if(transactionContext_notificaAsincrona) {
- notificaTransactionContext = msgRequest.getSyncTransactionContext();
- if(notificaTransactionContext!=null && !notificaTransactionContext.isEmpty()) {
- pddContext.put(CostantiPdD.CONTESTO_RICHIESTA_MESSAGGIO_NOTIFICA, notificaTransactionContext);
- }
- }
-
- if(tipoMessaggioDaNotificare_notificaAsincrona!=null) {
- switch (tipoMessaggioDaNotificare_notificaAsincrona) {
- case RICHIESTA:
- consegnaMessagePrimaTrasformazione = msgRequest.getMessage();
- break;
- case RISPOSTA:
- consegnaMessagePrimaTrasformazione = msgRequest.getResponseMessage(true, true); //se deve essere consegnata solamente la risposta, questa deve esistere
- break;
- case ENTRAMBI:
- consegnaMessagePrimaTrasformazione = msgRequest.getMessage();
- consegnaResponseMessagePrimaTrasformazione = msgRequest.getResponseMessage(false, false); // secondo parametro false perchè la risposta può non esserci (es. vuota o errore di connessione) ma è stato indicato di inviare una notifica
- break;
- }
- }
- else {
- consegnaMessagePrimaTrasformazione = msgRequest.getMessage();
- }
- //Devo farlo dopo aver applicato la trasformazione
- //correctForwardPathNotifiche(transazioneApplicativoServer, consegnaMessagePrimaTrasformazione, protocolFactory);
- if(
- (requestInfo==null)
- ||
- (requestInfoForMemoryOptimization)
- ) {
- Object o = consegnaMessagePrimaTrasformazione!=null ?
- consegnaMessagePrimaTrasformazione.getContextProperty(org.openspcoop2.core.constants.Costanti.REQUEST_INFO)
- :
- null;
- if(o==null) {
- throw new Exception("RequestInfo non presente nel contesto");
- }
- requestInfo = (RequestInfo) o;
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO,requestInfo);
- }
- if(idTransazione==null) {
- Object o = consegnaMessagePrimaTrasformazione.getContextProperty(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE);
- if(o==null) {
- throw new Exception("IdTransazione non presente nel contesto");
- }
- idTransazione = (String) o;
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE,idTransazione);
- }
-
- if(requestInfoForMemoryOptimization && _requestInfoForMemoryOptimization!=null) {
- requestInfo.setRequestConfig(_requestInfoForMemoryOptimization.getRequestConfig());
- requestInfo.setRequestThreadContext(_requestInfoForMemoryOptimization.getRequestThreadContext());
- msgDiag.updateRequestInfo(requestInfo);
- }
-
- }catch(Exception e) {
- msgDiag.logErroreGenerico(e, "LetturaMessaggioErrore (Recupero Dati)");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
-
- RicezioneBusteExternalErrorGenerator generatoreErrorePA = null;
- try{
- generatoreErrorePA = new RicezioneBusteExternalErrorGenerator(this.log,
- this.idModulo, requestInfo, openspcoopstate.getStatoRichiesta());
- generatoreErrorePA.updateInformazioniCooperazione(soggettoFruitore, idServizio);
- generatoreErrorePA.updateInformazioniCooperazione(servizioApplicativoFruitore);
- generatoreErrorePA.updateTipoPdD(TipoPdD.APPLICATIVA);
- ejbUtils.setGeneratoreErrorePortaApplicativa(generatoreErrorePA);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RicezioneBusteExternalErrorGenerator.instanziazione");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- // Oneway versione 11
- boolean oneWayVersione11 = consegnaContenutiApplicativiMsg.isOneWayVersione11();
- ejbUtils.setOneWayVersione11(oneWayVersione11);
- if(idMessaggioPreBehaviour!=null){
- ejbUtils.setOneWayVersione11(true); // per forzare l'update su db
- }
- msgRequest.setOneWayVersione11(oneWayVersione11);
- OpenSPCoop2Message responseMessage = null;
-
- try{
- if(msgRequest.isRiconsegnaMessaggio(servizioApplicativo) == false){
- openspcoopstate.releaseResource();
- // Per i profili 'sincroni' dove vi e' un modulo in attesa non puo' sussistere una riconsegna del messaggio.
- if(existsModuloInAttesaRispostaApplicativa==false){
- msgDiag.logPersonalizzato("riconsegnaMessaggioPrematura");
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO,msgDiag.getMessaggio_replaceKeywords("riconsegnaMessaggioPrematura"));
- }else{
- String message = null;
- String posizione = null;
- if( (richiestaApplicativa!=null) && Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(richiestaApplicativa.getScenario())){
- message = "Messaggio eliminato durante il controllo di ri-consegna ("+servizioApplicativo+","+scenarioCooperazione+")";
- posizione = "msgRequest.isRiconsegnaMessaggio("+servizioApplicativo+","+scenarioCooperazione+")";
- }else{
- message = "Messaggio eliminato durante il controllo di ri-consegna ("+servizioApplicativo+","+scenarioCooperazione+",STATELESS)";
- posizione = "msgRequest.isRiconsegnaMessaggio("+servizioApplicativo+","+scenarioCooperazione+",STATELESS)";
- }
- msgDiag.logErroreGenerico(message,posizione);
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO,message);
- }
- this.log.info(ConsegnaContenutiApplicativi.ID_MODULO + "Riconsegna messaggio prematura");
- return esito;
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "msgRequest.isRiconsegnaMessaggio("+servizioApplicativo+")");
- ejbUtils.rollbackMessage("Errore verifica riconsegna messaggio", servizioApplicativo, esito);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- // Funzionalita'
- ConsegnaInOrdine ordineConsegna = null;
- // Consegna da effettuare
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (Consegna)...");
- ConnettoreMsg connettoreMsg = null;
- boolean consegnaPerRiferimento = false;
- boolean rispostaPerRiferimento = false;
- boolean integrationManager = false;
- ValidazioneContenutiApplicativi validazioneContenutoApplicativoApplicativo = null;
- List<Proprieta> proprietaPorta = null;
- if(Costanti.SCENARIO_CONSEGNA_CONTENUTI_APPLICATIVI.equals(scenarioCooperazione) ||
- Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA.equals(scenarioCooperazione) ){
- try{
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (getConsegnaRispostaAsincrona) [ConsegnaContenuti/AsincronoSimmetricoRisposta]...");
- connettoreMsg = configurazionePdDManager.getConsegnaRispostaAsincrona(sa,richiestaDelegata, requestInfo);
- if(Costanti.SCENARIO_CONSEGNA_CONTENUTI_APPLICATIVI.equals(scenarioCooperazione)){
- connettoreMsg.setCheckPresenzaHeaderPrimaSbustamento(true);
- }
- if(connettoreMsg!=null){
- connettoreMsg.initPolicyGestioneToken(configurazionePdDManager, requestInfo);
- }
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (consegnaRispostaAsincronaConGetMessage) [ConsegnaContenuti/AsincronoSimmetricoRisposta]...");
- integrationManager = configurazionePdDManager.consegnaRispostaAsincronaConGetMessage(sa);
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (getTipoValidazioneContenutoApplicativo) [ConsegnaContenuti/AsincronoSimmetricoRisposta]...");
- validazioneContenutoApplicativoApplicativo = configurazionePdDManager.getTipoValidazioneContenutoApplicativo(pd,implementazionePdDMittente, false);
- proprietaPorta = pd.getProprietaList();
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (consegnaRispostaAsincronaPerRiferimento) [ConsegnaContenuti/AsincronoSimmetricoRisposta]...");
- consegnaPerRiferimento = configurazionePdDManager.consegnaRispostaAsincronaPerRiferimento(sa);
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (consegnaRispostaAsincronaRispostaPerRiferimento) [ConsegnaContenuti/AsincronoSimmetricoRisposta]...");
- rispostaPerRiferimento = configurazionePdDManager.consegnaRispostaAsincronaRispostaPerRiferimento(sa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "ConsegnaAsincrona.getDatiConsegna(sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("[ConsegnaAsincrona] Connettore per consegna applicativa non definito:"+e.getMessage(),servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
- else if(Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING.equals(scenarioCooperazione)){
- try{
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (getConsegnaRispostaAsincrona) [AsincronoAsimmetricoPolling]...");
- connettoreMsg = configurazionePdDManager.getConsegnaRispostaAsincrona(sa,richiestaApplicativa, requestInfo);
- if(connettoreMsg!=null){
- connettoreMsg.initPolicyGestioneToken(configurazionePdDManager, requestInfo);
- }
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (consegnaRispostaAsincronaConGetMessage) [ConsegnaContenuti/AsincronoSimmetricoRisposta]...");
- integrationManager = configurazionePdDManager.consegnaRispostaAsincronaConGetMessage(sa);
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (getTipoValidazioneContenutoApplicativo) [AsincronoAsimmetricoPolling]...");
- validazioneContenutoApplicativoApplicativo = configurazionePdDManager.getTipoValidazioneContenutoApplicativo(pa,implementazionePdDMittente, false);
- proprietaPorta = pa.getProprietaList();
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (consegnaRispostaAsincronaPerRiferimento) [AsincronoAsimmetricoPolling]...");
- consegnaPerRiferimento = configurazionePdDManager.consegnaRispostaAsincronaPerRiferimento(sa);
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (consegnaRispostaAsincronaRispostaPerRiferimento) [AsincronoAsimmetricoPolling]...");
- rispostaPerRiferimento = configurazionePdDManager.consegnaRispostaAsincronaRispostaPerRiferimento(sa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "AsincronoSimmetricoPolling.getDatiConsegna(sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("[AsincronoSimmetricoPolling] Connettore per consegna applicativa non definito:"+e.getMessage(),servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }else{
- try{
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (getInvocazioneServizio)...");
- connettoreMsg = configurazionePdDManager.getInvocazioneServizio(sa,richiestaApplicativa, requestInfo);
- if(connettoreMsg!=null){
- connettoreMsg.initPolicyGestioneToken(configurazionePdDManager, requestInfo);
- }
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (consegnaRispostaAsincronaConGetMessage) [ConsegnaContenuti/AsincronoSimmetricoRisposta]...");
- integrationManager = configurazionePdDManager.invocazioneServizioConGetMessage(sa);
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (getTipoValidazioneContenutoApplicativo)...");
- validazioneContenutoApplicativoApplicativo = configurazionePdDManager.getTipoValidazioneContenutoApplicativo(pa,implementazionePdDMittente, false);
- proprietaPorta = pa.getProprietaList();
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (invocazioneServizioPerRiferimento)...");
- consegnaPerRiferimento = configurazionePdDManager.invocazioneServizioPerRiferimento(sa);
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (invocazioneServizioRispostaPerRiferimento)...");
- rispostaPerRiferimento = configurazionePdDManager.invocazioneServizioRispostaPerRiferimento(sa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "InvocazioneServizio.getDatiConsegna(sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("Connettore per consegna applicativa non definito:"+e.getMessage(),servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
- msgDiag.mediumDebug("Check parametri...");
- if(connettoreMsg==null){
- msgDiag.logErroreGenerico("Connettore non definito nella configurazione (is null)", "getDatiConsegna(sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("Connettore per consegna applicativa non definito per il sa ["+servizioApplicativo+"]",servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO, "Connettore per consegna applicativa non definito per il sa ["+servizioApplicativo+"]");
- return esito;
- }
- connettoreMsg.setProtocolFactory(protocolFactory);
- connettoreMsg.setGestioneManifest(gestioneManifest);
- connettoreMsg.setProprietaManifestAttachments(proprietaManifestAttachments);
- connettoreMsg.setLocalForward(localForward);
- if(transazioneApplicativoServer!=null) {
- transazioneApplicativoServer.setConsegnaIntegrationManager(integrationManager);
- connettoreMsg.setTransazioneApplicativoServer(transazioneApplicativoServer);
- connettoreMsg.setIdPortaApplicativa(idPA);
- connettoreMsg.setDataConsegnaTransazioneApplicativoServer(dataConsegna);
- }
- ForwardProxy forwardProxy = null;
- if(configurazionePdDManager.isForwardProxyEnabled(requestInfo)) {
- try {
- forwardProxy = configurazionePdDManager.getForwardProxyConfigErogazione(identitaPdD, idServizio, null, requestInfo);
- }catch(Exception e) {
- msgDiag.logErroreGenerico(e, "Configurazione ForwardProxy (sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("Configurazione del connettore errata per la funzionalità govway-proxy; sa ["+servizioApplicativo+"]",servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO, "Configurazione del connettore errata per la funzionalità govway-proxy; sa ["+servizioApplicativo+"]");
- return esito;
- }
- }
- connettoreMsg.setForwardProxy(forwardProxy);
- connettoreMsg.setIdAccordo(idAccordoServizio);
- // Identificativo di una risposta.
- String idMessageResponse = null;
- if(existsModuloInAttesaRispostaApplicativa){
- msgDiag.mediumDebug("Creazione id risposta...");
- try{
- org.openspcoop2.protocol.engine.builder.Imbustamento imbustatore =
- new org.openspcoop2.protocol.engine.builder.Imbustamento(this.log,protocolFactory,openspcoopstate.getStatoRichiesta());
- idMessageResponse =
- imbustatore.buildID(identitaPdD,
- (String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE),
- this.propertiesReader.getGestioneSerializableDBAttesaAttiva(),
- this.propertiesReader.getGestioneSerializableDBCheckInterval(),
- RuoloMessaggio.RISPOSTA);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "imbustatore.buildID(idMessageResponse)");
- //if(existsModuloInAttesaRispostaApplicativa) {
- try{
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_507_COSTRUZIONE_IDENTIFICATIVO),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (consegnaMessagePrimaTrasformazione!=null ? consegnaMessagePrimaTrasformazione.getParseException() : null),
- pddContext);
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "imbustatore.buildID(idMessageResponse)");
- }catch(Exception sendError){
- ejbUtils.rollbackMessage("Creazione id di risposta (sendRispostaApplicativa) fallita", esito);
- esito.setStatoInvocazioneErroreNonGestito(sendError);
- esito.setEsitoInvocazione(false);
- }
- //}else{
- // ejbUtils.rollbackMessage("Creazione id di risposta fallita", esito);
- // esito.setStatoInvocazioneErroreNonGestito(e);
- // esito.setEsitoInvocazione(false);
- //}
- openspcoopstate.releaseResource();
- return esito;
- }
- // Aggiornamento Informazioni
- msgDiag.setIdMessaggioRisposta(idMessageResponse);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RISPOSTA, idMessageResponse);
- }
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (Risposta)...");
- // Modalita' gestione risposta (Sincrona/Fault/Ricevute...)
- // Per i profili diversi dal sincrono e' possibile impostare dove far ritornare l'errore
- boolean newConnectionForResponse = false;
- if(Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione)){
- if( (consegnaContenutiApplicativiMsg.isStateless()==false) && (!existsModuloInAttesaRispostaApplicativa) ){
- newConnectionForResponse = configurazionePdDManager.newConnectionForResponse();
- }
- }else if( (ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())==false) &&
- (consegnaContenutiApplicativiMsg.isStateless()==false) ){
- newConnectionForResponse = configurazionePdDManager.newConnectionForResponse();
- }
- ejbUtils.setReplyOnNewConnection(newConnectionForResponse);
- // Gestione indirizzo telematico
- boolean gestioneIndirizzoTelematico = false;
- if(consegnaContenutiApplicativiMsg.isStateless()==false){
- gestioneIndirizzoTelematico = configurazionePdDManager.isUtilizzoIndirizzoTelematico();
- }
- ejbUtils.setUtilizzoIndirizzoTelematico(gestioneIndirizzoTelematico);
- IProtocolVersionManager protocolManager = null;
- boolean isBlockedTransaction_responseMessageWithTransportCodeError = false;
- try{
- protocolManager = protocolFactory.createProtocolVersionManager(profiloGestione);
- isBlockedTransaction_responseMessageWithTransportCodeError =
- protocolManager.isBlockedTransaction_responseMessageWithTransportCodeError();
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "ProtocolFactory.createProtocolManager("+profiloGestione+")");
- ejbUtils.rollbackMessage("ProtocolFactory.createProtocolManager("+profiloGestione+"):"+e.getMessage(),servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- boolean consegnaInOrdine = false;
- // Sequenza: deve essere abilitata la consegna affidabile + la collaborazione e infine la consegna in ordine e non deve essere richiesto il profilo linee guida 1.0
- Busta bustaIndicazioneConsegnaInOrdine = null;
- if(Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione)){
-
- if(bustaRichiesta!=null) {
- bustaIndicazioneConsegnaInOrdine = bustaRichiesta.newInstance();
- }
- else {
- bustaIndicazioneConsegnaInOrdine = new Busta(protocolFactory.getProtocol());
- }
- bustaIndicazioneConsegnaInOrdine.setProfiloDiCollaborazione(profiloCollaborazione);
-
- switch (protocolManager.getConsegnaInOrdine(bustaIndicazioneConsegnaInOrdine)) {
- case ABILITATA:
- consegnaInOrdine = true;
- break;
- case DISABILITATA:
- consegnaInOrdine = false;
- break;
- default:
- boolean gestioneConsegnaInOrdineAbilitata = this.propertiesReader.isGestioneRiscontri(implementazionePdDMittente) &&
- this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente) &&
- this.propertiesReader.isGestioneConsegnaInOrdine(implementazionePdDMittente);
- consegnaInOrdine = gestioneConsegnaInOrdineAbilitata &&
- bustaRichiesta!=null && bustaRichiesta.getSequenza()!=-1;
- break;
- }
- }
-
- // Punto di inizio per la transazione.
- IConnettore connectorSenderForDisconnect = null;
- String location = "";
- OpenSPCoop2Message consegnaMessageTrasformato = null;
- long responseContentLength = -1;
- boolean useResponseForParseException = false;
- try{
- /* ---------------- Check per consegna in ordine ----------------*/
- if(consegnaInOrdine){
- if(oneWayVersione11 || openspcoopstate instanceof OpenSPCoopStateful){
- msgDiag.mediumDebug("Controllo consegna in ordine...");
- try{
- ordineConsegna = new ConsegnaInOrdine(openspcoopstate.getStatoRichiesta(),protocolFactory);
- if(ordineConsegna.isConsegnaInOrdine(bustaRichiesta,
- this.propertiesReader.getGestioneSerializableDBAttesaAttiva(),
- this.propertiesReader.getGestioneSerializableDBCheckInterval()) == false){
- // congelamento busta
- msgDiag.addKeyword(CostantiPdD.KEY_SEQUENZA_ATTESA, ordineConsegna.getSequenzaAttesa()+"");
- if(ordineConsegna.getSequenzaAttesa()>bustaRichiesta.getSequenza()){
- msgDiag.logPersonalizzato("consegnaInOrdine.messaggioGiaConsegnato");
- ejbUtils.releaseInboxMessage(true);
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.messaggioGiaConsegnato"));
- }else{
- msgDiag.logPersonalizzato("consegnaInOrdine.messaggioFuoriOrdine");
- ejbUtils.rollbackMessage(msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.messaggioFuoriOrdine"), servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.messaggioFuoriOrdine"));
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }catch(Exception e){
- this.log.error("Riscontrato errore durante la gestione della sequenza per la consegna in ordine",e);
- msgDiag.logErroreGenerico(e, "GetioneSequenzaInOrdine");
- ejbUtils.rollbackMessage("Errore verifica consegna in ordine: "+e.getMessage(), servizioApplicativo, esito);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
- }
- /* ------------ Ricostruzione Messaggio Soap da spedire ------------- */
- msgDiag.mediumDebug("Ricostruzione SOAPEnvelope di richiesta/consegna...");
- try{
- if(consegnaMessagePrimaTrasformazione==null) {
- if(consegnaPerRiferimento==false){
- if(tipoMessaggioDaNotificare_notificaAsincrona!=null) {
- switch (tipoMessaggioDaNotificare_notificaAsincrona) {
- case RICHIESTA:
- consegnaMessagePrimaTrasformazione = msgRequest.getMessage();
- break;
- case RISPOSTA:
- consegnaMessagePrimaTrasformazione = msgRequest.getResponseMessage(true, true); //se deve essere consegnata solamente la risposta, questa deve esistere
- break;
- case ENTRAMBI:
- consegnaMessagePrimaTrasformazione = msgRequest.getMessage();
- consegnaResponseMessagePrimaTrasformazione = msgRequest.getResponseMessage(false, false); // secondo parametro false perchè la risposta può non esserci (es. vuota o errore di connessione) ma è stato indicato di inviare una notifica
- break;
- }
- }
- else {
- consegnaMessagePrimaTrasformazione = msgRequest.getMessage();
- }
- //Devo farlo dopo aver applicato la trasformazione
- //correctForwardPathNotifiche(transazioneApplicativoServer, consegnaMessagePrimaTrasformazione, protocolFactory);
- }else{
- // consegnaMessage deve contenere il messaggio necessario all'invocazione del metodo pubblicaEvento
- consegnaMessagePrimaTrasformazione =
- msgRequest.buildRichiestaPubblicazioneMessaggio_RepositoryMessaggi(soggettoFruitore, tipoServizio,servizio,azione);
- }
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "msgRequest.getMessage()");
- if(existsModuloInAttesaRispostaApplicativa) {
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_509_READ_REQUEST_MSG),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (consegnaMessagePrimaTrasformazione!=null ? consegnaMessagePrimaTrasformazione.getParseException() : null),
- pddContext);
-
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "msgRequest.getMessage()");
- esito.setEsitoInvocazione(true);
- }else{
- ejbUtils.rollbackMessage("Ricostruzione del messaggio Soap da Spedire non riuscita.",servizioApplicativo, esito);
- esito.setStatoInvocazioneErroreNonGestito(e);
- esito.setEsitoInvocazione(false);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- /* ----- Header Integrazione ------ */
- String originalID = bustaRichiesta!=null ? bustaRichiesta.getID() : null;
- if(idMessaggioPreBehaviour!=null){
- bustaRichiesta.setID(idMessaggioPreBehaviour);
- }
- msgDiag.mediumDebug("Gestione header di integrazione per la richiesta...");
- HeaderIntegrazione headerIntegrazione = new HeaderIntegrazione(idTransazione);
- if(soggettoFruitoreHeaderIntegrazione!=null){
- headerIntegrazione.getBusta().setTipoMittente(soggettoFruitoreHeaderIntegrazione.getTipo());
- headerIntegrazione.getBusta().setMittente(soggettoFruitoreHeaderIntegrazione.getNome());
- }else if(soggettoFruitore!=null){
- headerIntegrazione.getBusta().setTipoMittente(soggettoFruitore.getTipo());
- headerIntegrazione.getBusta().setMittente(soggettoFruitore.getNome());
- }
- if(servizioHeaderIntegrazione!=null){
- headerIntegrazione.getBusta().setTipoDestinatario(servizioHeaderIntegrazione.getSoggettoErogatore().getTipo());
- headerIntegrazione.getBusta().setDestinatario(servizioHeaderIntegrazione.getSoggettoErogatore().getNome());
- headerIntegrazione.getBusta().setTipoServizio(servizioHeaderIntegrazione.getTipo());
- headerIntegrazione.getBusta().setServizio(servizioHeaderIntegrazione.getNome());
- headerIntegrazione.getBusta().setVersioneServizio(servizioHeaderIntegrazione.getVersione());
- headerIntegrazione.getBusta().setAzione(servizioHeaderIntegrazione.getAzione());
- }else{
- headerIntegrazione.getBusta().setTipoDestinatario(idServizio.getSoggettoErogatore().getTipo());
- headerIntegrazione.getBusta().setDestinatario(idServizio.getSoggettoErogatore().getNome());
- headerIntegrazione.getBusta().setTipoServizio(idServizio.getTipo());
- headerIntegrazione.getBusta().setServizio(idServizio.getNome());
- headerIntegrazione.getBusta().setVersioneServizio(idServizio.getVersione());
- headerIntegrazione.getBusta().setAzione(idServizio.getAzione());
- }
- if(bustaRichiesta!=null) {
- headerIntegrazione.getBusta().setID(bustaRichiesta.getID());
- headerIntegrazione.getBusta().setRiferimentoMessaggio(bustaRichiesta.getRiferimentoMessaggio());
- headerIntegrazione.getBusta().setIdCollaborazione(bustaRichiesta.getCollaborazione());
- headerIntegrazione.getBusta().setProfiloDiCollaborazione(bustaRichiesta.getProfiloDiCollaborazione());
- }
- headerIntegrazione.setIdApplicativo(idCorrelazioneApplicativa);
- headerIntegrazione.setServizioApplicativo(servizioApplicativoFruitore);
- if(servizioApplicativoToken!=null) {
- headerIntegrazione.setServizioApplicativoToken(servizioApplicativoToken.getNome());
- if(servizioApplicativoToken.getIdSoggettoProprietario()!=null) {
- headerIntegrazione.setTipoSoggettoProprietarioApplicativoToken(servizioApplicativoToken.getIdSoggettoProprietario().getTipo());
- headerIntegrazione.setNomeSoggettoProprietarioApplicativoToken(servizioApplicativoToken.getIdSoggettoProprietario().getNome());
- }
- if(servizioApplicativoFruitore==null && richiestaApplicativa!=null && Costanti.MODIPA_PROTOCOL_NAME.equals(protocolFactory.getProtocol())) {
- // inserisco come servizioApplicativoFruitore la stessa informazione del token. Sono lo stesso
- headerIntegrazione.setServizioApplicativo(servizioApplicativoToken.getNome());
- }
- }
- Map<String, List<String>> propertiesTrasporto = new HashMap<>();
- Map<String, List<String>> propertiesUrlBased = new HashMap<>();
- if(tipiIntegrazione==null){
- if(ConsegnaContenutiApplicativi.defaultPerProtocolloGestoreIntegrazionePA.containsKey(protocolFactory.getProtocol())){
- tipiIntegrazione = ConsegnaContenutiApplicativi.defaultPerProtocolloGestoreIntegrazionePA.get(protocolFactory.getProtocol());
- }else{
- tipiIntegrazione = ConsegnaContenutiApplicativi.defaultGestoriIntegrazionePA;
- }
- }
-
- OutRequestPAMessage outRequestPAMessage = new OutRequestPAMessage();
- outRequestPAMessage.setBustaRichiesta(bustaRichiesta);
- outRequestPAMessage.setMessage(consegnaMessagePrimaTrasformazione);
- if(pa!=null)
- outRequestPAMessage.setPortaApplicativa(pa);
- else
- outRequestPAMessage.setPortaDelegata(pd);
- outRequestPAMessage.setHeaders(propertiesTrasporto);
- outRequestPAMessage.setParameters(propertiesUrlBased);
- if(servizioHeaderIntegrazione!=null){
- outRequestPAMessage.setServizio(servizioHeaderIntegrazione);
- }else{
- outRequestPAMessage.setServizio(idServizio);
- }
- if(soggettoFruitoreHeaderIntegrazione!=null){
- outRequestPAMessage.setSoggettoMittente(soggettoFruitoreHeaderIntegrazione);
- }else{
- outRequestPAMessage.setSoggettoMittente(soggettoFruitore);
- }
- for(int i=0; i<tipiIntegrazione.length;i++){
- try{
- IGestoreIntegrazionePA gestore = null;
- try{
- gestore = (IGestoreIntegrazionePA) this.pluginLoader.newIntegrazionePortaApplicativa(tipiIntegrazione[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 erogazione di tipo ["+tipiIntegrazione[i]+"]: "+e.getMessage());
- }
- if(gestore instanceof IGestoreIntegrazionePASoap){
- if(this.propertiesReader.processHeaderIntegrazionePARequest(false)){
- if(this.propertiesReader.deleteHeaderIntegrazioneRequestPA()){
- gestore.setOutRequestHeader(headerIntegrazione,outRequestPAMessage);
- }
- else{
- // gia effettuato l'update dell'header in RicezioneBuste
- }
- }else{
- gestore.setOutRequestHeader(headerIntegrazione,outRequestPAMessage);
- }
- }else{
- gestore.setOutRequestHeader(headerIntegrazione,outRequestPAMessage);
- }
- }else{
- throw new Exception("Gestore non inizializzato");
- }
- }catch(Exception e){
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_HEADER_INTEGRAZIONE,tipiIntegrazione[i]);
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("headerIntegrazione.creazioneFallita");
- this.log.error(msgDiag.getMessaggio_replaceKeywords("headerIntegrazione.creazioneFallita"), e);
- }
- }
-
-
-
-
-
-
- /* ------------ Trasformazione Richiesta -------------- */
-
- GestoreTrasformazioni gestoreTrasformazioni = null;
- consegnaMessageTrasformato = consegnaMessagePrimaTrasformazione;
- if(trasformazioni!=null) {
- try {
- if(richiestaApplicativa!=null && !localForward){
- gestoreTrasformazioni = new GestoreTrasformazioni(this.log, msgDiag, idServizio, soggettoFruitore, servizioApplicativoFruitore,
- trasformazioni, transactionNullable, pddContext, requestInfo, tipoPdD,
- generatoreErrorePA,
- configurazionePdDManager,
- idPA);
- }
- else {
- gestoreTrasformazioni = new GestoreTrasformazioni(this.log, msgDiag, idServizio, soggettoFruitore, servizioApplicativoFruitore,
- trasformazioni, transactionNullable, pddContext, requestInfo, tipoPdD,
- generatoreErrorePA,
- configurazionePdDManager,
- idPD);
- }
- if(transazioneApplicativoServer!=null) {
- gestoreTrasformazioni.setNomeConnettore(nomeConnettoreMultiplo);
- gestoreTrasformazioni.setNomeServizioApplicativoErogatore(nomeServizioApplicativoErogatoreConnettoreMultiplo);
- }
- else {
- gestoreTrasformazioni.setNomeConnettore(nomeConnettoreAPIImplementation);
- gestoreTrasformazioni.setNomeServizioApplicativoErogatore(nomeServizioApplicativoErogatoreAPIImplementation);
- }
- if(tipoMessaggioDaNotificare_notificaAsincrona!=null) {
- consegnaMessageTrasformato = gestoreTrasformazioni.trasformazioneNotifica(consegnaMessagePrimaTrasformazione, bustaRichiesta,
- tipoMessaggioDaNotificare_notificaAsincrona, consegnaResponseMessagePrimaTrasformazione, notificaTransactionContext);
- if(!gestoreTrasformazioni.isTrasformazioneContenutoRichiestaEffettuata() && consegnaResponseMessagePrimaTrasformazione!=null) {
- // si entra in questo caso solo se è stato scelto ENTRAMBI e una trasformazione non ha modificato il messaggio
- consegnaMessageTrasformato = GestoreTrasformazioniUtilities.buildRequestResponseArchive(this.log, consegnaMessagePrimaTrasformazione, consegnaResponseMessagePrimaTrasformazione,
- this.propertiesReader.getNotificaRichiestaRisposta_consegnaContenutiApplicativi_archiveType());
- }
- }
- else {
- consegnaMessageTrasformato = gestoreTrasformazioni.trasformazioneRichiesta(consegnaMessagePrimaTrasformazione, bustaRichiesta);
- }
- }
- catch(GestoreTrasformazioniException e) {
-
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato( tipoMessaggioDaNotificare_notificaAsincrona!=null ? "trasformazione.processamentoNotificaInErrore" : "trasformazione.processamentoRichiestaInErrore");
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_TRASFORMAZIONE_RICHIESTA, "true");
-
- ErroreIntegrazione erroreIntegrazione = gestoreTrasformazioni.getErrore();
- if(erroreIntegrazione==null) {
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(e,CodiceErroreIntegrazione.CODICE_562_TRASFORMAZIONE);
- }
-
- String msgErrore = e.getMessage();
- if(existsModuloInAttesaRispostaApplicativa) {
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.TRANSFORMATION_RULE_REQUEST_FAILED;
- if(e.getOp2IntegrationFunctionError()!=null) {
- integrationFunctionError = e.getOp2IntegrationFunctionError();
- }
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
- if(e.getOpenSPCoop2ErrorMessage()!=null) {
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- e.getOpenSPCoop2ErrorMessage(), msgErrore,
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore);
- }
- else {
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- erroreIntegrazione,
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (consegnaMessagePrimaTrasformazione!=null ? consegnaMessagePrimaTrasformazione.getParseException() : null),
- pddContext);
- }
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErrore);
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
- /* ------------------- Definizione connettoreMsg -----------------------*/
-
- // mapping in valori delle keyword delle proprieta di trasporto protocol-properties.
- msgDiag.mediumDebug("Impostazione messaggio del connettore...");
- mappingProtocolProperties(connettoreMsg.getPropertiesTrasporto(), propertiesTrasporto,
- soggettoFruitoreHeaderIntegrazione, servizioHeaderIntegrazione, soggettoFruitore, idServizio, bustaRichiesta, idCorrelazioneApplicativa);
- mappingProtocolProperties(connettoreMsg.getPropertiesUrlBased(), propertiesUrlBased,
- soggettoFruitoreHeaderIntegrazione, servizioHeaderIntegrazione, soggettoFruitore, idServizio, bustaRichiesta, idCorrelazioneApplicativa);
- // definizione connettore
- connettoreMsg.setRequestMessage(consegnaMessageTrasformato);
- connettoreMsg.setIdModulo(ConsegnaContenutiApplicativi.ID_MODULO);
- connettoreMsg.setPropertiesTrasporto(propertiesTrasporto);
- connettoreMsg.setPropertiesUrlBased(propertiesUrlBased);
- connettoreMsg.setBusta(bustaRichiesta);
- connettoreMsg.setMsgDiagnostico(msgDiag);
- connettoreMsg.setState(openspcoopstate.getStatoRichiesta());
- if(consegnaMessagePrimaTrasformazione!=null && consegnaMessagePrimaTrasformazione.getTransportRequestContext()!=null) {
- connettoreMsg.setUrlInvocazionePorta(consegnaMessagePrimaTrasformazione.getTransportRequestContext().getUrlInvocazione_formBased());
- }
- if(bustaRichiesta!=null) {
- bustaRichiesta.setID(originalID);
- }
- /* ------------------- Preparo Spedizione -----------------------*/
- msgDiag.mediumDebug("Inizializzazione connettore per la spedizione...");
- // Connettore per consegna
- String tipoConnector = connettoreMsg.getTipoConnettore();
- if (pddContext.getObject(CostantiPdD.KEY_OVERRIDE_CONNETTORE) != null) {
- tipoConnector = pddContext.get(CostantiPdD.KEY_OVERRIDE_CONNETTORE).toString();
- }
-
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_CONNETTORE, tipoConnector);
- IConnettore connectorSender = null;
- // mapping per forward token
- TokenForward tokenForward = null;
- Object oTokenForward = consegnaMessageTrasformato.getContextProperty(org.openspcoop2.pdd.core.token.Costanti.MSG_CONTEXT_TOKEN_FORWARD);
- if(oTokenForward!=null) {
- tokenForward = (TokenForward) oTokenForward;
- }
- if(tokenForward!=null) {
- /**Vengono inviati header doppi se non iniziano con GovWay-
- if(tokenForward.getTrasporto()!=null && tokenForward.getTrasporto().size()>0) {
- propertiesTrasporto.putAll(tokenForward.getTrasporto());
- }
- if(tokenForward.getUrl()!=null && tokenForward.getUrl().size()>0) {
- propertiesUrlBased.putAll(tokenForward.getUrl());
- }*/
- tokenForward.add(consegnaMessageTrasformato);
- }
-
- // Risposte del connettore
- int codiceRitornato = -1;
- TransportResponseContext transportResponseContext = null;
- // Stato consegna tramite connettore
- boolean errorConsegna = false;
- boolean riconsegna = false;
- java.sql.Timestamp dataRiconsegna = null;
- String motivoErroreConsegna = null;
- boolean invokerNonSupportato = false;
- SOAPFault soapFault = null;
- ProblemRFC7807 restProblem = null;
- OpenSPCoop2MessageFactory faultMessageFactory = null;
- Exception eccezioneProcessamentoConnettore = null;
- // Carico connettore richiesto
- String connectorClass = null;
- Exception eInvokerNonSupportato = null;
- if(invokerNonSupportato==false){
- try{
- connectorSender = (IConnettore) this.pluginLoader.newConnettore(tipoConnector);
- }
- catch(Exception e){
- msgDiag.logErroreGenerico(e,"Inizializzazione Connettore"); // l'errore contiene gia tutte le informazioni
- invokerNonSupportato = true;
- eInvokerNonSupportato = e;
- }
- if(connectorSender!=null) {
- try {
- connectorClass = connectorSender.getClass().getName();
- AbstractCore.init(connectorSender, pddContext, protocolFactory);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"IConnettore.newInstance(tipo:"+tipoConnector+" class:"+connectorClass+")");
- invokerNonSupportato = true;
- eInvokerNonSupportato = e;
- }
- }
- if( (invokerNonSupportato == false) && (connectorSender == null)){
- msgDiag.logErroreGenerico("ConnectorSender is null","IConnettore.newInstance(tipo:"+tipoConnector+" class:"+connectorClass+")");
- invokerNonSupportato = true;
- }
- }
-
- // correggo eventuali contesti e parametri della url nel caso di consegna di una notifica
- try {
- correctForwardPathNotifiche(transazioneApplicativoServer, consegnaMessageTrasformato, protocolFactory);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"ConnettoreBaseHTTP.correctForwardPathNotifiche");
- invokerNonSupportato = true;
- eInvokerNonSupportato = e;
- }
-
- // Imposto tipo di richiesta
- HttpRequestMethod httpRequestMethod = null;
- if(connectorSender!=null){
- try{
- if(connectorSender instanceof ConnettoreBaseHTTP){
- ConnettoreBaseHTTP baseHttp = (ConnettoreBaseHTTP) connectorSender;
-
- if(metodoHttpDaNotificare_notificaAsincrona!=null) {
- baseHttp.setForceHttpMethod(metodoHttpDaNotificare_notificaAsincrona);
- }
-
- baseHttp.setHttpMethod(consegnaMessageTrasformato);
-
- if(ServiceBinding.REST.equals(consegnaMessageTrasformato.getServiceBinding())){
- httpRequestMethod = baseHttp.getHttpMethod();
- }
- }
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"ConnettoreBaseHTTP.setHttpMethod(tipo:"+tipoConnector+" class:"+connectorClass+")");
- invokerNonSupportato = true;
- eInvokerNonSupportato = e;
- }
- }
- // Location
- location = ConnettoreUtils.getAndReplaceLocationWithBustaValues(connectorSender, connettoreMsg, bustaRichiesta, pddContext, protocolFactory, this.log);
- if(location!=null){
- String locationWithUrl = ConnettoreUtils.buildLocationWithURLBasedParameter(this.log, consegnaMessageTrasformato, connettoreMsg.getTipoConnettore(), connettoreMsg.getPropertiesUrlBased(), location,
- protocolFactory, this.idModulo);
- locationWithUrl = ConnettoreUtils.addProxyInfoToLocationForHTTPConnector(connettoreMsg.getTipoConnettore(), connettoreMsg.getConnectorProperties(), locationWithUrl);
- locationWithUrl = ConnettoreUtils.addGovWayProxyInfoToLocationForHTTPConnector(connettoreMsg.getForwardProxy(),connectorSender, locationWithUrl);
- msgDiag.addKeyword(CostantiPdD.KEY_LOCATION, ConnettoreUtils.formatLocation(httpRequestMethod, locationWithUrl));
-
- pddContext.addObject(CostantiPdD.CONNETTORE_REQUEST_METHOD, httpRequestMethod);
- pddContext.addObject(CostantiPdD.CONNETTORE_REQUEST_URL, locationWithUrl);
- }
- else{
- msgDiag.addKeyword(CostantiPdD.KEY_LOCATION, "N.D.");
- }
- // timeout di default
- if(connettoreMsg.getConnectorProperties()==null){
- java.util.Map<String,String> propCon = new java.util.HashMap<>();
- connettoreMsg.setConnectorProperties(propCon);
- }
- if(connettoreMsg.getConnectorProperties().get(CostantiConnettori.CONNETTORE_CONNECTION_TIMEOUT)==null ||
- connettoreMsg.getConnectorProperties().get(CostantiConnettori.CONNETTORE_READ_CONNECTION_TIMEOUT)==null){
- DatiTempiRisposta datiTempiRisposta = ConnettoreUtilities.readDatiGlobaliTimeout(configurazionePdDManager, TipoPdD.APPLICATIVA, requestInfo, this.propertiesReader);
- if(connettoreMsg.getConnectorProperties().get(CostantiConnettori.CONNETTORE_CONNECTION_TIMEOUT)==null){
- connettoreMsg.getConnectorProperties().put(CostantiConnettori.CONNETTORE_CONNECTION_TIMEOUT,
- "" + ((datiTempiRisposta!=null && datiTempiRisposta.getConnectionTimeout()!=null) ? datiTempiRisposta.getConnectionTimeout().intValue() : this.propertiesReader.getConnectionTimeout_consegnaContenutiApplicativi()));
- connettoreMsg.getConnectorProperties().put(CostantiConnettori.CONNETTORE_CONNECTION_TIMEOUT_GLOBALE, "true" );
- }
- if(connettoreMsg.getConnectorProperties().get(CostantiConnettori.CONNETTORE_READ_CONNECTION_TIMEOUT)==null){
- connettoreMsg.getConnectorProperties().put(CostantiConnettori.CONNETTORE_READ_CONNECTION_TIMEOUT,
- "" + ((datiTempiRisposta!=null && datiTempiRisposta.getReadConnectionTimeout()!=null) ? datiTempiRisposta.getReadConnectionTimeout().intValue() : this.propertiesReader.getReadConnectionTimeout_consegnaContenutiApplicativi()));
- connettoreMsg.getConnectorProperties().put(CostantiConnettori.CONNETTORE_READ_CONNECTION_TIMEOUT_GLOBALE, "true" );
- }
- }
- // behaviourForwardToConfiguration
- if(behaviourForwardToConfiguration!=null){
- if(behaviourForwardToConfiguration.getSbustamentoInformazioniProtocollo()!=null){
- if(org.openspcoop2.pdd.core.behaviour.StatoFunzionalita.ABILITATA.equals(behaviourForwardToConfiguration.getSbustamentoInformazioniProtocollo())){
- connettoreMsg.setSbustamentoInformazioniProtocollo(true);
- }
- else if(org.openspcoop2.pdd.core.behaviour.StatoFunzionalita.DISABILITATA.equals(behaviourForwardToConfiguration.getSbustamentoInformazioniProtocollo())){
- connettoreMsg.setSbustamentoInformazioniProtocollo(false);
- }
- }
- if(behaviourForwardToConfiguration.getSbustamentoSoap()!=null){
- if(org.openspcoop2.pdd.core.behaviour.StatoFunzionalita.ABILITATA.equals(behaviourForwardToConfiguration.getSbustamentoSoap())){
- connettoreMsg.setSbustamentoSOAP(true);
- }
- else if(org.openspcoop2.pdd.core.behaviour.StatoFunzionalita.DISABILITATA.equals(behaviourForwardToConfiguration.getSbustamentoSoap())){
- connettoreMsg.setSbustamentoSOAP(false);
- }
- }
- }
-
- // GestioneErrore
- GestioneErrore gestioneConsegnaConnettore = null;
- if(gestioneErroreBehaviour!=null) {
- gestioneConsegnaConnettore = gestioneErroreBehaviour;
- }
- else {
- if(Costanti.SCENARIO_CONSEGNA_CONTENUTI_APPLICATIVI.equals(scenarioCooperazione) ||
- Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA.equals(scenarioCooperazione) ){
- try{
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (getGestioneErroreConnettoreRispostaAsincrona) [ConsegnaContenuti/AsincronoSimmetricoRisposta]...");
- gestioneConsegnaConnettore = configurazionePdDManager.getGestioneErroreConnettoreRispostaAsincrona(protocolFactory, consegnaMessageTrasformato.getServiceBinding(), sa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "ConsegnaAsincrona.getDatiConsegna(sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("[ConsegnaAsincrona] Connettore per consegna applicativa non definito:"+e.getMessage(),servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
-
-
- }
- else if(Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING.equals(scenarioCooperazione)){
- try{
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (getGestioneErroreConnettoreRispostaAsincrona) [AsincronoAsimmetricoPolling]...");
- gestioneConsegnaConnettore = configurazionePdDManager.getGestioneErroreConnettoreRispostaAsincrona(protocolFactory, consegnaMessageTrasformato.getServiceBinding(), sa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "AsincronoSimmetricoPolling.getDatiConsegna(sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("[AsincronoSimmetricoPolling] Connettore per consegna applicativa non definito:"+e.getMessage(),servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }else{
- try{
- gestioneConsegnaConnettore = configurazionePdDManager.getGestioneErroreConnettoreInvocazioneServizio(protocolFactory, consegnaMessageTrasformato.getServiceBinding(), sa);
- msgDiag.mediumDebug("Inizializzo contesto per la gestione (invocazioneServizioPerRiferimento)...");
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "InvocazioneServizio.getDatiConsegna(sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("Connettore per consegna applicativa non definito:"+e.getMessage(),servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
- }
- if(gestioneConsegnaConnettore==null){
- msgDiag.logErroreGenerico("Gestore Errore di consegna non definito nella configurazione (is null)", "getDatiConsegna(sa:"+servizioApplicativo+")");
- ejbUtils.rollbackMessage("Gestione Errore di consegna non definito per il sa ["+servizioApplicativo+"]",servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO, "Gestione Errore di consegna non definito per il sa ["+servizioApplicativo+"]");
- return esito;
- }
-
-
-
-
-
-
-
- /* ------------------- OutRequestHandler -----------------------*/
- OutRequestContext outRequestContext = null;
- try{
- outRequestContext = new OutRequestContext(this.log,protocolFactory,openspcoopstate.getStatoRichiesta());
-
- // Informazioni connettore in uscita
- InfoConnettoreUscita infoConnettoreUscita = new InfoConnettoreUscita();
- infoConnettoreUscita.setLocation(location);
- infoConnettoreUscita.setProperties(connettoreMsg.getConnectorProperties());
- infoConnettoreUscita.setHeaders(connettoreMsg.getPropertiesTrasporto());
- infoConnettoreUscita.setParameters(connettoreMsg.getPropertiesUrlBased());
- infoConnettoreUscita.setSbustamentoSoap(connettoreMsg.isSbustamentoSOAP());
- infoConnettoreUscita.setSbustamentoInformazioniProtocollo(connettoreMsg.isSbustamentoInformazioniProtocollo());
- infoConnettoreUscita.setTipoAutenticazione(connettoreMsg.getAutenticazione());
- infoConnettoreUscita.setCredenziali(connettoreMsg.getCredenziali());
- infoConnettoreUscita.setTipoConnettore(connettoreMsg.getTipoConnettore());
- outRequestContext.setConnettore(infoConnettoreUscita);
-
- // Informazioni messaggio
- outRequestContext.setMessaggio(consegnaMessageTrasformato);
-
- // TransazioneApplicativoServer
- outRequestContext.setTransazioneApplicativoServer(transazioneApplicativoServer);
-
- // Contesto
- if(protocolContext==null) {
- protocolContext = new ProtocolContext();
- }
- protocolContext.setIdRichiesta(idMessaggioConsegna);
- if(idMessaggioPreBehaviour!=null){
- protocolContext.setIdRichiesta(idMessaggioPreBehaviour);
- }
- protocolContext.setFruitore(soggettoFruitore);
- if(bustaRichiesta!=null){
- protocolContext.setIndirizzoFruitore(bustaRichiesta.getIndirizzoMittente());
- }
- if(idServizio!=null){
- protocolContext.setErogatore(idServizio.getSoggettoErogatore());
- if(bustaRichiesta!=null){
- protocolContext.setIndirizzoErogatore(bustaRichiesta.getIndirizzoDestinatario());
- }
- protocolContext.setTipoServizio(idServizio.getTipo());
- protocolContext.setServizio(idServizio.getNome());
- protocolContext.setVersioneServizio(idServizio.getVersione());
- protocolContext.setAzione(idServizio.getAzione());
- }
- if(idAccordoServizio!=null){
- protocolContext.setIdAccordo(idAccordoServizio);
- }
- else if(idServizio!=null && idServizio.getUriAccordoServizioParteComune()!=null){
- protocolContext.setIdAccordo(IDAccordoFactory.getInstance().getIDAccordoFromUri(idServizio.getUriAccordoServizioParteComune()));
- }
- String profiloCollorazioneValue = null;
- if(bustaRichiesta!=null){
- profiloCollorazioneValue = bustaRichiesta.getProfiloDiCollaborazioneValue();
- }
- protocolContext.setProfiloCollaborazione(profiloCollaborazione,profiloCollorazioneValue);
- if(bustaRichiesta!=null){
- protocolContext.setCollaborazione(bustaRichiesta.getCollaborazione());
- }
- protocolContext.setDominio(msgDiag.getDominio());
- protocolContext.setScenarioCooperazione(scenarioCooperazione);
- outRequestContext.setProtocollo(protocolContext);
-
- // Integrazione
- if(integrationContext==null) {
- integrationContext = new IntegrationContext();
- }
- integrationContext.setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
- integrationContext.setServizioApplicativoFruitore(servizioApplicativoFruitore);
- integrationContext.addServizioApplicativoErogatore(servizioApplicativo);
- integrationContext.setGestioneStateless(portaDiTipoStateless);
- integrationContext.setIdPA(idPA);
- integrationContext.setIdPD(idPD);
- outRequestContext.setIntegrazione(integrationContext);
-
- // Altre informazioni
- outRequestContext.setDataElaborazioneMessaggio(DateManager.getDate());
- outRequestContext.setPddContext(pddContext);
- outRequestContext.setTipoPorta(TipoPdD.APPLICATIVA);
- outRequestContext.setIdModulo(this.idModulo);
- // Invocazione handler
- GestoreHandlers.outRequest(outRequestContext, msgDiag, this.log);
-
- // Riporto messaggio
- consegnaMessageTrasformato = outRequestContext.getMessaggio();
-
- // Salvo handler
- connettoreMsg.setOutRequestContext(outRequestContext);
-
- }
- catch(Exception e){
- String msgErrore = null;
- if(e!=null && e.getMessage()!=null){
- if(e.getMessage().length()>150){
- msgErrore = e.getMessage().substring(0, 150);
- }else{
- msgErrore = e.getMessage();
- }
- }
- ErroreIntegrazione erroreIntegrazione = null;
- IntegrationFunctionError integrationFunctionError = null;
- if(e instanceof HandlerException){
- HandlerException he = (HandlerException) e;
- if(he.isEmettiDiagnostico()){
- msgDiag.logErroreGenerico(e, ((HandlerException)e).getIdentitaHandler());
- }
- msgErrore = ((HandlerException)e).getIdentitaHandler()+" error: "+msgErrore;
- if(existsModuloInAttesaRispostaApplicativa) {
- erroreIntegrazione = he.convertToErroreIntegrazione();
- integrationFunctionError = he.getIntegrationFunctionError();
- }
- }else{
- msgDiag.logErroreGenerico(e, "OutRequestHandler");
- msgErrore = "OutRequestHandler error: "+msgErrore;
- }
- if(existsModuloInAttesaRispostaApplicativa) {
-
- if(erroreIntegrazione==null){
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_543_HANDLER_OUT_REQUEST);
- }
-
- if(integrationFunctionError!=null) {
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
- }
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- erroreIntegrazione,
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (consegnaMessagePrimaTrasformazione!=null ? consegnaMessagePrimaTrasformazione.getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErrore);
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
-
-
-
-
-
-
-
-
-
-
-
-
- /* --------------- REFRESH LOCATION ----------------- */
- // L'handler puo' aggiornare le properties che contengono le proprieta' del connettore.
- location = ConnettoreUtils.getAndReplaceLocationWithBustaValues(connectorSender, connettoreMsg, bustaRichiesta, pddContext, protocolFactory, this.log);
- if(location!=null){
- String locationWithUrl = ConnettoreUtils.buildLocationWithURLBasedParameter(this.log, consegnaMessageTrasformato, connettoreMsg.getTipoConnettore(), connettoreMsg.getPropertiesUrlBased(), location,
- protocolFactory, this.idModulo);
- locationWithUrl = ConnettoreUtils.addProxyInfoToLocationForHTTPConnector(connettoreMsg.getTipoConnettore(), connettoreMsg.getConnectorProperties(), locationWithUrl);
- locationWithUrl = ConnettoreUtils.addGovWayProxyInfoToLocationForHTTPConnector(connettoreMsg.getForwardProxy(),connectorSender, locationWithUrl);
- msgDiag.addKeyword(CostantiPdD.KEY_LOCATION, ConnettoreUtils.formatLocation(httpRequestMethod, locationWithUrl));
-
- pddContext.addObject(CostantiPdD.CONNETTORE_REQUEST_METHOD, httpRequestMethod);
- pddContext.addObject(CostantiPdD.CONNETTORE_REQUEST_URL, locationWithUrl);
- }
- else{
- msgDiag.addKeyword(CostantiPdD.KEY_LOCATION, "N.D.");
- }
-
-
-
-
-
-
-
-
- /* ------------------- add start parameter -----------------------*/
- if(CostantiPdD.isEnabledAddSWAStartParameterIfNotPresent(consegnaMessageTrasformato)) {
- SoapUtils.addSWAStartParameterIfNotPresent(consegnaMessageTrasformato);
- }
-
-
-
-
-
-
-
-
-
- /* ------------------- Dump -----------------------*/
-
- // Invoco il metodo getMessage del ConnettoreMsg per provocare l'eventuale sbustamento delle informazioni di protocollo
- connettoreMsg.getRequestMessage(requestInfo, pddContext);
-
- String idMessaggioDumpRichiesta = idMessaggioConsegna;
- if(idMessaggioPreBehaviour!=null){
- idMessaggioDumpRichiesta = idMessaggioPreBehaviour;
- }
-
- Dump dumpApplicativoRichiesta = new Dump(identitaPdD,ConsegnaContenutiApplicativi.ID_MODULO,idMessaggioDumpRichiesta,
- soggettoFruitore,idServizio,TipoPdD.APPLICATIVA,msgDiag.getPorta(),pddContext,
- openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta(),
- dumpConfig);
- if(transazioneApplicativoServer!=null) {
- dumpApplicativoRichiesta.setTransazioneApplicativoServer(transazioneApplicativoServer, idPA, dataConsegna);
- }
- dumpApplicativoRichiesta.dumpRichiestaUscita(consegnaMessageTrasformato, outRequestContext.getConnettore());
-
-
-
-
-
-
-
-
-
-
-
-
-
- /* -------------------
- Rilascio Risorse (Le riprendero' dopo aver ottenuto la risposta, se necessario)
- Le informazioni nel DB sono state utilizzate fino a questo punto solo in lettura.
- Eventuali spedizioni JMS sono state effettuate e le risorse gia' rilasciate (non arrivero a questo punto)
- -----------------------*/
- msgDiag.mediumDebug("Rilascio connessione al database...");
- openspcoopstate.releaseResource();
-
-
-
-
-
-
-
- // --------------------- spedizione --------------------------
-
- Date dataPrimaInvocazioneConnettore = null;
- Date dataTerminataInvocazioneConnettore = null;
- if(invokerNonSupportato==false){
- msgDiag.logPersonalizzato("consegnaInCorso");
-
- // se il tracciamento lo prevedo emetto un log
- if(transazioneApplicativoServer==null) {
- registraTracciaOutRequest(transactionNullable, outRequestContext, this.log, msgDiag);
- }
-
- // utilizzo connettore
- ejbUtils.setSpedizioneMsgIngresso(new Timestamp(outRequestContext.getDataElaborazioneMessaggio().getTime()));
- dataPrimaInvocazioneConnettore = DateManager.getDate();
- errorConsegna = !connectorSender.send(responseCachingConfig, connettoreMsg);
- dataTerminataInvocazioneConnettore = DateManager.getDate();
- }
-
-
-
- Utilities.printFreeMemory("ConsegnaContenuti - Richiesta risorsa per la gestione della risposta...");
-
-
-
-
- /* ------------ Re-ottengo Connessione al DB -------------- */
- msgDiag.mediumDebug("Richiesta risorsa per la gestione della risposta...");
- try{
- boolean gestioneAsincroniStateless =
- (ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(profiloCollaborazione) ||
- ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(profiloCollaborazione))
- && portaDiTipoStateless;
- boolean oldGestioneConnessione = false;
- if(gestioneAsincroniStateless || salvaRispostaPerNotifiche){
- oldGestioneConnessione = ((OpenSPCoopStateless)openspcoopstate).isUseConnection();
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(true);
- }
- openspcoopstate.updateResource(idTransazione);
- if(gestioneAsincroniStateless){
- ((OpenSPCoopStateless)openspcoopstate).setUseConnection(oldGestioneConnessione);
- }
-
- // Aggiorno risorse
- ejbUtils.updateOpenSPCoopState(openspcoopstate);
- msgRequest.updateOpenSPCoopState(openspcoopstate);
-
- // POOL,TRANSACTIONISOLATION:
- //connectionDB.setTransactionIsolation(DBManager.getTransactionIsolationLevel());
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"openspcoopstate.updateResource()");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
-
-
-
- /* ------------ Analisi Risposta -------------- */
- if(invokerNonSupportato==false){
-
- try {
- msgDiag.mediumDebug("Analisi Risposta");
-
- // nota per lo stato si intende un esito di errore connettore quando è proprio il connettore a restituire errore.
- // se invece il connettore esce "bene" e restituisce poi un codice http e/o una risposta, si rientra nei casi sottostanti
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_UTILIZZO_CONNETTORE, errorConsegna);
-
- ejbUtils.setRicezioneMsgRisposta(DateManager.getTimestamp());
- motivoErroreConsegna = connectorSender.getErrore();
- eccezioneProcessamentoConnettore = connectorSender.getEccezioneProcessamento();
- if(errorConsegna && motivoErroreConsegna==null){
- motivoErroreConsegna = "Errore durante la consegna";
- }
- // interpretazione esito consegna
- GestoreErroreConnettore gestoreErrore = new GestoreErroreConnettore();
- errorConsegna = !gestoreErrore.verificaConsegna(gestioneConsegnaConnettore,motivoErroreConsegna,eccezioneProcessamentoConnettore,connectorSender);
- if(errorConsegna){
- motivoErroreConsegna = gestoreErrore.getErrore();
- riconsegna = gestoreErrore.isRiconsegna();
- dataRiconsegna = gestoreErrore.getDataRispedizione();
- }
- // dopo aver verificato se siamo in un caso di errore, vediamo se l'errore è dovuto al codice di trasporto
- // in tal caso rientriamo in un utilizzo del connettore con errore.
- if(errorConsegna) {
- if(connectorSender.getResponse()==null) {
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_UTILIZZO_CONNETTORE, errorConsegna);
- }
- }
- if(transazioneApplicativoServer!=null) {
- transazioneApplicativoServer.setConsegnaTerminata(!errorConsegna);
- }
- // raccolta risultati del connettore
- soapFault = gestoreErrore.getFault();
- restProblem = gestoreErrore.getProblem();
- faultMessageFactory = connectorSender.getResponse()!=null ? connectorSender.getResponse().getFactory() : OpenSPCoop2MessageFactory.getDefaultMessageFactory();
- codiceRitornato = connectorSender.getCodiceTrasporto();
- transportResponseContext = new TransportResponseContext(this.log, connectorSender.getCodiceTrasporto()+"",
- connectorSender.getHeaderTrasporto(),
- connectorSender.getContentLength(),
- motivoErroreConsegna, connectorSender.getEccezioneProcessamento());
- responseMessage = connectorSender.getResponse();
- useResponseForParseException = true;
- if(responseMessage!=null){
- responseMessage.setTransportRequestContext(consegnaMessagePrimaTrasformazione.getTransportRequestContext());
- responseMessage.setTransportResponseContext(transportResponseContext);
- responseContentLength = connectorSender.getContentLength();
- }
- // gestione connessione connettore
- if(existsModuloInAttesaRispostaApplicativa) {
- if(localForward){
- RepositoryConnettori.salvaConnettorePD(
- //idMessaggioConsegna,
- idTransazione,
- connectorSender);
- }else{
- RepositoryConnettori.salvaConnettorePA(
- //idMessaggioConsegna,
- idTransazione,
- connectorSender);
- }
- }else{
- // Sono nella casistica di messaggio preso in carico.
- // Non si deve chiudere immediatamente la connessione, poiche' nel resto del modulo, il messaggio puo' ancora essere utilizzato (es. dump)
- connectorSenderForDisconnect = connectorSender;
- }
- msgDiag.addKeyword(CostantiPdD.KEY_CODICE_CONSEGNA, codiceRitornato+"");
- if(motivoErroreConsegna!=null)
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_CONSEGNA, motivoErroreConsegna);
-
- // Il Connettore potrebbe aggiungere informazioni alla location.
- String tmpLocation = connectorSender.getLocation();
- if(tmpLocation!=null){
-
- // salvo la request url originale, se la risposta non è letta dalla cache
- boolean responseCached = false;
- if(pddContext.containsKey(ConnettoreBase.RESPONSE_FROM_CACHE)) {
- responseCached = (Boolean) pddContext.getObject(ConnettoreBase.RESPONSE_FROM_CACHE);
- }
- if(!responseCached) {
- pddContext.addObject(CostantiPdD.CONNETTORE_REQUEST_METHOD, httpRequestMethod);
- pddContext.addObject(CostantiPdD.CONNETTORE_REQUEST_URL, tmpLocation);
- }
-
- // aggiorno
- location = tmpLocation;
- if(responseCached) {
- msgDiag.addKeyword(CostantiPdD.KEY_LOCATION, location);
- }
- else {
- msgDiag.addKeyword(CostantiPdD.KEY_LOCATION, ConnettoreUtils.formatLocation(httpRequestMethod, location));
- }
- }
-
- /* ------------ Check Charset ------------- */
- try {
- if(transportResponseContext!=null) {
- boolean checkEnabled = false;
- List<String> ctDefault = null;
- if(consegnaMessageTrasformato!=null && ServiceBinding.SOAP.equals(consegnaMessageTrasformato.getServiceBinding())){
- if(this.propertiesReader.isControlloCharsetContentTypeAbilitatoRicezioneBusteSoap()) {
- checkEnabled = true;
- ctDefault = this.propertiesReader.getControlloCharsetContentTypeAbilitatoRicezioneBusteSoap();
- }
- }
- else {
- if(this.propertiesReader.isControlloCharsetContentTypeAbilitatoRicezioneBusteRest()) {
- checkEnabled = true;
- ctDefault = this.propertiesReader.getControlloCharsetContentTypeAbilitatoRicezioneBusteRest();
- }
- }
- if(checkEnabled) {
- if(transportResponseContext.getContentType()!=null) {
- ServicesUtils.checkCharset(transportResponseContext.getContentType(), ctDefault, msgDiag, false, TipoPdD.APPLICATIVA);
- }
- }
- }
- }catch(Throwable t) {
- String ct = null;
- try {
- if(transportResponseContext!=null) {
- ct = transportResponseContext.getContentType();
- }
- }catch(Throwable tRead) {
- // ignore
- }
- this.log.error("Avvenuto errore durante il controllo del charset della risposta (Content-Type: "+ct+"): "+t.getMessage(),t);
- }
-
- // ------------- aggiungo gli Headers peer -----------------
- if(transportResponseContext!=null) {
- this.addHeadersPeer(pddContext, transportResponseContext, proprietaPorta);
- }
-
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e, "Analisi risposta fallita");
- msgDiag.logErroreGenerico(e,"AnalisiRispostaConnettore");
- String msgErrore = "Analisi risposta del connettore ha provocato un errore: "+e.getMessage();
- this.log.error(msgErrore,e);
- if(existsModuloInAttesaRispostaApplicativa) {
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_500_ERRORE_INTERNO),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (connectorSender!=null && connectorSender.getResponse()!=null ? connectorSender.getResponse().getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErrore);
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }
-
-
-
- msgDiag.mediumDebug("Aggiungo informazioni di integrazione dinamica della risposta nel contesto ...");
-
- try {
- if(pa!=null && transportResponseContext!=null) {
- configurazionePdDManager.setInformazioniIntegrazioneDinamiche(this.log, transportResponseContext, pddContext, pa);
- }
- }
- catch (Throwable e) {
- msgDiag.addKeywordErroreProcessamento(e, "setInformazioniIntegrazioneDinamicheRisposta");
- msgDiag.logErroreGenerico(e,"setInformazioniIntegrazioneDinamicheRisposta");
- String msgErrore = "Lettura delle informazioni di integrazione dinamica della risposta ha provocato un errore: "+e.getMessage();
- this.log.error(msgErrore,e);
- if(existsModuloInAttesaRispostaApplicativa) {
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_500_ERRORE_INTERNO),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (connectorSender!=null && connectorSender.getResponse()!=null ? connectorSender.getResponse().getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErrore);
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
-
-
- if(salvaRispostaPerNotifiche && responseMessage!=null) {
- try {
- msgDiag.mediumDebug("Conservazione della risposta per il gestore delle notifiche");
-
- // TODO in futuro valutare se poter salvare la risposta già trasformata
- // Poichè il campo a disposizione è uno solo per la risposta, e l'impostazione di cosa salvare viene dedotta da quanto indicato su ogni connettore
- // la console dovrà poi consentire di indicare solamente 1 opzione tra risposta originale e risposta trasformata tra tutti i connettori multipli
-
- List<MapKey<String>> contextInResponse = new ArrayList<MapKey<String>>();
- Iterator<MapKey<String>> it = responseMessage.keysContextProperty();
- while (it.hasNext()) {
- MapKey<String> key = (MapKey<String>) it.next();
- contextInResponse.add(key);
- }
-
- if(consegnaMessageTrasformato!=null) {
- it = consegnaMessageTrasformato.keysContextProperty();
- while (it.hasNext()) {
- MapKey<String> key = (MapKey<String>) it.next();
- if(!contextInResponse.contains(key)) {
- Object v = consegnaMessageTrasformato.getContextProperty(key);
- //System.out.println("ADD ["+key+"] ["+v.getClass().getName()+"] ["+v+"]");
- responseMessage.addContextProperty(key, v);
- }
- }
- if(ServiceBinding.SOAP.equals(consegnaMessageTrasformato.getServiceBinding()) &&
- ServiceBinding.SOAP.equals(responseMessage.getServiceBinding())) {
- String soapAction = null;
- if(consegnaMessageTrasformato.getTransportRequestContext()!=null && consegnaMessageTrasformato.getTransportRequestContext().getHeaders()!=null) {
- if(TransportUtils.containsKey(consegnaMessageTrasformato.getTransportRequestContext().getHeaders(), org.openspcoop2.message.constants.Costanti.SOAP11_MANDATORY_HEADER_HTTP_SOAP_ACTION)){
- soapAction = TransportUtils.getFirstValue(consegnaMessageTrasformato.getTransportRequestContext().getHeaders(), org.openspcoop2.message.constants.Costanti.SOAP11_MANDATORY_HEADER_HTTP_SOAP_ACTION);
- }
- }
- if(soapAction==null) {
- soapAction = consegnaMessageTrasformato.castAsSoap().getSoapAction();
- }
- if(soapAction!=null) {
- responseMessage.castAsSoap().setSoapAction(soapAction);
- }
- }
- }
-
- msgRequest.registraRisposta_statelessEngine(identificativoMessaggioDoveSalvareLaRisposta, responseMessage, false);
-
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e, "Conservazione risposta fallita");
- msgDiag.logErroreGenerico(e,"ConservazioneRispostaConnettore");
- String msgErrore = "Conservazione risposta del connettore ha provocato un errore: "+e.getMessage();
- this.log.error(msgErrore,e);
- if(existsModuloInAttesaRispostaApplicativa) {
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_500_ERRORE_INTERNO),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (connectorSender!=null && connectorSender.getResponse()!=null ? connectorSender.getResponse().getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErrore);
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }
-
-
-
-
-
-
-
- /* ------------ Trasformazione Risposta -------------- */
-
- boolean dumpRispostaEffettuato = false;
- if(trasformazioni!=null && responseMessage!=null
- && transazioneApplicativoServer==null // non ha senso per le notifiche asincrone
- ) {
- try {
-
- // prima effettuo dump applicativo
- if(responseMessage!=null ){
-
- String idMessaggioDump = idMessaggioConsegna;
- if(idMessaggioPreBehaviour!=null){
- idMessaggioDump = idMessaggioPreBehaviour;
- }
-
- Dump dumpApplicativo = new Dump(identitaPdD,ConsegnaContenutiApplicativi.ID_MODULO,idMessaggioDump,
- soggettoFruitore,idServizio,TipoPdD.APPLICATIVA,msgDiag.getPorta(),pddContext,
- openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta(),
- dumpConfig);
- /*if(transazioneApplicativoServer!=null) {
- dumpApplicativo.setTransazioneApplicativoServer(transazioneApplicativoServer, idPA, dataConsegna);
- }*/
- InfoConnettoreUscita infoConnettoreUscita = outRequestContext.getConnettore();
- if(infoConnettoreUscita!=null){
- infoConnettoreUscita.setLocation(location); // aggiorno location ottenuta dal connettore utilizzato
- }
- dumpApplicativo.dumpRispostaIngresso(responseMessage, infoConnettoreUscita, connectorSender.getHeaderTrasporto());
- dumpRispostaEffettuato = true;
- }
-
- MessageType messageTypePrimaTrasformazione = responseMessage.getMessageType();
-
- responseMessage = gestoreTrasformazioni.trasformazioneRisposta(responseMessage, bustaRichiesta);
-
- MessageType messageTypeDopoTrasformazione = (responseMessage!=null) ? responseMessage.getMessageType() : null;
- if(messageTypeDopoTrasformazione==null || messageTypePrimaTrasformazione.equals(messageTypeDopoTrasformazione)==false) {
- soapFault = null;
- restProblem = null;
- if(messageTypeDopoTrasformazione!=null) {
- if(responseMessage instanceof OpenSPCoop2SoapMessage){
- if(responseMessage.castAsSoap().hasSOAPFault()){
- SOAPBody body = responseMessage.castAsSoap().getSOAPBody();
- soapFault = body.getFault();
- }
- }
- else {
- if(responseMessage instanceof OpenSPCoop2RestJsonMessage ){
- OpenSPCoop2RestJsonMessage msg = responseMessage.castAsRestJson();
- if(msg.hasContent() && msg.isProblemDetailsForHttpApis_RFC7807()) {
- JsonDeserializer deserializer = new JsonDeserializer();
- restProblem = deserializer.fromString(msg.getContent(), false);
- }
- }
- else if(responseMessage instanceof OpenSPCoop2RestXmlMessage ){
- OpenSPCoop2RestXmlMessage msg = responseMessage.castAsRestXml();
- if(msg.hasContent() && msg.isProblemDetailsForHttpApis_RFC7807()) {
- XmlDeserializer deserializer = new XmlDeserializer();
- restProblem = deserializer.fromNode(msg.getContent(), false);
- }
- }
- }
- }
- }
- }
- catch(Throwable e) {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_TRASFORMAZIONE_RISPOSTA, "true");
-
- // prima emetto diagnostico di fine connettore
- emitDiagnostico(invokerNonSupportato, bustaRichiesta, msgDiag, errorConsegna);
-
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("trasformazione.processamentoRispostaInErrore");
-
- ErroreIntegrazione erroreIntegrazione = gestoreTrasformazioni.getErrore();
- if(erroreIntegrazione==null) {
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(e,CodiceErroreIntegrazione.CODICE_562_TRASFORMAZIONE);
- }
-
- String msgErrore = e.getMessage();
- if(existsModuloInAttesaRispostaApplicativa) {
-
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.TRANSFORMATION_RULE_RESPONSE_FAILED;
- if(e instanceof GestoreTrasformazioniException && (((GestoreTrasformazioniException)e).getOp2IntegrationFunctionError()!=null)) {
- integrationFunctionError = ((GestoreTrasformazioniException)e).getOp2IntegrationFunctionError();
- }
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
-
- if(e instanceof GestoreTrasformazioniException && (((GestoreTrasformazioniException)e).getOpenSPCoop2ErrorMessage()!=null)) {
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ((GestoreTrasformazioniException)e).getOpenSPCoop2ErrorMessage(), msgErrore,
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore);
- }
- else {
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- erroreIntegrazione,
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (connectorSender!=null && connectorSender.getResponse()!=null ? connectorSender.getResponse().getParseException() : null),
- pddContext);
- }
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErrore);
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }
-
-
-
-
-
-
-
-
-
-
- /* -------- OpenSPCoop2Message Update ------------- */
- try {
- if(transazioneApplicativoServer==null) { // non ha senso per le notifiche asincrone
- msgDiag.mediumDebug("Aggiornamento del messaggio");
- // NOTA la versione SOAP capirla da consegnaMessage, la risposta puo' essere null
- NotifierInputStreamParams nParams = null;
- if(invokerNonSupportato==false){
- nParams = connectorSender.getNotifierInputStreamParamsResponse();
- }
- responseMessage = protocolFactory.createProtocolManager().updateOpenSPCoop2MessageResponse(responseMessage,
- bustaRichiesta, nParams,
- consegnaMessagePrimaTrasformazione.getTransportRequestContext(),transportResponseContext,
- protocolFactory.getCachedRegistryReader(openspcoopstate.getStatoRichiesta(), requestInfo),
- true);
- }
- } catch (Exception e) {
- msgDiag.addKeywordErroreProcessamento(e, "Aggiornamento messaggio fallito");
- msgDiag.logErroreGenerico(e,"ProtocolManager.updateOpenSPCoop2Message");
- String msgErrore = "ProtocolManager.updateOpenSPCoop2Message error: "+e.getMessage();
- this.log.error(msgErrore,e);
- if(existsModuloInAttesaRispostaApplicativa) {
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErrore);
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
-
-
-
-
-
-
-
-
-
-
-
- /* ------------------- InResponseHandler -----------------------*/
- InResponseContext inResponseContext = null;
- if(invokerNonSupportato==false){
- try{
- inResponseContext = new InResponseContext(this.log,protocolFactory,openspcoopstate.getStatoRisposta());
-
- // Informazioni sul messaggio di riposta
- if(responseMessage!=null){
- inResponseContext.setMessaggio(responseMessage);
- }
-
- // TransazioneApplicativoServer
- inResponseContext.setTransazioneApplicativoServer(transazioneApplicativoServer);
-
- // Informazioni sulla consegna
- inResponseContext.setErroreConsegna(motivoErroreConsegna);
- inResponseContext.setResponseHeaders(connectorSender.getHeaderTrasporto());
- inResponseContext.setReturnCode(codiceRitornato);
-
- // Altre informazioni
- if(outRequestContext.getConnettore()!=null){
- outRequestContext.getConnettore().setLocation(location); // aggiorno location ottenuta dal connettore utilizzato
- }
- inResponseContext.setConnettore(outRequestContext.getConnettore());
- inResponseContext.setDataPrimaInvocazioneConnettore(dataPrimaInvocazioneConnettore);
- inResponseContext.setDataTerminataInvocazioneConnettore(dataTerminataInvocazioneConnettore);
- inResponseContext.setDataRichiestaInoltrata(connectorSender.getDataRichiestaInoltrata());
- inResponseContext.setDataAccettazioneRisposta(connectorSender.getDataAccettazioneRisposta());
- inResponseContext.setDataElaborazioneMessaggio(ejbUtils.getRicezioneMsgRisposta());
- inResponseContext.setProtocollo(outRequestContext.getProtocollo());
- inResponseContext.setPddContext(pddContext);
- inResponseContext.setIntegrazione(outRequestContext.getIntegrazione());
- inResponseContext.setTipoPorta(outRequestContext.getTipoPorta());
-
- // Invocazione handler
- GestoreHandlers.inResponse(inResponseContext, msgDiag, this.log);
-
- }
- catch(Exception e){
- String msgErrore = null;
- if(e!=null && e.getMessage()!=null){
- if(e.getMessage().length()>150){
- msgErrore = e.getMessage().substring(0, 150);
- }else{
- msgErrore = e.getMessage();
- }
- }
- ErroreIntegrazione erroreIntegrazione = null;
- IntegrationFunctionError integrationFunctionError = null;
- if(e instanceof HandlerException){
- HandlerException he = (HandlerException) e;
- if(he.isEmettiDiagnostico()){
- msgDiag.logErroreGenerico(e, ((HandlerException)e).getIdentitaHandler());
- }
- msgErrore = ((HandlerException)e).getIdentitaHandler()+" error: "+msgErrore;
- if(existsModuloInAttesaRispostaApplicativa) {
- erroreIntegrazione = he.convertToErroreIntegrazione();
- integrationFunctionError = he.getIntegrationFunctionError();
- }
- }else{
- msgDiag.logErroreGenerico(e, "InResponseHandler");
- msgErrore = "InResponseHandler error: "+msgErrore;
- }
- if(existsModuloInAttesaRispostaApplicativa) {
-
- if(erroreIntegrazione==null){
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_544_HANDLER_IN_RESPONSE);
- }
-
- if(integrationFunctionError!=null) {
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
- }
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- erroreIntegrazione,
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErrore);
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }
-
-
-
-
-
-
-
-
-
-
-
-
- /* ------------ Controllo che il messaggio non contenga una busta */
- msgDiag.mediumDebug("Controllo non esistenza di una busta ...");
- ValidazioneSintattica validatoreSintattico = new ValidazioneSintattica(pddContext, openspcoopstate.getStatoRichiesta(),responseMessage, protocolFactory);
- String msgErrore = null;
- try{
- if(validatoreSintattico.verifyProtocolPresence(tipoPdD,profiloCollaborazione,RuoloMessaggio.RISPOSTA)){
- throw new Exception("Rilevato ProtocolHeader nella risposta");
- }
- } catch (Exception e){
- msgDiag.logPersonalizzato("rispostaContenenteBusta");
- this.log.error("CheckProtocolPresence",e);
- if(existsModuloInAttesaRispostaApplicativa) {
-
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.INTEROPERABILITY_PROFILE_RESPONSE_ALREADY_EXISTS);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(IntegrationFunctionError.INTEROPERABILITY_PROFILE_RESPONSE_ALREADY_EXISTS);
- }
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_454_BUSTA_PRESENTE_RISPOSTA_APPLICATIVA.getErroreIntegrazione(),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("rispostaContenenteBusta"));
- }else{
- ejbUtils.rollbackMessage(msgErrore,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }finally{
- // *** GB ***
- if(validatoreSintattico!=null){
- validatoreSintattico.setHeaderSOAP(null);
- }
- validatoreSintattico = null;
- // *** GB ***
- }
-
-
-
-
-
-
-
-
-
-
-
-
- // --------------------- Messaggio di Risposta + Dump --------------------------
- if(invokerNonSupportato==false){
-
- // Leggo informazioni di trasporto
- codiceRitornato = inResponseContext.getReturnCode();
- motivoErroreConsegna = inResponseContext.getErroreConsegna();
- responseMessage = inResponseContext.getMessaggio();
-
- String idMessaggioDump = idMessaggioConsegna;
- if(idMessaggioPreBehaviour!=null){
- idMessaggioDump = idMessaggioPreBehaviour;
- }
-
- // dump applicativo
- if(!dumpRispostaEffettuato && responseMessage!=null ){
- Dump dumpApplicativo = new Dump(identitaPdD,ConsegnaContenutiApplicativi.ID_MODULO,idMessaggioDump,
- soggettoFruitore,idServizio,TipoPdD.APPLICATIVA,msgDiag.getPorta(),pddContext,
- openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta(),
- dumpConfig);
- if(transazioneApplicativoServer!=null) {
- dumpApplicativo.setTransazioneApplicativoServer(transazioneApplicativoServer, idPA, dataConsegna);
- }
- dumpApplicativo.dumpRispostaIngresso(responseMessage, inResponseContext.getConnettore(), inResponseContext.getResponseHeaders());
- }
-
- }
-
-
-
-
-
- /* ------------------- MsgDiagnostico -----------------------*/
-
- emitDiagnostico(invokerNonSupportato, bustaRichiesta, msgDiag, errorConsegna);
- /* ------------------------- Gestione Notifica ---------------------------- */
- if(salvaRispostaPerNotifiche && responseMessage==null && MessaggioDaNotificare.RISPOSTA.equals(tipiMessaggiNotificabili)) {
- try{
- ConnettoreException e = null;
- if(consegnaMessageTrasformato!=null && ServiceBinding.SOAP.equals(consegnaMessageTrasformato.getServiceBinding()) && !errorConsegna){
- e = new ConnettoreException("Non essendo presente un payload nella risposta restituita dal backend, il salvataggio della risposta non può essere completato e nessuna notifica verrà generata");
- }
- else {
- e = new ConnettoreException("Causa indisponibilità del backend, il salvataggio della risposta non può essere completato e nessuna notifica verrà generata");
- }
- msgDiag.addKeywordErroreProcessamento(e, "Conservazione risposta fallita");
- msgDiag.logErroreGenerico(e,"Notifiche");
- String msgErroreR = "Conservazione risposta fallita: "+e.getMessage();
- this.log.error(msgErroreR,e);
- pddContext.put(CostantiPdD.CONNETTORE_MULTIPLO_CONSEGNA_NOTIFICA_DISABILITATA, e);
- }catch (Exception e){
- this.log.error("Errore Salvataggio informazione di notifica disabilitata",e);
- }
- }
-
-
-
- /* ------------------------- Gestione Errori Consegna ---------------------------- */
- msgDiag.mediumDebug("Gestione errore consegna della risposta...");
- // Invoker Non Supportato
- if( invokerNonSupportato == true ){
- String msgErroreConnettoreNonSupportato = "Connettore non supportato [tipo:"+tipoConnector+" class:"+connectorClass+"]";
- if(existsModuloInAttesaRispostaApplicativa) {
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_515_CONNETTORE_NON_REGISTRATO),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, eInvokerNonSupportato,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErroreConnettoreNonSupportato);
- }else{
- ejbUtils.rollbackMessage(msgErroreConnettoreNonSupportato,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO, msgErroreConnettoreNonSupportato);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- // Errori avvenuti durante la consegna
- else if(errorConsegna){
-
- // Effettuo log dell'eventuale fault
- if(soapFault!=null &&
- (
- (motivoErroreConsegna==null) ||
- (!motivoErroreConsegna.toLowerCase().contains("faultCode") && !motivoErroreConsegna.toLowerCase().contains("faultActor") && !motivoErroreConsegna.toLowerCase().contains("faultString"))
- )
- ){
- // Se non l'ho gia indicato nel motivo di errore, registro il fault
- msgDiag.addKeyword(CostantiPdD.KEY_SOAP_FAULT, SoapUtils.safe_toString(faultMessageFactory, soapFault, this.log));
- msgDiag.logPersonalizzato("ricezioneSoapFault");
- }
- else if(restProblem!=null &&
- (
- (motivoErroreConsegna==null) ||
- (!motivoErroreConsegna.toLowerCase().contains(ProblemConstants.CLAIM_TYPE))
- )
- ){
- // Se non l'ho gia indicato nel motivo di errore, registro il fault
- msgDiag.addKeyword(CostantiPdD.KEY_REST_PROBLEM, restProblem.getRaw());
- msgDiag.logPersonalizzato("ricezioneRestProblem");
- }
- else{
-
- // Controllo Situazione Anomala ISSUE OP-7
- if(responseMessage!=null && ServiceBinding.SOAP.equals(responseMessage.getServiceBinding())){
- OpenSPCoop2SoapMessage soapMessageResponse = responseMessage.castAsSoap();
- if(soapMessageResponse.getSOAPPart()!=null &&
- soapMessageResponse.getSOAPPart().getEnvelope()!=null &&
- (soapMessageResponse.isSOAPBodyEmpty() || (!soapMessageResponse.hasSOAPFault()) )
- ) {
- msgDiag.logPersonalizzato("comportamentoAnomalo.erroreConsegna.ricezioneMessaggioDiversoFault");
- if(isBlockedTransaction_responseMessageWithTransportCodeError){
- String msgErroreSituazioneAnomale = msgDiag.getMessaggio_replaceKeywords("comportamentoAnomalo.erroreConsegna.ricezioneMessaggioDiversoFault");
- if(existsModuloInAttesaRispostaApplicativa) {
-
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.BAD_RESPONSE);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(IntegrationFunctionError.BAD_RESPONSE);
- }
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_559_RICEVUTA_RISPOSTA_CON_ERRORE_TRASPORTO.
- get559_RicevutaRispostaConErroreTrasporto(msgErroreSituazioneAnomale),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, eInvokerNonSupportato,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, msgErroreSituazioneAnomale);
- }else{
- ejbUtils.rollbackMessage(msgErroreSituazioneAnomale,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO, msgErroreSituazioneAnomale);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }
- }
- }
-
- String messaggioErroreConsegnaConnettore = "Consegna ["+tipoConnector+"] con errore: "+motivoErroreConsegna;
- if(existsModuloInAttesaRispostaApplicativa) {
- OpenSPCoop2Message connettoreMsgRequest = connettoreMsg.getRequestMessage(requestInfo, pddContext);
- String requestReadTimeout = null;
- String responseReadTimeout = null;
- if(pddContext!=null && pddContext.containsKey(TimeoutInputStream.ERROR_MSG_KEY)) {
- String timeoutMessage = PdDContext.getValue(TimeoutInputStream.ERROR_MSG_KEY, pddContext);
- if(timeoutMessage!=null && timeoutMessage.startsWith(CostantiPdD.PREFIX_TIMEOUT_REQUEST)) {
- requestReadTimeout = timeoutMessage;
- }
- else if(timeoutMessage!=null && timeoutMessage.startsWith(CostantiPdD.PREFIX_TIMEOUT_RESPONSE)) {
- responseReadTimeout = timeoutMessage;
- }
- }
- String requestLimitExceeded = null;
- String responseLimitExceeded = null;
- if(pddContext!=null && pddContext.containsKey(LimitedInputStream.ERROR_MSG_KEY)) {
- String limitedExceededMessage = PdDContext.getValue(LimitedInputStream.ERROR_MSG_KEY, pddContext);
- if(limitedExceededMessage!=null && limitedExceededMessage.startsWith(CostantiPdD.PREFIX_LIMITED_REQUEST)) {
- requestLimitExceeded = limitedExceededMessage;
- }
- else if(limitedExceededMessage!=null && limitedExceededMessage.startsWith(CostantiPdD.PREFIX_LIMITED_RESPONSE)) {
- responseLimitExceeded = limitedExceededMessage;
- }
- }
- if(connettoreMsgRequest.getParseException() != null ||
- requestReadTimeout!=null ||
- requestLimitExceeded!=null){
-
- ParseException parseException = null;
- Throwable tParsing = null;
- String errorMsg = null;
- if(requestReadTimeout != null) {
- tParsing = (TimeoutIOException) pddContext.getObject(TimeoutInputStream.EXCEPTION_KEY);
- errorMsg = tParsing.getMessage();
- }
- else if(requestLimitExceeded != null) {
- tParsing = (LimitExceededIOException) pddContext.getObject(LimitedInputStream.EXCEPTION_KEY);
- errorMsg = tParsing.getMessage();
- }
- else {
- parseException = connettoreMsgRequest.getParseException();
- tParsing = parseException.getParseException();
- errorMsg = tParsing.getMessage();
- }
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RICHIESTA_NON_RICONOSCIUTO, true);
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.UNPROCESSABLE_REQUEST_CONTENT;
- if(requestReadTimeout!=null) {
- integrationFunctionError = IntegrationFunctionError.REQUEST_TIMED_OUT;
- }
- else if(requestLimitExceeded!=null) {
- integrationFunctionError = IntegrationFunctionError.REQUEST_SIZE_EXCEEDED;
- }
- else if(connettoreMsgRequest.getParseException().getSourceException()!=null &&
- TimeoutIOException.isTimeoutIOException(connettoreMsgRequest.getParseException().getSourceException())) {
- integrationFunctionError = IntegrationFunctionError.REQUEST_TIMED_OUT;
- }
- else if(connettoreMsgRequest.getParseException().getSourceException()!=null &&
- LimitExceededIOException.isLimitExceededIOException(connettoreMsgRequest.getParseException().getSourceException())) {
- integrationFunctionError = IntegrationFunctionError.REQUEST_SIZE_EXCEEDED;
- }
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_432_PARSING_EXCEPTION_RICHIESTA.getErrore432_MessaggioRichiestaMalformato(tParsing),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore,
- tParsing,parseException,
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,errorMsg);
- return esito;
- } else if(responseMessage==null &&
- !pddContext.containsKey(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO_PARSE_EXCEPTION)){
- // Genero una risposta di errore
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.SERVICE_UNAVAILABLE;
- if(eccezioneProcessamentoConnettore!=null && motivoErroreConsegna!=null) {
- if(responseReadTimeout!=null) {
- integrationFunctionError = IntegrationFunctionError.ENDPOINT_REQUEST_TIMED_OUT;
- pddContext.removeObject(TimeoutInputStream.ERROR_MSG_KEY);
- pddContext.removeObject(TimeoutInputStream.EXCEPTION_KEY);
- }
- else if(responseLimitExceeded!=null) {
- integrationFunctionError = IntegrationFunctionError.RESPONSE_SIZE_EXCEEDED;
- pddContext.removeObject(LimitedInputStream.ERROR_MSG_KEY);
- pddContext.removeObject(LimitedInputStream.EXCEPTION_KEY);
- }
- else if(this.propertiesReader.isServiceUnavailableReadTimedOut(motivoErroreConsegna)){
- integrationFunctionError = IntegrationFunctionError.ENDPOINT_REQUEST_TIMED_OUT;
- }
- }
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_516_CONNETTORE_UTILIZZO_CON_ERRORE.get516_ServizioApplicativoNonDisponibile(),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, eccezioneProcessamentoConnettore,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,messaggioErroreConsegnaConnettore);
- return esito;
- } else if(pddContext.containsKey(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO_PARSE_EXCEPTION) ||
- responseMessage.getParseException() != null ||
- responseReadTimeout!=null ||
- responseLimitExceeded!=null){
-
- ParseException parseException = null;
- Throwable tParsing = null;
- String errorMsg = null;
- if(responseReadTimeout != null) {
- tParsing = (TimeoutIOException) pddContext.getObject(TimeoutInputStream.EXCEPTION_KEY);
- errorMsg = tParsing.getMessage();
- }
- else if(responseLimitExceeded != null) {
- tParsing = (LimitExceededIOException) pddContext.getObject(LimitedInputStream.EXCEPTION_KEY);
- errorMsg = tParsing.getMessage();
- }
- else if(pddContext.containsKey(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO_PARSE_EXCEPTION)){
- parseException = (ParseException) pddContext.getObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO_PARSE_EXCEPTION);
- tParsing = parseException.getParseException();
- errorMsg = tParsing.getMessage();
- }
- else {
- parseException = responseMessage.getParseException();
- tParsing = parseException.getParseException();
- errorMsg = tParsing.getMessage();
- }
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO, true);
- IntegrationFunctionError integrationFunctionError = IntegrationFunctionError.UNPROCESSABLE_RESPONSE_CONTENT;
- if(responseReadTimeout!=null) {
- integrationFunctionError = IntegrationFunctionError.ENDPOINT_REQUEST_TIMED_OUT;
- }
- else if(responseLimitExceeded!=null) {
- integrationFunctionError = IntegrationFunctionError.RESPONSE_SIZE_EXCEEDED;
- }
- else if(parseException.getSourceException()!=null &&
- TimeoutIOException.isTimeoutIOException(parseException.getSourceException())) {
- integrationFunctionError = IntegrationFunctionError.ENDPOINT_REQUEST_TIMED_OUT;
- }
- else if(parseException.getSourceException()!=null &&
- LimitExceededIOException.isLimitExceededIOException(parseException.getSourceException())) {
- integrationFunctionError = IntegrationFunctionError.RESPONSE_SIZE_EXCEEDED;
- }
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_440_PARSING_EXCEPTION_RISPOSTA.getErrore440_MessaggioRispostaMalformato(tParsing),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore,
- tParsing,parseException,
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,errorMsg);
- return esito;
- }
-
- }else {
- if(riconsegna){
- ejbUtils.rollbackMessage(messaggioErroreConsegnaConnettore,dataRiconsegna,servizioApplicativo, esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO,messaggioErroreConsegnaConnettore);
- }else{
- ejbUtils.releaseInboxMessage(true);
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_NON_GESTITO,messaggioErroreConsegnaConnettore);
- }
- openspcoopstate.releaseResource();
- this.log.info(ConsegnaContenutiApplicativi.ID_MODULO + " errore avvenuto durante la consegna");
- return esito;
- }
- }
- /* ----------- Gestione della risposta applicativa da eseguire nei seguenti casi:
- AsincronoSimmetrico (InvocazioneServizio e ConsegnaRisposta):
- se isRicevutaApplicativa
- - Bisogna aspettare una risposta applicativa
- - Bisogna quindi generare un busta per la ricevuta asincrona
- altrimenti
- - Non serve aspettare una risposta applicativa
- - Se si riceve un Fault, il fault viene loggato.
- AsincronoAsimmetrico(InvocazioneServizio):
- se isRicevutaApplicativa
- - Bisogna aspettare una risposta applicativa
- - Bisogna quindi generare un busta per la ricevuta asincrona
- altrimenti
- - Non serve aspettare una risposta applicativa
- - Se si riceve un Fault, il fault viene loggato.
- AsincronoAsimmetrico (Polling):
- - Bisogna aspettare una risposta applicativa 'sincrona'
- - Bisogna quindi generare un busta della risposta contenente il risultato del polling
- Sincrono:
- - Bisogna aspettare una risposta applicativa sincrona
- - Bisogna quindi generare un busta della risposta sincrona
- Altro (OneWay):
- - Non bisogna aspettare una risposta applicativa
- - Se si riceve un Fault, il fault viene loggato.
- ------------- */
-
- msgDiag.mediumDebug("Registrazione eventuale fault...");
- // Effettuo log del fault
- if(soapFault!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_SOAP_FAULT, SoapUtils.safe_toString(faultMessageFactory, soapFault, this.log));
- msgDiag.logPersonalizzato("ricezioneSoapFault");
- }
- else if(restProblem!=null){
- // Se non l'ho gia indicato nel motivo di errore, registro il fault
- msgDiag.addKeyword(CostantiPdD.KEY_REST_PROBLEM, restProblem.getRaw());
- msgDiag.logPersonalizzato("ricezioneRestProblem");
- }
-
- if(existsModuloInAttesaRispostaApplicativa){
- if( !localForward && richiestaApplicativa!=null && Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(richiestaApplicativa.getScenario())){
- // Oneway in modalita sincrona
- boolean returnProtocolReply = false;
- Busta bustaHTTPReply = null;
-
- boolean consegnaAffidabile = false;
- switch (protocolManager.getConsegnaAffidabile(bustaIndicazioneConsegnaInOrdine)) {
- case ABILITATA:
- consegnaAffidabile = true;
- break;
- case DISABILITATA:
- consegnaAffidabile = false;
- break;
- default:
- consegnaAffidabile = bustaRichiesta.isConfermaRicezione() &&
- this.propertiesReader.isGestioneRiscontri(implementazionePdDMittente);
- break;
- }
-
- if(consegnaAffidabile){
- msgDiag.mediumDebug("Gestione eventuali riscontri da inviare...");
- if(ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione()) ) {
- TipoOraRegistrazione tipoOraRegistrazione = this.propertiesReader.getTipoTempoBusta(implementazionePdDMittente);
- bustaHTTPReply = bustaRichiesta.invertiBusta(tipoOraRegistrazione,
- protocolFactory.createTraduttore().toString(tipoOraRegistrazione));
- // Riscontro ad hoc
- Riscontro r = new Riscontro();
- r.setID(bustaRichiesta.getID());
- r.setOraRegistrazione(bustaHTTPReply.getOraRegistrazione());
- r.setTipoOraRegistrazione(this.propertiesReader.getTipoTempoBusta(implementazionePdDMittente));
- bustaHTTPReply.addRiscontro(r);
- bustaHTTPReply.setTipoServizioRichiedenteBustaDiServizio(bustaRichiesta.getTipoServizio());
- bustaHTTPReply.setServizioRichiedenteBustaDiServizio(bustaRichiesta.getServizio());
- bustaHTTPReply.setVersioneServizioRichiedenteBustaDiServizio(bustaRichiesta.getVersioneServizio());
- bustaHTTPReply.setAzioneRichiedenteBustaDiServizio(bustaRichiesta.getAzione());
- returnProtocolReply = true;
- }
- }
- if( returnProtocolReply == false){
- if(soapFault!=null || restProblem!=null){
- // Devo ritornare il SoapFault
- msgDiag.mediumDebug("Invio messaggio di fault a Ricezione/Consegna ContenutiApplicativi...");
- msgResponse = ejbUtils.sendSOAPFault(richiestaApplicativa.getIdModuloInAttesa(),responseMessage);
- }
- else{
- // Invio sblocco se e' attesa una risposta dal modulo
- // Se non e' abilitato la risposta su di una nuova connessione, e l'indirizzo telematico
- // non e' abilitato o cmq non presente, allora devo inviare lo sblocco
- msgDiag.mediumDebug("Invio messaggio di sblocco a RicezioneBuste...");
- msgResponse = ejbUtils.sendSbloccoRicezioneBuste(richiestaApplicativa.getIdModuloInAttesa());
- }
- }
- else{
- // Invio risposta immediata in seguito alla richiesta ricevuta
- if(soapFault!=null || restProblem!=null){
- // Devo ritornare il SoapFault
- msgDiag.mediumDebug("Invio messaggio di fault a Ricezione/Consegna ContenutiApplicativi...");
- msgResponse = ejbUtils.sendSOAPFault(richiestaApplicativa.getIdModuloInAttesa(),responseMessage);
- }
- else{
- msgDiag.mediumDebug("Invio messaggio a Ricezione/Consegna ContenutiApplicativi...");
- msgResponse = ejbUtils.buildAndSendBustaRisposta(richiestaApplicativa.getIdModuloInAttesa(),bustaHTTPReply,
- MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
- requestInfo.getProtocolRequestMessageType(), MessageRole.RESPONSE),profiloGestione,
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore);
- }
- }
- }
- else{
- /*-- analisi risposta per riferimento -- */
- if(rispostaPerRiferimento && !errorConsegna){
- msgDiag.mediumDebug("Gestione risposta per riferimento...");
- boolean rilasciaRisorsa = false;
- if(openspcoopstate instanceof OpenSPCoopStateless){
- OpenSPCoopStateless state = (OpenSPCoopStateless) openspcoopstate;
- // La risposta per riferimento ha bisogno della connessione.
- if (state.resourceReleased()){
- // Risorsa e' rilasciata se siamo in RinegoziamentoConnessione
- state.setUseConnection(true);
- state.updateResource(idTransazione);
- rilasciaRisorsa = true;
- }else{
- // Non siamo in RinegoziamentoConnessione, basta dire di utilizzare la connessione
- state.setUseConnection(true);
- }
- }
- try{
- if(MessageType.SOAP_11.equals(responseMessage.getMessageType())==false){
- throw new Exception("Tipo di messaggio ["+responseMessage.getMessageType()+"] non supportato");
- }
-
- // 1. Read IDMessaggio
- // L'id del messaggio deve essere prelevato dal messaggio di risposta ritornato dal gestore eventi.
- Node prelevaMessaggioResponse = responseMessage.castAsSoap().getSOAPBody().getFirstChild();
- if(prelevaMessaggioResponse==null)
- throw new Exception("Identificativo non presente [prelevaMessaggioResponse]");
- Node prelevaMessaggioReturn = prelevaMessaggioResponse.getFirstChild();
- if(prelevaMessaggioReturn==null)
- throw new Exception("Identificativo non presente [prelevaMessaggioReturn]");
- Node idMessaggioPresenteNelRepositoryNode = prelevaMessaggioReturn.getFirstChild();
- if(idMessaggioPresenteNelRepositoryNode==null)
- throw new Exception("Identificativo non presente [idMessaggioPresenteNelRepositoryNode]");
- byte[] idMessaggioPresenteNelRepositoryByte = Base64Utilities.decode(idMessaggioPresenteNelRepositoryNode.getNodeValue());
- String idMessaggioPresenteNelRepository = new String(idMessaggioPresenteNelRepositoryByte);
- //if(idMessaggioPresenteNelRepository==null)
- // throw new Exception("Identificativo non presente");
- // 2. get Messaggio dal Repository
- GestoreMessaggi gestoreMsgFromRepository = new GestoreMessaggi(openspcoopstate, false, idMessaggioPresenteNelRepository,Costanti.INBOX,msgDiag,pddContext);
- OpenSPCoop2Message msgFromRepository = gestoreMsgFromRepository.getMessage();
- //if(idMessaggioPresenteNelRepository==null)
- // throw new Exception("Messaggio non presente nel repository");
- // 3. prendo body applicativo
- byte[] bodyApplicativoPrecedentementePubblicato = TunnelSoapUtils.sbustamentoMessaggio(msgFromRepository);
- // 4. Inserimento dei byte del body applicativo al posto dell'ID,
- // nel msg ritornato dal GestoreEventi.
- // La variabile responseMessage deve contenere il messaggio Soap che sara' ritornato a chi ha richiesto un messaggio
- responseMessage = gestoreMsgFromRepository.buildRispostaPrelevamentoMessaggio_RepositoryMessaggi(bodyApplicativoPrecedentementePubblicato,msgFromRepository.getMessageType());
-
- }catch(Exception e){
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_CONSEGNA, ("risposta per riferimento non costruita, "+e.getMessage()));
- if(bustaRichiesta.getMittente()!=null && bustaRichiesta.getTipoMittente()!=null){
- msgDiag.logPersonalizzato("consegnaConErrore");
- }
- else{
- msgDiag.logPersonalizzato("consegnaConErrore.mittenteAnonimo");
- }
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_511_READ_RESPONSE_MSG),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "risposta per riferimento non costruita, "+e.getMessage());
- openspcoopstate.releaseResource();
- return esito;
- }finally{
- if(openspcoopstate instanceof OpenSPCoopStateless){
- OpenSPCoopStateless state = (OpenSPCoopStateless) openspcoopstate;
- if(rilasciaRisorsa){
- state.releaseResource();
- }
- state.setUseConnection(false);
- }
- }
- }
- msgDiag.mediumDebug("Gestione risposta...");
- boolean rispostaVuotaValidaPerAsincroniStateless_modalitaAsincrona = false;
- if(responseMessage == null &&
- !(localForward && richiestaApplicativa!=null && Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(richiestaApplicativa.getScenario())) ){
- if( (Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ||
- Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ||
- Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA.equals(scenarioCooperazione) )
- && portaDiTipoStateless
- && (!isRicevutaAsincrona) ){
- rispostaVuotaValidaPerAsincroniStateless_modalitaAsincrona = true;
- responseMessage = MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
- requestInfo.getProtocolRequestMessageType(), MessageRole.RESPONSE); // Costruisce messaggio vuoto per inserire busta (ricevuta asincrona)
- }
- else{
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_CONSEGNA, ("risposta applicativa attesa ma non ricevuta"));
- if(bustaRichiesta.getMittente()!=null && bustaRichiesta.getTipoMittente()!=null){
- msgDiag.logPersonalizzato("consegnaConErrore");
- }
- else{
- msgDiag.logPersonalizzato("consegnaConErrore.mittenteAnonimo");
- }
-
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.EXPECTED_RESPONSE_NOT_FOUND);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(IntegrationFunctionError.EXPECTED_RESPONSE_NOT_FOUND);
- }
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_517_RISPOSTA_RICHIESTA_NON_RITORNATA),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, null,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"risposta applicativa attesa ma non ricevuta");
- return esito;
- }
- }
-
- if(rispostaVuotaValidaPerAsincroniStateless_modalitaAsincrona==false
- && transazioneApplicativoServer==null // non ha senso per le notifiche asincrone tutte le operazioni presenti in questo corpo (validazione, correlazione, header di integrazione)
- ){
-
- 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,"");
- }
-
- // Verifica xsd (Se siamo in un caso di risposta applicativa presente)
- if(
- (responseMessage!=null)
- &&
- (validazioneContenutoApplicativoApplicativo!=null)
- &&
- (
- CostantiConfigurazione.STATO_CON_WARNING_ABILITATO.equals(validazioneContenutoApplicativoApplicativo.getStato())
- ||
- CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato())
- )
- ){
- if(transactionNullable!=null) {
- transactionNullable.getTempiElaborazione().startValidazioneRisposta();
- }
- ByteArrayInputStream binXSD = null;
- try{
- boolean hasContent = false;
- boolean isFault = false;
- if(ServiceBinding.SOAP.equals(responseMessage.getServiceBinding())){
- OpenSPCoop2SoapMessage soapMsg = responseMessage.castAsSoap();
- hasContent = !soapMsg.isSOAPBodyEmpty();
- isFault = soapMsg.isFault();
- }
- else{
- //org.openspcoop2.message.OpenSPCoop2RestMessage<?> restMsg = responseMessage.castAsRest();
- //hasContent = restMsg.hasContent();
- hasContent = true; // devo controllare gli header etc...
- // fix: i problem detail devono far parte dell'interfaccia openapi
- //isFault = restMsg.isProblemDetailsForHttpApis_RFC7807() || MessageRole.FAULT.equals(responseMessage.getMessageRole());
- isFault = MessageRole.FAULT.equals(responseMessage.getMessageRole());
- }
-
- boolean validazioneAbilitata = true;
- if(ServiceBinding.SOAP.equals(responseMessage.getServiceBinding())){
- validazioneAbilitata = hasContent && (isFault==false);
- }
- else {
- validazioneAbilitata = ValidatoreMessaggiApplicativiRest.isValidazioneAbilitata(this.log,proprietaPorta, responseMessage, codiceRitornato);
- }
- if( validazioneAbilitata ){
-
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaInCorso");
-
- boolean readInterface = CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(validazioneContenutoApplicativoApplicativo.getTipo());
- IDServizio idSValidazioneXSD = idServizio;
- if(servizioHeaderIntegrazione!=null){
- idSValidazioneXSD = servizioHeaderIntegrazione;
- }
-
- if(ServiceBinding.SOAP.equals(responseMessage.getServiceBinding())){
-
- // Accept mtom message
- List<MtomXomReference> xomReferences = null;
- if(StatoFunzionalita.ABILITATO.equals(validazioneContenutoApplicativoApplicativo.getAcceptMtomMessage())){
- msgDiag.mediumDebug("Validazione xsd della risposta (mtomFastUnpackagingForXSDConformance)...");
- xomReferences = responseMessage.castAsSoap().mtomFastUnpackagingForXSDConformance();
- }
-
- // Init Validatore
- msgDiag.mediumDebug("Validazione della risposta (initValidator)...");
- ValidatoreMessaggiApplicativi validatoreMessaggiApplicativi =
- new ValidatoreMessaggiApplicativi(registroServiziManager,idSValidazioneXSD,
- responseMessage,readInterface,
- this.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 risposta ...");
- validatoreMessaggiApplicativi.validateWithWsdlLogicoImplementativo(false);
- }
-
- // Validazione XSD
- msgDiag.mediumDebug("Validazione xsd della risposta ...");
- validatoreMessaggiApplicativi.validateWithWsdlDefinitorio(false);
-
- // Validazione WSDL (Restore Original Document)
- if (CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_INTERFACE.equals(validazioneContenutoApplicativoApplicativo.getTipo())
- || CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_OPENSPCOOP.equals(validazioneContenutoApplicativoApplicativo.getTipo())) {
- if(this.propertiesReader.isValidazioneContenutiApplicativiRpcLiteralXsiTypeGestione() &&
- this.propertiesReader.isValidazioneContenutiApplicativiRpcLiteralXsiTypeRipulituraDopoValidazione()){
- msgDiag.mediumDebug("Ripristino elementi modificati per supportare validazione wsdl della risposta ...");
- validatoreMessaggiApplicativi.restoreOriginalDocument(false);
- }
- }
-
- // Ripristino struttura messaggio con xom
- if(xomReferences!=null && xomReferences.size()>0){
- msgDiag.mediumDebug("Validazione xsd della risposta (mtomRestoreAfterXSDConformance)...");
- responseMessage.castAsSoap().mtomRestoreAfterXSDConformance(xomReferences);
- }
-
- }
- else {
-
- // Init Validatore
- msgDiag.mediumDebug("Validazione della risposta (initValidator)...");
- ValidatoreMessaggiApplicativiRest validatoreMessaggiApplicativi =
- new ValidatoreMessaggiApplicativiRest(registroServiziManager, idSValidazioneXSD, responseMessage, readInterface, proprietaPorta,
- protocolFactory, pddContext);
-
- if(CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_XSD.equals(validazioneContenutoApplicativoApplicativo.getTipo()) &&
- responseMessage.castAsRest().hasContent()) {
-
- // Validazione XSD
- msgDiag.mediumDebug("Validazione xsd della risposta ...");
- validatoreMessaggiApplicativi.validateWithSchemiXSD(false);
-
- }
- else {
-
- // Validazione Interface
- validatoreMessaggiApplicativi.validateResponseWithInterface(consegnaMessagePrimaTrasformazione, true);
-
- }
-
- }
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaEffettuata");
- }
- else{
- if(hasContent==false){
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS_VALIDAZIONE_CONTENUTI,CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_VALIDAZIONE_SOAP_BODY_NON_PRESENTE);
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaDisabilitata");
- }
- else if (isFault ){
- msgDiag.addKeyword(CostantiPdD.KEY_DETAILS_VALIDAZIONE_CONTENUTI,CostantiConfigurazione.VALIDAZIONE_CONTENUTI_APPLICATIVI_VALIDAZIONE_SOAP_FAULT_PRESENTE);
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaDisabilitata");
- }
- }
- }catch(ValidatoreMessaggiApplicativiException ex){
- msgDiag.addKeywordErroreProcessamento(ex);
- this.log.error("[ValidazioneContenutiApplicativi Risposta] "+ex.getMessage(),ex);
- if (CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato())) {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaNonRiuscita.warningOnly");
- }
- else {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaNonRiuscita");
- }
- if(CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato()) == false){
-
- // validazione abilitata
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_VALIDAZIONE_RISPOSTA, "true");
-
- IntegrationFunctionError integrationFunctionError = null;
- if(ex.getErrore()!=null &&
- (
- //CodiceErroreIntegrazione.CODICE_417_COSTRUZIONE_VALIDATORE_TRAMITE_INTERFACCIA_FALLITA.equals(ex.getErrore().getCodiceErrore()) ||
- CodiceErroreIntegrazione.CODICE_419_VALIDAZIONE_RISPOSTA_TRAMITE_INTERFACCIA_FALLITA.equals(ex.getErrore().getCodiceErrore())
- )
- ){
- integrationFunctionError = IntegrationFunctionError.INVALID_RESPONSE_CONTENT;
- }
- else{
- integrationFunctionError = IntegrationFunctionError.INTERNAL_RESPONSE_ERROR;
- }
-
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ex.getErrore(),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, ex,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("validazioneContenutiApplicativiNonRiuscita"));
- return esito;
- }
- }catch(Exception ex){
- msgDiag.addKeywordErroreProcessamento(ex);
- this.log.error("Riscontrato errore durante la validazione xsd della risposta applicativa",ex);
- if (CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato())) {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaNonRiuscita.warningOnly");
- }
- else {
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaNonRiuscita");
- }
- if(CostantiConfigurazione.STATO_CON_WARNING_WARNING_ONLY.equals(validazioneContenutoApplicativoApplicativo.getStato()) == false){
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_VALIDAZIONE_RISPOSTA, "true");
-
- // validazione abilitata
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_531_VALIDAZIONE_TRAMITE_INTERFACCIA_FALLITA),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, ex,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("validazioneContenutiApplicativiNonRiuscita"));
- return esito;
- }
- }finally{
- if(transactionNullable!=null) {
- transactionNullable.getTempiElaborazione().endValidazioneRisposta();
- }
- if(binXSD!=null){
- try{
- binXSD.close();
- }catch(Exception e){
- // close
- }
- }
- }
- }
- else{
- msgDiag.logPersonalizzato("validazioneContenutiApplicativiRispostaDisabilitata");
- }
-
- /* ------------ Header integrazione Risposta ------------- */
-
- HeaderIntegrazione headerIntegrazioneRisposta = new HeaderIntegrazione(idTransazione);
- InResponsePAMessage inResponsePAMessage = new InResponsePAMessage();
- inResponsePAMessage.setBustaRichiesta(bustaRichiesta);
- inResponsePAMessage.setMessage(responseMessage);
- if(pa!=null)
- inResponsePAMessage.setPortaApplicativa(pa);
- else
- inResponsePAMessage.setPortaDelegata(pd);
- inResponsePAMessage.setHeaders(connectorSender.getHeaderTrasporto());
- inResponsePAMessage.setServizio(outRequestPAMessage.getServizio());
- inResponsePAMessage.setSoggettoMittente(outRequestPAMessage.getSoggettoMittente());
- Utilities.printFreeMemory("ConsegnaContenutiApplicativi - Gestione Header Integrazione... ");
- for(int i=0; i<tipiIntegrazione.length;i++){
- try{
- IGestoreIntegrazionePA gestore = null;
- try{
- gestore = (IGestoreIntegrazionePA) this.pluginLoader.newIntegrazionePortaApplicativa(tipiIntegrazione[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 (Risposta) delle erogazione di tipo ["+tipiIntegrazione[i]+"]: "+e.getMessage());
- }
- if(responseMessage!=null){
- gestore.readInResponseHeader(headerIntegrazioneRisposta,inResponsePAMessage);
- }else if( ! (gestore instanceof IGestoreIntegrazionePASoap) ){
- gestore.readInResponseHeader(headerIntegrazioneRisposta,inResponsePAMessage);
- }
- }
- } catch (Exception e) {
- this.log.debug("Errore durante la lettura dell'header di integrazione ["+ tipiIntegrazione[i]
- + "]: "+ e.getMessage(),e);
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_HEADER_INTEGRAZIONE,tipiIntegrazione[i]);
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("headerIntegrazione.letturaFallita");
- }
- }
-
- /* ------------ Correlazione Applicativa Risposta ------------- */
- if(correlazioneApplicativaRisposta!=null){
- Utilities.printFreeMemory("ConsegnaContenutiApplicativi - CorrelazioneApplicativa... ");
- GestoreCorrelazioneApplicativa gestoreCorrelazione = null;
- try{
-
- GestoreCorrelazioneApplicativaConfig caConfig = new GestoreCorrelazioneApplicativaConfig();
- caConfig.setState(openspcoopstate.getStatoRisposta());
- caConfig.setAlog(this.log);
- caConfig.setSoggettoFruitore(soggettoFruitore);
- caConfig.setIdServizio(idServizio);
- caConfig.setBusta(bustaRichiesta);
- caConfig.setServizioApplicativo(servizioApplicativo);
- caConfig.setProtocolFactory(protocolFactory);
- caConfig.setTransaction(transactionNullable);
- caConfig.setPddContext(pddContext);
-
- if(pa!=null) {
- caConfig.setPa(pa);
- gestoreCorrelazione = new GestoreCorrelazioneApplicativa(caConfig);
- }
- else if(pd!=null) {
- caConfig.setPd(pd);
- gestoreCorrelazione = new GestoreCorrelazioneApplicativa(caConfig);
- }
-
- if(gestoreCorrelazione!=null){
- gestoreCorrelazione.verificaCorrelazioneRisposta(correlazioneApplicativaRisposta, responseMessage, headerIntegrazioneRisposta, false);
-
- idCorrelazioneApplicativaRisposta = gestoreCorrelazione.getIdCorrelazione();
-
- if(idCorrelazioneApplicativaRisposta!=null) {
- if(transactionNullable!=null) {
- transactionNullable.setCorrelazioneApplicativaRisposta(idCorrelazioneApplicativaRisposta);
- }
- }
-
- if(richiestaApplicativa!=null)
- richiestaApplicativa.setIdCorrelazioneApplicativaRisposta(idCorrelazioneApplicativaRisposta);
- else if(richiestaDelegata!=null)
- richiestaDelegata.setIdCorrelazioneApplicativaRisposta(idCorrelazioneApplicativaRisposta);
-
- msgDiag.setIdCorrelazioneRisposta(idCorrelazioneApplicativaRisposta);
- }
-
- }catch(Exception e){
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.ERRORE_CORRELAZIONE_APPLICATIVA_RISPOSTA, "true");
-
- msgDiag.logErroreGenerico(e,"CorrelazioneApplicativaRisposta");
- this.log.error("Riscontrato errore durante il controllo di correlazione applicativa della risposta: "+ e.getMessage(),e);
-
- ErroreIntegrazione errore = null;
- if(gestoreCorrelazione!=null){
- errore = gestoreCorrelazione.getErrore();
- }
- if(errore==null){
- errore = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_553_CORRELAZIONE_APPLICATIVA_RISPOSTA_NON_RIUSCITA);
- }
-
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.APPLICATION_CORRELATION_IDENTIFICATION_RESPONSE_FAILED);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(IntegrationFunctionError.APPLICATION_CORRELATION_IDENTIFICATION_RESPONSE_FAILED);
- }
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- errore,
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "Riscontrato errore durante il controllo di correlazione applicativa della risposta: "+ e.getMessage());
- openspcoopstate.releaseResource();
- return esito;
- }
- }
-
- /* ------------ Header integrazione Risposta (Update/Delete) ------------- */
-
- Utilities.printFreeMemory("ConsegnaContenutiApplicativi - Update/Delete Header Integrazione... ");
- for(int i=0; i<tipiIntegrazione.length;i++){
- try{
- IGestoreIntegrazionePA gestore = null;
- try{
- gestore = (IGestoreIntegrazionePA) this.pluginLoader.newIntegrazionePortaApplicativa(tipiIntegrazione[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 (Risposta Update/Delete) delle erogazione di tipo ["+tipiIntegrazione[i]+"]: "+e.getMessage());
- }
- if (responseMessage!=null && (gestore instanceof IGestoreIntegrazionePASoap) ) {
- if(this.propertiesReader.deleteHeaderIntegrazioneResponsePA()){
- ((IGestoreIntegrazionePASoap)gestore).deleteInResponseHeader(inResponsePAMessage);
- }else{
- ((IGestoreIntegrazionePASoap)gestore).updateInResponseHeader(inResponsePAMessage, idMessaggioConsegna, idMessageResponse, servizioApplicativoFruitore,
- idCorrelazioneApplicativaRisposta, idCorrelazioneApplicativa);
- }
- }
- }
- } catch (Exception e) {
- this.log.debug("Errore durante la lettura dell'header di integrazione ["+ tipiIntegrazione[i]
- + "]: "+ e.getMessage(),e);
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_HEADER_INTEGRAZIONE,tipiIntegrazione[i]);
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("headerIntegrazione.letturaFallita");
- }
- }
-
-
- /* ------------ Gestione Funzionalita' speciali per Attachments (Manifest) ------------- */
- // Funzionalita' necessaria solo per la consegna di un servizio
- if(richiestaApplicativa!=null){
- if(scartaBody){
- IntegrationFunctionError integrationFunctionError = null;
- try{
- if(responseMessage!=null){
- if(ServiceBinding.SOAP.equals(responseMessage.getServiceBinding())==false){
- integrationFunctionError = IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL;
- throw new Exception("Funzionalita 'ScartaBody' valida solamente per Service Binding SOAP");
- }
-
- // E' permesso SOLO per messaggi con attachment
- if(responseMessage.castAsSoap().countAttachments() <= 0){
- throw new Exception("La funzionalita' e' permessa solo per messaggi SOAP With Attachments");
- }
- }
- }catch(Exception e){
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("funzionalitaScartaBodyNonRiuscita");
-
- if(integrationFunctionError==null) {
- integrationFunctionError = IntegrationFunctionError.BAD_RESPONSE;
- }
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(integrationFunctionError);
- }
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_425_SCARTA_BODY.getErrore425_ScartaBody(e.getMessage()),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("funzionalitaScartaBodyNonRiuscita"));
- return esito;
- }
- }
- if(allegaBody){
- try{
- if(responseMessage!=null){
- TunnelSoapUtils.allegaBody(responseMessage, this.propertiesReader.getHeaderSoapActorIntegrazione());
- }
- }catch(Exception e){
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("funzionalitaAllegaBodyNonRiuscita");
-
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.BAD_RESPONSE);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(IntegrationFunctionError.BAD_RESPONSE);
- }
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_424_ALLEGA_BODY.getErrore424_AllegaBody(e.getMessage()),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("funzionalitaAllegaBodyNonRiuscita"));
- return esito;
- }
- }
- }
- }
-
-
-
- // processResponse localforward
- if(localForward){
-
- if( richiestaApplicativa!=null && Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO.equals(richiestaApplicativa.getScenario()) ){
- // Per avere esattamente il solito comportamento dello scenario con protocollo.
- if(soapFault==null && restProblem==null){
- // devo 'ignorare' la risposta anche se presente, essendo un profilo oneway.
- if(responseMessage!=null){
- if(ServiceBinding.SOAP.equals(responseMessage.getServiceBinding())){
- SOAPBody body = responseMessage.castAsSoap().getSOAPBody();
- if(body!=null)
- body.removeContents();
- }
- }
- }
- }
-
- msgDiag.mediumDebug("Process response message for local forward...");
- try{
- if(localForwardEngine.processResponse(responseMessage)==false){
- localForwardEngine.sendErrore(localForwardEngine.getResponseMessageError());
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"localForwardEngine.processResponse==false");
- return esito;
- }
- if(localForwardEngine.getResponseMessageAfterProcess()!=null){
- // Messaggio aggiornato
- responseMessage = localForwardEngine.getResponseMessageAfterProcess();
- }
- }catch(Exception e){
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logErroreGenerico(e, "localForwardProcessResponse");
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_556_LOCAL_FORWARD_PROCESS_RESPONSE_ERROR),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- e.getMessage());
- return esito;
- }
- }
-
-
-
- // Salvo messaggio ricevuto
- msgDiag.mediumDebug("Registrazione messaggio di risposta nel RepositoryMessaggi...");
- try{
- msgResponse = new GestoreMessaggi(openspcoopstate, false, idMessageResponse,Costanti.OUTBOX,msgDiag,pddContext);
- msgResponse.registraMessaggio(responseMessage,idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta);
- msgResponse.aggiornaRiferimentoMessaggio(idMessaggioConsegna);
- msgResponse.aggiornaProprietarioMessaggio(ImbustamentoRisposte.ID_MODULO);
- if(responseMessage!=null && responseMessage.getParseException()!= null)
- throw responseMessage.getParseException().getSourceException(); // gestito nel cacth
- }catch(Exception e){
- msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_CONSEGNA, ("salvataggio risposta, "+e.getMessage()));
- if(bustaRichiesta.getMittente()!=null && bustaRichiesta.getTipoMittente()!=null){
- msgDiag.logPersonalizzato("consegnaConErrore");
- }
- else{
- msgDiag.logPersonalizzato("consegnaConErrore.mittenteAnonimo");
- }
-
- msgResponse.deleteMessageFromFileSystem(); // elimino eventuale risposta salvata su fileSystem
- msgResponse.aggiornaProprietarioMessaggio(TimerGestoreMessaggi.ID_MODULO);
- if(responseMessage==null || responseMessage.getParseException() == null){
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_510_SAVE_RESPONSE_MSG),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- } else {
-
- ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.UNPROCESSABLE_RESPONSE_CONTENT);
- if(localForwardEngine!=null) {
- localForwardEngine.setIntegrationFunctionError(IntegrationFunctionError.UNPROCESSABLE_RESPONSE_CONTENT);
- }
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.CONTENUTO_RISPOSTA_NON_RICONOSCIUTO, true);
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_440_PARSING_EXCEPTION_RISPOSTA.
- getErrore440_MessaggioRispostaMalformato(responseMessage.getParseException().getParseException()),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore,
- responseMessage.getParseException().getParseException(),
- responseMessage.getParseException(),
- pddContext);
-
- }
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "salvataggio risposta, "+e.getMessage());
- return esito;
- }
- // Creazione messaggio di risposta
- if(localForward){
-
- localForwardEngine.sendResponse(idMessageResponse);
-
- }
- else{
-
- ImbustamentoRisposteMessage imbustamentoRisposteMSG = new ImbustamentoRisposteMessage();
- imbustamentoRisposteMSG.setIDMessageResponse(idMessageResponse);
- imbustamentoRisposteMSG.setRichiestaApplicativa(richiestaApplicativa);
- imbustamentoRisposteMSG.setRichiestaDelegata(richiestaDelegata);
- imbustamentoRisposteMSG.setBusta(bustaRichiesta);
- imbustamentoRisposteMSG.setSpedizioneMsgIngresso(ejbUtils.getSpedizioneMsgIngresso());
- imbustamentoRisposteMSG.setRicezioneMsgRisposta(ejbUtils.getRicezioneMsgRisposta());
- imbustamentoRisposteMSG.setOneWayVersione11(oneWayVersione11);
- imbustamentoRisposteMSG.setStateless(consegnaContenutiApplicativiMsg.isStateless());
- imbustamentoRisposteMSG.setImplementazionePdDSoggettoMittente(consegnaContenutiApplicativiMsg.getImplementazionePdDSoggettoMittente());
- imbustamentoRisposteMSG.setImplementazionePdDSoggettoDestinatario(consegnaContenutiApplicativiMsg.getImplementazionePdDSoggettoDestinatario());
- imbustamentoRisposteMSG.setPddContext(pddContext);
-
-
- // Spedizione risposta al modulo 'ImbustamentoRisposte'
- msgDiag.mediumDebug("Invio messaggio al modulo di ImbustamentoRisposte...");
- if (openspcoopstate instanceof OpenSPCoopStateful){
- try{
- ejbUtils.getNodeSender(this.propertiesReader, this.log).send(imbustamentoRisposteMSG, ImbustamentoRisposte.ID_MODULO, msgDiag,
- identitaPdD,ConsegnaContenutiApplicativi.ID_MODULO, idMessaggioConsegna,msgResponse);
- } catch (Exception e) {
- this.log.error("Spedizione->ImbustamentoRisposte non riuscita",e);
- msgDiag.logErroreGenerico(e,"GenericLib.nodeSender.send(ImbustamentoRisposte)");
- msgResponse.deleteMessageFromFileSystem(); // elimino eventuale risposta salvata su fileSystem
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- (responseMessage!=null ? responseMessage.getParseException() : null),
- pddContext);
-
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "Spedizione->ImbustamentoRisposte non riuscita");
- return esito;
- }
- }
- else ((OpenSPCoopStateless)openspcoopstate).setMessageLib(imbustamentoRisposteMSG);
- }
- }
- }
- /* ---------- Aggiornamento numero di sequenza ---------------- */
- if(ordineConsegna!=null){
- if(oneWayVersione11 || openspcoopstate instanceof OpenSPCoopStateful){
- msgDiag.mediumDebug("Aggiornamento numero sequenza per consegna in ordine...");
- ordineConsegna.setNextSequenza_daRicevere(bustaRichiesta);
- }
- }
- /* ---------- Gestione Transazione Modulo ---------------- */
- // messaggio finale
- msgDiag.addKeyword(CostantiPdD.KEY_TIPO_CONNETTORE, tipoConnector);
- msgDiag.logPersonalizzato("gestioneConsegnaTerminata");
- // Commit JDBC della risposta
- msgDiag.mediumDebug("Commit delle operazioni per la gestione della richiesta...");
- openspcoopstate.commit();
- // Aggiornamento cache messaggio
- if(msgRequest!=null)
- msgRequest.addMessaggiIntoCache_readFromTable(ConsegnaContenutiApplicativi.ID_MODULO, "richiesta");
- if(msgResponse!=null)
- msgResponse.addMessaggiIntoCache_readFromTable(ConsegnaContenutiApplicativi.ID_MODULO, "risposta");
- // Aggiornamento cache proprietario messaggio
- if(msgRequest!=null)
- msgRequest.addProprietariIntoCache_readFromTable(ConsegnaContenutiApplicativi.ID_MODULO, "richiesta",null,false);
- if(msgResponse!=null)
- msgResponse.addProprietariIntoCache_readFromTable(ConsegnaContenutiApplicativi.ID_MODULO, "risposta",idMessaggioConsegna,false);
- }catch(Throwable e){
- this.log.error("ErroreGenerale",e);
- msgDiag.logErroreGenerico(e, "Generale");
- if ( msgResponse!=null ){
- msgResponse.deleteMessageFromFileSystem(); // elimino eventuale risposta salvata su fileSystem
- }
- if(existsModuloInAttesaRispostaApplicativa) {
- try{
-
- ParseException parseException = null;
- if(useResponseForParseException) {
- parseException = (responseMessage!=null ? responseMessage.getParseException() : null);
- }
- else {
- parseException = (consegnaMessagePrimaTrasformazione!=null ? consegnaMessagePrimaTrasformazione.getParseException() : null);
- }
-
- this.sendErroreProcessamento(localForward, localForwardEngine, ejbUtils,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- getErroreIntegrazione(),
- idModuloInAttesa, bustaRichiesta, idCorrelazioneApplicativa, idCorrelazioneApplicativaRisposta, servizioApplicativoFruitore, e,
- parseException,
- pddContext);
-
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "ErroreGenerale");
- }catch(Exception er){
- msgDiag.logErroreGenerico(er,"ejbUtils.sendErroreGenerale(profiloConRisposta)");
- ejbUtils.rollbackMessage("Spedizione Errore al Mittente durante una richiesta con gestione della risposta non riuscita",servizioApplicativo, esito, false);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(er);
- }
- }else{
- ejbUtils.rollbackMessage("ErroreGenerale:"+e.getMessage(), servizioApplicativo, esito, false);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }finally{
- try {
- if(transazioneApplicativoServer!=null) {
- if(consegnaMessageTrasformato!=null) {
- transazioneApplicativoServer.setRichiestaUscitaBytes(consegnaMessageTrasformato.getOutgoingMessageContentLength());
- }
- if(responseMessage!=null) {
- long incomingResponseMessageContentLength = responseMessage.getIncomingMessageContentLength();
- if(incomingResponseMessageContentLength<=0){
- incomingResponseMessageContentLength = responseContentLength;
- if(incomingResponseMessageContentLength<0){
- //System.out.println("FLUSH");
- // forzo la lettura del messaggio per impostare la dimensione della richiesta
- try{
- responseMessage.writeTo(NullOutputStream.INSTANCE, true);
- }catch(Exception eFlush){
- // ignore
- }
- incomingResponseMessageContentLength = responseMessage.getIncomingMessageContentLength();
- }
- }
- transazioneApplicativoServer.setRispostaIngressoBytes(incomingResponseMessageContentLength);
- }
- }
- }catch(Throwable t) {
- this.log.error("Errore durante la lettura delle dimensioni dei messaggi: "+t.getMessage(),t);
- }
- try{
- if(connectorSenderForDisconnect!=null)
- connectorSenderForDisconnect.disconnect();
- }catch(Exception e){
- try{
- if(msgDiag!=null)
- msgDiag.logDisconnectError(e, location);
- }catch(Exception eDisconnect){
- this.log.error("Errore durante la chiusura delle connessione: "+eDisconnect.getMessage(),e);
- }
- }
- }
- // Elimino SIL destinatario a cui ho consegnato il messaggio
- // a meno di consegna per riferimento
- // if(connectionDB!=null){
- // msgDiag.mediumDebug("Eliminazione SIL destinatario del messaggio nella tabelle MSG_SERVIZI_APPLICATIVI...");
- if(consegnaPerRiferimento==false){
- try{
- String idMessaggioGestoreMessaggiRichiestaEliminazione = idMessaggioConsegna;
- if(idMessaggioPreBehaviour!=null){
- idMessaggioGestoreMessaggiRichiestaEliminazione = bustaRichiesta.getID();
- }
-
- GestoreMessaggi gestoreEliminazioneDestinatario = new GestoreMessaggi(openspcoopstate, true, idMessaggioGestoreMessaggiRichiestaEliminazione,Costanti.INBOX,msgDiag,pddContext);
- if(idMessaggioPreBehaviour!=null && !(openspcoopstate instanceof OpenSPCoopStateful) ){
- gestoreEliminazioneDestinatario.setOneWayVersione11(true); // per forzare l'update su db
- }
- else{
- gestoreEliminazioneDestinatario.setOneWayVersione11(oneWayVersione11);
- }
- gestoreEliminazioneDestinatario.eliminaDestinatarioMessaggio(servizioApplicativo, null, oraRegistrazione);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e,"gestoreEliminazioneDestinatario.eliminaDestinatarioMessaggio("+servizioApplicativo+",null)");
- }
- }
- // Rilascio connessione al DB
- msgDiag.mediumDebug(ConsegnaContenutiApplicativi.ID_MODULO+ " Rilascio le risorse..");
- openspcoopstate.releaseResource();
- msgDiag.mediumDebug("Lavoro Terminato.");
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.OK,null);
- return esito;
- }
-
-
- private void sendErroreProcessamento(boolean localForward,LocalForwardEngine localForwardEngine, EJBUtils ejbUtils, ErroreIntegrazione errore,
- String idModuloInAttesa,Busta bustaRichiesta,String idCorrelazioneApplicativa, String idCorrelazioneApplicativaRisposta,
- String servizioApplicativoFruitore, Throwable e, ParseException parseException,
- PdDContext pddContext) throws LocalForwardException, EJBUtilsException, ProtocolException{
- if(localForward){
- localForwardEngine.sendErrore(pddContext, errore,e,parseException);
- }else{
- ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
- errore, idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,parseException);
- }
- }
-
- private void sendErroreProcessamento(boolean localForward,LocalForwardEngine localForwardEngine, EJBUtils ejbUtils, OpenSPCoop2Message errorMessage, String errorDetail,
- String idModuloInAttesa,Busta bustaRichiesta,String idCorrelazioneApplicativa, String idCorrelazioneApplicativaRisposta,
- String servizioApplicativoFruitore) throws LocalForwardException, EJBUtilsException, ProtocolException{
- if(localForward){
- localForwardEngine.sendErrore(errorMessage);
- }else{
- ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,
- errorMessage, errorDetail);
- }
- }
- private void mappingProtocolProperties(Map<String, List<String>> protocolProperties,Map<String, List<String>> propertiesDaImpostare,
- IDSoggetto soggettoFruitoreHeaderIntegrazione, IDServizio servizioHeaderIntegrazione,
- IDSoggetto soggettoFruitore,IDServizio idServizio,
- Busta bustaRichiesta, String idCorrelazioneApplicativa){
- // mapping in valori delle keyword delle proprieta di trasporto protocol-properties.
- if(protocolProperties != null){
- Iterator<String> keys = protocolProperties.keySet().iterator();
- while (keys.hasNext()) {
- String key = (String) keys.next();
- List<String> values = protocolProperties.get(key);
- String value = TransportUtils.getFirstValue(values);
-
- if(ProprietaProtocolloValore.TIPO_MITTENTE.equals(value)){
- if(soggettoFruitoreHeaderIntegrazione!=null && soggettoFruitoreHeaderIntegrazione.getTipo()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,soggettoFruitoreHeaderIntegrazione.getTipo());
- }else if(soggettoFruitore!=null && soggettoFruitore.getTipo()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,soggettoFruitore.getTipo());
- }else if(bustaRichiesta!=null && bustaRichiesta.getTipoMittente()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getTipoMittente());
- }
- }
- if(ProprietaProtocolloValore.MITTENTE.equals(value)){
- if(soggettoFruitoreHeaderIntegrazione!=null && soggettoFruitoreHeaderIntegrazione.getNome()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,soggettoFruitoreHeaderIntegrazione.getNome());
- }else if(soggettoFruitore!=null && soggettoFruitore.getNome()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,soggettoFruitore.getNome());
- }else if(bustaRichiesta!=null && bustaRichiesta.getMittente()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getMittente());
- }
- }
- if(ProprietaProtocolloValore.IDENTIFICATIVO_PORTA_MITTENTE.equals(value)){
- if(soggettoFruitoreHeaderIntegrazione!=null && soggettoFruitoreHeaderIntegrazione.getCodicePorta()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,soggettoFruitoreHeaderIntegrazione.getCodicePorta());
- }else if(soggettoFruitore!=null && soggettoFruitore.getCodicePorta()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,soggettoFruitore.getCodicePorta());
- }else if(bustaRichiesta!=null && bustaRichiesta.getIdentificativoPortaMittente()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getIdentificativoPortaMittente());
- }
- }
-
- if(ProprietaProtocolloValore.TIPO_DESTINATARIO.equals(value)){
- if(servizioHeaderIntegrazione!=null && servizioHeaderIntegrazione.getSoggettoErogatore()!=null &&
- servizioHeaderIntegrazione.getSoggettoErogatore().getTipo()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,servizioHeaderIntegrazione.getSoggettoErogatore().getTipo());
- }else if(idServizio!=null && idServizio.getSoggettoErogatore()!=null &&
- idServizio.getSoggettoErogatore().getTipo()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,idServizio.getSoggettoErogatore().getTipo());
- }else if(bustaRichiesta!=null && bustaRichiesta.getTipoDestinatario()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getTipoDestinatario());
- }
- }
- if(ProprietaProtocolloValore.DESTINATARIO.equals(value)){
- if(servizioHeaderIntegrazione!=null && servizioHeaderIntegrazione.getSoggettoErogatore()!=null &&
- servizioHeaderIntegrazione.getSoggettoErogatore().getNome()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,servizioHeaderIntegrazione.getSoggettoErogatore().getNome());
- }else if(idServizio!=null && idServizio.getSoggettoErogatore()!=null &&
- idServizio.getSoggettoErogatore().getNome()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,idServizio.getSoggettoErogatore().getNome());
- }else if(bustaRichiesta!=null && bustaRichiesta.getDestinatario()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getDestinatario());
- }
- }
- if(ProprietaProtocolloValore.IDENTIFICATIVO_PORTA_DESTINATARIO.equals(value)){
- if(servizioHeaderIntegrazione!=null && servizioHeaderIntegrazione.getSoggettoErogatore()!=null &&
- servizioHeaderIntegrazione.getSoggettoErogatore().getCodicePorta()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,servizioHeaderIntegrazione.getSoggettoErogatore().getCodicePorta());
- }else if(idServizio!=null && idServizio.getSoggettoErogatore()!=null &&
- idServizio.getSoggettoErogatore().getCodicePorta()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,idServizio.getSoggettoErogatore().getCodicePorta());
- }else if(bustaRichiesta!=null && bustaRichiesta.getIdentificativoPortaDestinatario()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getIdentificativoPortaDestinatario());
- }
- }
- if(ProprietaProtocolloValore.TIPO_SERVIZIO.equals(value)){
- if(servizioHeaderIntegrazione!=null && servizioHeaderIntegrazione.getTipo()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,servizioHeaderIntegrazione.getTipo());
- }else if(idServizio!=null && idServizio.getTipo()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,idServizio.getTipo());
- }else if(bustaRichiesta!=null && bustaRichiesta.getTipoServizio()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getTipoServizio());
- }
- }
- if(ProprietaProtocolloValore.SERVIZIO.equals(value)){
- if(servizioHeaderIntegrazione!=null && servizioHeaderIntegrazione.getNome()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,servizioHeaderIntegrazione.getNome());
- }else if(idServizio!=null && idServizio.getNome()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,idServizio.getNome());
- }else if(bustaRichiesta!=null && bustaRichiesta.getServizio()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getServizio());
- }
- }
- if(ProprietaProtocolloValore.VERSIONE_SERVIZIO.equals(value)){
- if(servizioHeaderIntegrazione!=null && servizioHeaderIntegrazione.getVersione()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,servizioHeaderIntegrazione.getVersione().intValue()+"");
- }else if(idServizio!=null && idServizio.getVersione()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,idServizio.getVersione().intValue()+"");
- }else if(bustaRichiesta!=null && bustaRichiesta.getVersioneServizio()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getVersioneServizio().intValue()+"");
- }
- }
-
- if(ProprietaProtocolloValore.AZIONE.equals(value)){
- if(servizioHeaderIntegrazione!=null && servizioHeaderIntegrazione.getAzione()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,servizioHeaderIntegrazione.getAzione());
- }else if(idServizio!=null && idServizio.getAzione()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,idServizio.getAzione());
- }else if(bustaRichiesta!=null && bustaRichiesta.getAzione()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getAzione());
- }
- }
-
- if(ProprietaProtocolloValore.IDENTIFICATIVO.equals(value)){
- if(bustaRichiesta!=null && bustaRichiesta.getID()!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,bustaRichiesta.getID());
- }
- }
- if(ProprietaProtocolloValore.IDENTIFICATIVO_CORRELAZIONE_APPLICATIVA.equals(value)){
- if(idCorrelazioneApplicativa!=null){
- TransportUtils.setHeader(propertiesDaImpostare,key,idCorrelazioneApplicativa);
- }
- }
- }
- }
- }
-
-
- private void emitDiagnostico(boolean invokerNonSupportato, Busta bustaRichiesta, MsgDiagnostico msgDiag, boolean errorConsegna) {
- if(invokerNonSupportato==false){
- if(bustaRichiesta.getMittente()!=null && bustaRichiesta.getTipoMittente()!=null){
- if(errorConsegna){
- msgDiag.logPersonalizzato("consegnaConErrore");
- }else{
- msgDiag.logPersonalizzato("consegnaEffettuata");
- }
- }
- else{
- if(errorConsegna){
- msgDiag.logPersonalizzato("consegnaConErrore.mittenteAnonimo");
- }else{
- msgDiag.logPersonalizzato("consegnaEffettuata.mittenteAnonimo");
- }
- }
- }
- }
-
- private void correctForwardPathNotifiche(TransazioneApplicativoServer transazioneApplicativoServer, OpenSPCoop2Message msg, IProtocolFactory<?> pf) throws ProtocolException {
- if(transazioneApplicativoServer!=null && ServiceBinding.REST.equals(msg.getServiceBinding())) {
-
- // non deve essere effettuato il forward del contesto nel path
- TransportRequestContext requestContext = msg.getTransportRequestContext();
- if(requestContext!=null) {
- String resourcePath = requestContext.getFunctionParameters();
- if(resourcePath!=null){
- if(resourcePath.startsWith("/")){
- resourcePath = resourcePath.substring(1);
- }
- if(requestContext.getInterfaceName()!=null) {
- if(resourcePath.startsWith(requestContext.getInterfaceName())){
- requestContext.setFunctionParameters(requestContext.getInterfaceName());
- }
- else {
- String normalizedInterfaceName = ConnettoreUtils.normalizeInterfaceName(msg, ConsegnaContenutiApplicativi.ID_MODULO, pf);
- if(normalizedInterfaceName!=null && resourcePath.startsWith(normalizedInterfaceName)){
- requestContext.setFunctionParameters(normalizedInterfaceName);
- }
- }
- }
- }
- }
-
- // non deve essere effettuato il forward dei parametri
- if(requestContext!=null && requestContext.getParameters()!=null) {
- requestContext.getParameters().clear();
- }
- }
- }
-
- @SuppressWarnings("unchecked")
- private List<String> readServiziApplicativiAbilitatiForwardTo(PdDContext pddContext) {
- List<String> serviziApplicativiAbilitatiForwardTo = null;
- if(pddContext!=null && pddContext.containsKey(org.openspcoop2.core.constants.Costanti.CONSEGNA_MULTIPLA_CONNETTORI_BY_SA)) {
- serviziApplicativiAbilitatiForwardTo = (List<String>) pddContext.getObject(org.openspcoop2.core.constants.Costanti.CONSEGNA_MULTIPLA_CONNETTORI_BY_SA);
- }
- return serviziApplicativiAbilitatiForwardTo;
- }
-
- private void registraTracciaOutRequest(Transaction transactionNullable, OutRequestContext outRequestContext, Logger log, MsgDiagnostico msgDiag) throws HandlerException {
- try {
-
- if(transactionNullable==null) {
- // comunicazione statefull
- return;
- }
-
- TracciamentoManager tracciamentoManager = new TracciamentoManager(FaseTracciamento.OUT_REQUEST);
- if(!tracciamentoManager.isTransazioniEnabled()) {
- return;
- }
-
- InformazioniTransazione info = new InformazioniTransazione();
- info.setContext(outRequestContext.getPddContext());
- info.setTipoPorta(outRequestContext.getTipoPorta());
- info.setProtocolFactory(outRequestContext.getProtocolFactory());
- info.setProtocollo(outRequestContext.getProtocollo());
- info.setIntegrazione(outRequestContext.getIntegrazione());
- info.setIdModulo(outRequestContext.getIdModulo());
-
- TransportRequestContext transportRequestContext = null;
- if(outRequestContext.getMessaggio()!=null) {
- transportRequestContext = outRequestContext.getMessaggio().getTransportRequestContext();
- }
- String esitoContext = EsitoBuilder.getTipoContext(transportRequestContext, EsitiProperties.getInstance(log, outRequestContext.getProtocolFactory()), log);
-
- tracciamentoManager.invoke(info, esitoContext,
- outRequestContext.getConnettore()!=null ? outRequestContext.getConnettore().getHeaders() : null,
- msgDiag);
-
- }catch(Exception e) {
- ServicesUtils.processTrackingException(e, log, FaseTracciamento.OUT_REQUEST, outRequestContext.getPddContext());
- }
-
- }
- }