TransazioneUtilities.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.logger.transazioni;
- import java.io.ByteArrayOutputStream;
- import java.sql.Timestamp;
- import java.util.ArrayList;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import org.apache.commons.lang.StringUtils;
- import org.openspcoop2.core.commons.CoreException;
- import org.openspcoop2.core.config.Transazioni;
- import org.openspcoop2.core.config.constants.StatoFunzionalita;
- import org.openspcoop2.core.constants.Costanti;
- import org.openspcoop2.core.constants.CostantiLabel;
- import org.openspcoop2.core.constants.TipoPdD;
- import org.openspcoop2.core.controllo_traffico.beans.MisurazioniTransazione;
- import org.openspcoop2.core.id.IDAccordo;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.AccordoServizioParteComune;
- import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
- import org.openspcoop2.core.registry.GruppoAccordo;
- import org.openspcoop2.core.registry.driver.IDAccordoFactory;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.core.transazioni.CredenzialeMittente;
- import org.openspcoop2.core.transazioni.Transazione;
- import org.openspcoop2.core.transazioni.TransazioneExtendedInfo;
- import org.openspcoop2.core.transazioni.constants.PddRuolo;
- import org.openspcoop2.core.transazioni.constants.RuoloTransazione;
- import org.openspcoop2.core.transazioni.constants.TipoAPI;
- import org.openspcoop2.core.transazioni.constants.TipoMessaggio;
- import org.openspcoop2.core.transazioni.utils.PropertiesSerializator;
- import org.openspcoop2.core.transazioni.utils.TempiElaborazioneUtils;
- import org.openspcoop2.core.transazioni.utils.credenziali.AbstractCredenzialeList;
- import org.openspcoop2.message.OpenSPCoop2RestMessage;
- import org.openspcoop2.message.OpenSPCoop2SoapMessage;
- import org.openspcoop2.message.constants.MessageRole;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.message.xml.MessageXMLUtils;
- import org.openspcoop2.monitor.engine.condition.EsitoUtils;
- import org.openspcoop2.monitor.sdk.transaction.FaseTracciamento;
- import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
- import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
- import org.openspcoop2.pdd.core.CostantiPdD;
- import org.openspcoop2.pdd.core.EJBUtils;
- import org.openspcoop2.pdd.core.EJBUtilsMessaggioInConsegna;
- import org.openspcoop2.pdd.core.GestoreMessaggi;
- import org.openspcoop2.pdd.core.PdDContext;
- import org.openspcoop2.pdd.core.autenticazione.GestoreAutenticazione;
- import org.openspcoop2.pdd.core.behaviour.built_in.multi_deliver.ConfigurazioneMultiDeliver;
- import org.openspcoop2.pdd.core.controllo_traffico.CostantiControlloTraffico;
- import org.openspcoop2.pdd.core.handlers.ExtendedTransactionInfo;
- import org.openspcoop2.pdd.core.handlers.HandlerException;
- import org.openspcoop2.pdd.core.state.IOpenSPCoopState;
- import org.openspcoop2.pdd.core.state.OpenSPCoopStateful;
- import org.openspcoop2.pdd.core.token.InformazioniNegoziazioneToken;
- import org.openspcoop2.pdd.core.token.InformazioniToken;
- import org.openspcoop2.pdd.core.token.TokenUtilities;
- import org.openspcoop2.pdd.core.token.attribute_authority.InformazioniAttributi;
- import org.openspcoop2.pdd.core.transazioni.DateUtility;
- import org.openspcoop2.pdd.core.transazioni.Transaction;
- import org.openspcoop2.pdd.logger.DiagnosticInputStream;
- import org.openspcoop2.pdd.logger.DumpUtility;
- import org.openspcoop2.pdd.logger.MsgDiagnostico;
- import org.openspcoop2.pdd.logger.OpenSPCoop2Logger;
- import org.openspcoop2.pdd.logger.info.InfoEsitoTransazioneFormatUtils;
- import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
- 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.builder.EsitoTransazione;
- import org.openspcoop2.protocol.sdk.builder.IBustaBuilder;
- import org.openspcoop2.protocol.sdk.constants.EsitoTransazioneName;
- import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
- import org.openspcoop2.protocol.sdk.constants.TipoSerializzazione;
- import org.openspcoop2.protocol.sdk.dump.Messaggio;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.protocol.sdk.tracciamento.Traccia;
- import org.openspcoop2.protocol.utils.EsitiProperties;
- import org.openspcoop2.utils.MapKey;
- import org.openspcoop2.utils.date.DateManager;
- import org.openspcoop2.utils.json.JSONUtils;
- import org.openspcoop2.utils.transport.TransportUtils;
- import org.slf4j.Logger;
- import com.fasterxml.jackson.databind.JsonNode;
- /**
- * TransazioneUtilities
- *
- * @author Poli Andrea (poli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class TransazioneUtilities {
- private Logger logger;
- private boolean transazioniRegistrazioneTracceHeaderRawEnabled;
- private boolean transazioniRegistrazioneTracceDigestEnabled;
- private boolean transazioniRegistrazioneTracceProtocolPropertiesEnabled;
- private boolean transazioniRegistrazioneTokenInformazioniNormalizzate;
- private boolean transazioniRegistrazioneAttributiInformazioniNormalizzate;
- private boolean transazioniRegistrazioneTempiElaborazione;
- private boolean transazioniRegistrazioneRetrieveTokenSaveAsTokenInfo;
-
- public TransazioneUtilities(Logger log, OpenSPCoop2Properties openspcoopProperties,
- boolean transazioniRegistrazioneTracceHeaderRawEnabled,
- boolean transazioniRegistrazioneTracceDigestEnabled,
- boolean transazioniRegistrazioneTracceProtocolPropertiesEnabled,
- Transazioni configTransazioni){
- this.logger = log;
- this.transazioniRegistrazioneTracceHeaderRawEnabled = transazioniRegistrazioneTracceHeaderRawEnabled;
- this.transazioniRegistrazioneTracceDigestEnabled = transazioniRegistrazioneTracceDigestEnabled;
- this.transazioniRegistrazioneTracceProtocolPropertiesEnabled = transazioniRegistrazioneTracceProtocolPropertiesEnabled;
-
- this.transazioniRegistrazioneTempiElaborazione = configTransazioni!=null && StatoFunzionalita.ABILITATO.equals(configTransazioni.getTempiElaborazione());
- this.transazioniRegistrazioneTokenInformazioniNormalizzate = configTransazioni!=null && StatoFunzionalita.ABILITATO.equals(configTransazioni.getToken());
- this.transazioniRegistrazioneAttributiInformazioniNormalizzate = configTransazioni!=null && StatoFunzionalita.ABILITATO.equals(configTransazioni.getToken()) &&
- openspcoopProperties.isGestioneAttributeAuthorityTransazioniRegistrazioneAttributiInformazioniNormalizzate(); // per adesso la configurazione avviene via govway.properties
- this.transazioniRegistrazioneRetrieveTokenSaveAsTokenInfo = configTransazioni!=null && StatoFunzionalita.ABILITATO.equals(configTransazioni.getToken()) &&
- openspcoopProperties.isGestioneRetrieveTokenSaveAsTokenInfo(); // per adesso la configurazione avviene via govway.properties
- }
-
- public static boolean isConsegnaMultipla(Context context) {
- int connettoriMultipli = getNumeroConnettoriMultipli(context);
- return ConfigurazioneTracciamentoUtils.isConsegnaMultipla(connettoriMultipli);
- }
- public static boolean isConsegnaMultipla(int connettoriMultipli) {
- return ConfigurazioneTracciamentoUtils.isConsegnaMultipla(connettoriMultipli);
- }
- public static int getNumeroConnettoriMultipli(Context context) {
- return ConfigurazioneTracciamentoUtils.getNumeroConnettoriMultipli(context);
- }
- public static String getConnettoriMultipli(Context context) {
- return ConfigurazioneTracciamentoUtils.getConnettoriMultipli(context);
- }
-
- public static MisurazioniTransazione fillMisurazioniTransazione(InformazioniTransazione info, FaseTracciamento fase, Transaction transaction, EsitoTransazione esito, Transazione transactionDTOparam) {
- MisurazioniTransazione misurazioniTransazione = new MisurazioniTransazione();
- misurazioniTransazione.setTipoPdD(info.getTipoPorta());
- misurazioniTransazione.setProtocollo( info.getProtocolFactory().getProtocol());
- misurazioniTransazione.setEsitoTransazione(esito.getCode());
-
- OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
-
- boolean fillTransaction = transactionDTOparam==null;
- Transazione transactionDTO = fillTransaction ? new Transazione() : transactionDTOparam;
-
- if(fillTransaction)
- TransazioneUtilities.setDataIngressoRichiesta(op2Properties, transactionDTO, info, transaction);
- misurazioniTransazione.setDataIngressoRichiesta(transactionDTO.getDataIngressoRichiesta());
-
- if(fillTransaction)
- TransazioneUtilities.setDataUscitaRichiesta(transactionDTO, fase, transaction);
- misurazioniTransazione.setDataUscitaRichiesta(transactionDTO.getDataUscitaRichiesta());
-
- if(fillTransaction)
- TransazioneUtilities.setDataIngressoRisposta(op2Properties, transactionDTO, fase, transaction);
- misurazioniTransazione.setDataIngressoRisposta(transactionDTO.getDataIngressoRisposta());
-
- if(fillTransaction)
- TransazioneUtilities.setDataUscitaRisposta(op2Properties, transactionDTO, info, fase, transaction);
- misurazioniTransazione.setDataUscitaRisposta(transactionDTO.getDataUscitaRisposta());
-
- if(fillTransaction)
- TransazioneUtilities.setRichiestaIngressoBytes(transactionDTO, info, transaction, fase);
- misurazioniTransazione.setRichiestaIngressoBytes(transactionDTO.getRichiestaIngressoBytes());
-
- if(fillTransaction)
- TransazioneUtilities.setRichiestaUscitaBytes(transactionDTO, info, transaction, fase);
- misurazioniTransazione.setRichiestaUscitaBytes(transactionDTO.getRichiestaUscitaBytes());
-
- if(fillTransaction)
- TransazioneUtilities.setRispostaIngressoBytes(transactionDTO, info, transaction, fase);
- misurazioniTransazione.setRispostaIngressoBytes(transactionDTO.getRispostaIngressoBytes());
-
- if(fillTransaction)
- TransazioneUtilities.setRispostaUscitaBytes(transactionDTO, info, fase);
- misurazioniTransazione.setRispostaUscitaBytes(transactionDTO.getRispostaUscitaBytes());
-
- return misurazioniTransazione;
- }
-
-
- public Transazione fillTransaction(InformazioniTransazione info, Transaction transaction, IDSoggetto idDominio,
- TransazioniProcessTimes times, FaseTracciamento fase,
- EsitoTransazione esito, String esitoContext,
- Transazione transazioneDaAggiornare ) throws HandlerException{
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
-
- OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
-
- if(transaction==null) {
- throw new HandlerException("Transaction is null");
- }
- if(info==null) {
- throw new HandlerException("Informazioni sulla richiesta is null");
- }
-
- Traccia tracciaRichiesta = transaction.getTracciaRichiesta();
- Traccia tracciaRisposta = transaction.getTracciaRisposta();
- boolean richiestaDuplicata = false;
- ProfiloDiCollaborazione profiloCollaborazioneBustaTracciaRichiesta = null;
- String profiloCollaborazioneValueBustaTracciaRichiesta = null;
- if(tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null){
- richiestaDuplicata = transaction.containsIdProtocolloDuplicato(tracciaRichiesta.getBusta().getID());
- if(tracciaRichiesta.getBusta().getProfiloDiCollaborazione()!=null){
- profiloCollaborazioneBustaTracciaRichiesta = tracciaRichiesta.getBusta().getProfiloDiCollaborazione();
- profiloCollaborazioneValueBustaTracciaRichiesta = tracciaRichiesta.getBusta().getProfiloDiCollaborazioneValue();
- }
- }
- boolean rispostaDuplicata = false;
- if(tracciaRisposta!=null && tracciaRisposta.getBusta()!=null){
- rispostaDuplicata = transaction.containsIdProtocolloDuplicato(tracciaRisposta.getBusta().getID());
- }
- boolean schedulaNotificheDopoConsegnaSincrona = false;
- boolean consegnaMultiplaProfiloSincrono = false;
- MsgDiagnostico msgDiag = null;
- String idTransazione = null;
- String nomePorta = null;
-
- String identificativoSaveTransactionContext = null;
-
- long timeStart = -1;
- try {
- if(times!=null) {
- times.fillTransactionDetails = new ArrayList<>();
- timeStart = DateManager.getTimeMillis();
- }
-
- IProtocolFactory<?> protocolFactory = info.getProtocolFactory();
- IBustaBuilder<?> protocolBustaBuilder = protocolFactory.createBustaBuilder(info.getStato());
- RequestInfo requestInfo = null;
- if(info.getContext()!=null && info.getContext().containsKey(org.openspcoop2.core.constants.Costanti.REQUEST_INFO)) {
- requestInfo = (RequestInfo) info.getContext().getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
- }
- if(FaseTracciamento.POST_OUT_RESPONSE.equals(fase) &&
- info.getContext()!=null && info.getContext().containsKey(CostantiPdD.SALVA_CONTESTO_IDENTIFICATIVO_MESSAGGIO_NOTIFICA)) {
- identificativoSaveTransactionContext = (String) info.getContext().getObject(CostantiPdD.SALVA_CONTESTO_IDENTIFICATIVO_MESSAGGIO_NOTIFICA);
- }
-
- Transazione transactionDTO = transazioneDaAggiornare!=null ? transazioneDaAggiornare : new Transazione();
- EsitiProperties esitiProperties = EsitiProperties.getInstance(this.logger, protocolFactory);
-
- // ** Consegna Multipla **
- // NOTA: l'esito deve essere compreso solo dopo aver capito se le notifiche devono essere consegna o meno poichè le notifiche stesse si basano sullo stato di come è terminata la transazione sincrona
- int connettoriMultipli = getNumeroConnettoriMultipli(info.getContext());
- boolean consegnaMultipla = isConsegnaMultipla(connettoriMultipli);
-
- ConfigurazioneMultiDeliver configurazioneConsegnaMultiplaProfiloSincrono = null;
- if(FaseTracciamento.POST_OUT_RESPONSE.equals(fase) && consegnaMultipla) {
- Object oConnettoreSync = info.getContext().getObject(org.openspcoop2.core.constants.Costanti.CONSEGNA_MULTIPLA_SINCRONA );
- if (oConnettoreSync instanceof Boolean){
- consegnaMultiplaProfiloSincrono = (Boolean) oConnettoreSync;
- }
- else if (oConnettoreSync instanceof String){
- consegnaMultiplaProfiloSincrono = Boolean.valueOf( (String) oConnettoreSync );
- }
-
- if(consegnaMultiplaProfiloSincrono) {
- Object oConnettoreSyncConfig = info.getContext().getObject(org.openspcoop2.core.constants.Costanti.CONSEGNA_MULTIPLA_SINCRONA_CONFIGURAZIONE );
- if (oConnettoreSyncConfig instanceof ConfigurazioneMultiDeliver){
- configurazioneConsegnaMultiplaProfiloSincrono = (ConfigurazioneMultiDeliver) oConnettoreSyncConfig;
- }
- }
- }
- if(consegnaMultiplaProfiloSincrono) {
- if(transaction!=null && transaction.getRequestInfo()!=null && transaction.getRequestInfo().getProtocolContext()!=null){
- nomePorta = transaction.getRequestInfo().getProtocolContext().getInterfaceName();
- }
- msgDiag = MsgDiagnostico.newInstance(info.getTipoPorta(),idDominio, info.getIdModulo(), nomePorta, requestInfo, info.getStato());
- }
- if(consegnaMultiplaProfiloSincrono && configurazioneConsegnaMultiplaProfiloSincrono!=null &&
- esito!=null && esito.getCode()!=null) {
- if(configurazioneConsegnaMultiplaProfiloSincrono.isNotificheByEsito()) {
- int esitoSincrono = esito.getCode();
- if(isEsito(esitiProperties.getEsitiCodeOk_senzaFaultApplicativo(), esitoSincrono)) {
- schedulaNotificheDopoConsegnaSincrona = configurazioneConsegnaMultiplaProfiloSincrono.isNotificheByEsito_ok();
- }
- else if(isEsito(esitiProperties.getEsitiCodeFaultApplicativo(), esitoSincrono)) {
- schedulaNotificheDopoConsegnaSincrona = configurazioneConsegnaMultiplaProfiloSincrono.isNotificheByEsito_fault();
- }
- else if(isEsito(esitiProperties.getEsitiCodeErroriConsegna(), esitoSincrono)) {
- schedulaNotificheDopoConsegnaSincrona = configurazioneConsegnaMultiplaProfiloSincrono.isNotificheByEsito_erroriConsegna();
- }
- // le richieste scartate non arrivano alla gestione della consegna in smistatore e quindi non potranno nemmeno essere notifiate
- /**else if(isEsito(esitiProperties.getEsitiCodeRichiestaScartate(), esitoSincrono)) {
- // schedulaNotificheDopoConsegnaSincrona = configurazione_consegnaMultipla_profiloSincrono.isNotificheByEsito_richiesteScartate();
- //}*/
- else {
- schedulaNotificheDopoConsegnaSincrona = configurazioneConsegnaMultiplaProfiloSincrono.isNotificheByEsito_erroriProcessamento();
- }
- }
- else {
- schedulaNotificheDopoConsegnaSincrona = true;
- }
- }
- if(schedulaNotificheDopoConsegnaSincrona && info.getContext()!=null) {
- Exception e = null;
- Object oException = info.getContext().getObject(CostantiPdD.CONNETTORE_MULTIPLO_CONSEGNA_NOTIFICA_DISABILITATA );
- if (oException instanceof Exception){
- e = (Exception) oException;
- }
- if(e!=null) {
- // log effettuato in consegna contenuti
- schedulaNotificheDopoConsegnaSincrona = false;
- }
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("connettoreMultipli:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
-
- // ** Identificativo di transazione **
- if (info.getContext().getObject(Costanti.ID_TRANSAZIONE)!=null){
- idTransazione = ((String)info.getContext().getObject(Costanti.ID_TRANSAZIONE));
- transactionDTO.setIdTransazione(idTransazione);
- }else
- throw new HandlerException("ID Transazione Assente");
- // ** Esito Transazione **
- if (esito!=null){
- if(consegnaMultipla) {
- if(consegnaMultiplaProfiloSincrono) {
- if(schedulaNotificheDopoConsegnaSincrona) {
- transactionDTO.setEsito(esitiProperties.convertoToCode(EsitoTransazioneName.CONSEGNA_MULTIPLA));
- if(esito.getCode()!=null){
- transactionDTO.setEsitoSincrono(esito.getCode());
- }
- transactionDTO.setConsegneMultipleInCorso(connettoriMultipli);
- }
- else {
- if(esito.getCode()!=null){
- transactionDTO.setEsito(esito.getCode());
- }
- }
- }
- else {
- transactionDTO.setEsito(esitiProperties.convertoToCode(EsitoTransazioneName.CONSEGNA_MULTIPLA));
- transactionDTO.setConsegneMultipleInCorso(connettoriMultipli);
- }
- }
- else {
- if(esito.getCode()!=null){
- transactionDTO.setEsito(esito.getCode());
- }
- }
- transactionDTO.setEsitoContesto(esito.getContextType());
- }
- else {
- transactionDTO.setEsitoContesto(esitoContext);
- }
- // aggiungo fase all'esito
- transactionDTO.setEsitoContesto(EsitoUtils.buildEsitoContext(transactionDTO.getEsitoContesto(), fase));
-
-
- // ** Codice Risposta Uscita **
- if(info.getReturnCode()>0)
- transactionDTO.setCodiceRispostaUscita(info.getReturnCode()+"");
-
- // ** eventi di gestione **
- if(FaseTracciamento.POST_OUT_RESPONSE.equals(fase)){
- setEventi(transactionDTO, transaction,
- op2Properties,
- requestInfo,
- idDominio, info, idTransazione,
- times, timeStart, fase);
- }
- if(times!=null) {
- timeStart = DateManager.getTimeMillis();
- }
-
- // ** data_uscita_risposta **
- TransazioneUtilities.setDataUscitaRisposta(op2Properties, transactionDTO, info, fase, transaction);
-
- // ** data_uscita_risposta_stream **
- TransazioneUtilities.setDataUscitaRispostaStream(op2Properties, transactionDTO, info, fase);
-
- // ** dimensione_ingresso_risposta **
- TransazioneUtilities.setRispostaIngressoBytes(transactionDTO, info, transaction, fase);
-
- // ** dimensione_uscita_risposta **
- TransazioneUtilities.setRispostaUscitaBytes(transactionDTO, info, fase);
-
- // ** FAULT **
- if(FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- transactionDTO.setFaultIntegrazione(transaction.getFaultIntegrazione());
- transactionDTO.setFormatoFaultIntegrazione(transaction.getFormatoFaultIntegrazione());
- transactionDTO.setFaultCooperazione(transaction.getFaultCooperazione());
- transactionDTO.setFormatoFaultCooperazione(transaction.getFormatoFaultCooperazione());
- }
- /** boolean readFault = false;
- // if(TipoPdD.DELEGATA.equals(context.getTipoPorta())){
- // if(transactionDTO.getFaultIntegrazione()==null){
- // readFault = true;
- // }
- // }
- // else{
- // if(transactionDTO.getFaultCooperazione()==null){
- // readFault = true;
- // }
- // }*/
- // Il fault potrebbe essere cambiato durante la fase di gestione dalla consegna della risposta
- boolean readFault = true;
- if(readFault && FaseTracciamento.POST_OUT_RESPONSE.equals(fase)){
- setFaultInfo(transactionDTO,
- op2Properties,
- info);
- }
-
- // ** diagnostici **
- if(esito!=null) {
- String errore = InfoEsitoTransazioneFormatUtils.getMessaggioDiagnosticoErroreRilevante(this.logger, transactionDTO.getEsito(), protocolFactory, transaction.getMsgDiagnostici(), true);
- String warning = InfoEsitoTransazioneFormatUtils.getMessaggioDiagnosticoWarning(this.logger, transactionDTO.getEsito(), protocolFactory, transaction.getMsgDiagnostici());
- transactionDTO.setErrorLog(errore);
- transactionDTO.setWarningLog(warning);
- }
-
- // ***** NOTA: tutte le informazioni sopra devono essere "gestite in UPDATE" nel metodo TracciamentoManager.registraTransazione
-
- /*** ESCO SE SONO IN FASE POST OUT DI AGGIORNAMENTO DEI DATI */
-
- if(transazioneDaAggiornare!=null) {
- return transactionDTO; // nell'oggetto ci sono già tutti i dati eccetto l'esito corretto
- }
-
-
-
-
-
- // ** stato **
- // Stato di una transazione (marca la transazione con uno stato tramite la configurazione plugin)
- if(transaction.getStato()!=null) {
- transactionDTO.setStato(transaction.getStato());
- }
- // ** Ruolo transazione **
- // invocazioneOneway (1)
- // invocazioneSincrona (2)
- // invocazioneAsincronaSimmetrica (3)
- // rispostaAsincronaSimmetrica (4)
- // invocazioneAsincronaAsimmetrica (5)
- // richiestaStatoAsincronaAsimmetrica (6)
- // integrationManager (7)
- /**System.out.println("SCENARIO DI COOPERAZIONE ["+transaction.getScenarioCooperazione()+"]");*/
- RuoloTransazione ruolo = RuoloTransazione.getEnumConstantFromOpenSPCoopValue(transaction.getScenarioCooperazione());
- if(ruolo!=null)
- transactionDTO.setRuoloTransazione(ruolo.getValoreAsInt());
- else
- transactionDTO.setRuoloTransazione(-1);
- // ** protocollo **
- transactionDTO.setProtocollo(info.getProtocolFactory().getProtocol());
-
- // ** header HTTP **
- if(transaction.getRequestInfo()!=null &&
- transaction.getRequestInfo().getProtocolContext()!=null &&
- transaction.getRequestInfo().getProtocolContext().getRequestType()!=null) {
- transactionDTO.setTipoRichiesta(transaction.getRequestInfo().getProtocolContext().getRequestType());
- }
- // ** Codice Risposta Ingresso **
- transactionDTO.setCodiceRispostaIngresso(transaction.getCodiceTrasportoRichiesta());
- // ** Codice Risposta Uscita **
- // Gestite prima per la doppia fase, come per l'esito
- // ** Tempi di latenza **
- // Se data_accettazione_richiesta è null viene impostata a CURRENT_TIMESTAMP
- TransazioneUtilities.setDataAccettazioneRichiesta(transactionDTO, info, transaction);
-
- // Se data_ingresso_richiesta è null viene impostata a CURRENT_TIMESTAMP
- TransazioneUtilities.setDataIngressoRichiesta(op2Properties, transactionDTO, info, transaction);
-
- // data_ingresso_richiesta_stream
- TransazioneUtilities.setDataIngressoRichiestaStream(transactionDTO, info);
-
- // data_uscita_richiesta si imposta se e' diversa da null
- TransazioneUtilities.setDataUscitaRichiesta(transactionDTO, fase, transaction);
- // data_accettazione_risposta
- TransazioneUtilities.setDataAccettazioneRisposta(transactionDTO, fase, transaction);
-
- // data_ingresso_risposta
- TransazioneUtilities.setDataIngressoRisposta(op2Properties, transactionDTO, fase, transaction);
-
- // data_ingresso_risposta_stream
- TransazioneUtilities.setDataIngressoRispostaStream(transactionDTO, info, fase);
-
- // data_uscita_risposta
- // data_uscita_risposta_stream
- // Gestite prima per la doppia fase, come per l'esito
- // ** Dimensione messaggi gestiti **
- // Se le dimensioni (BIGINT) sono null occorre impostarle a zero
- // dimensione_ingresso_richiesta
- TransazioneUtilities.setRichiestaIngressoBytes(transactionDTO, info, transaction, fase);
- // dimensione_uscita_richiesta
- TransazioneUtilities.setRichiestaUscitaBytes(transactionDTO, info, transaction, fase);
- // dimensione_ingresso_risposta
- // dimensione_uscita_risposta
- // Gestite prima per la doppia fase, come per l'esito: faccio una ulteriore verifica se siamo nell'ultima fase e sono null
- if(transactionDTO.getRispostaIngressoBytes()==null &&
- FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- transactionDTO.setRispostaIngressoBytes(readDimensioneFromDumpBinario(TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO, transaction));
- }
- if(transactionDTO.getRispostaUscitaBytes()==null &&
- FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- transactionDTO.setRispostaUscitaBytes(readDimensioneFromDumpBinario(TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO, transaction));
- }
- // ** Dati Pdd **
- transactionDTO.setPddCodice(idDominio.getCodicePorta());
- transactionDTO.setPddTipoSoggetto(idDominio.getTipo());
- transactionDTO.setPddNomeSoggetto(idDominio.getNome());
- if(info.getTipoPorta()!=null){
- transactionDTO.setPddRuolo(PddRuolo.toEnumConstant(info.getTipoPorta().getTipo()));
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("baseContext:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- // ** FAULT **
- // Gestite prima per la doppia fase, come per l'esito
-
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("fault:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
- // ** Soggetto Fruitore **
- if (info.getProtocollo()!=null && info.getProtocollo().getFruitore()!=null) {
- transactionDTO.setTipoSoggettoFruitore(info.getProtocollo().getFruitore().getTipo());
- transactionDTO.setNomeSoggettoFruitore(info.getProtocollo().getFruitore().getNome());
- transactionDTO.setIdportaSoggettoFruitore(info.getProtocollo().getFruitore().getCodicePorta());
- transactionDTO.setIndirizzoSoggettoFruitore(info.getProtocollo().getIndirizzoFruitore());
- }
- else if(transaction!=null && transaction.getRequestInfo()!=null && transaction.getRequestInfo().getFruitore()!=null) {
- transactionDTO.setTipoSoggettoFruitore(transaction.getRequestInfo().getFruitore().getTipo());
- transactionDTO.setNomeSoggettoFruitore(transaction.getRequestInfo().getFruitore().getNome());
- transactionDTO.setIdportaSoggettoFruitore(transaction.getRequestInfo().getFruitore().getCodicePorta());
- }
- // ** Soggetto Erogatore **
- if (info.getProtocollo()!=null && info.getProtocollo().getErogatore()!=null) {
- transactionDTO.setTipoSoggettoErogatore(info.getProtocollo().getErogatore().getTipo());
- transactionDTO.setNomeSoggettoErogatore(info.getProtocollo().getErogatore().getNome());
- transactionDTO.setIdportaSoggettoErogatore(info.getProtocollo().getErogatore().getCodicePorta());
- transactionDTO.setIndirizzoSoggettoErogatore(info.getProtocollo().getIndirizzoErogatore());
- }
- else if(transaction!=null && transaction.getRequestInfo()!=null && transaction.getRequestInfo().getIdServizio()!=null &&
- transaction.getRequestInfo().getIdServizio().getSoggettoErogatore()!=null) {
- transactionDTO.setTipoSoggettoErogatore(transaction.getRequestInfo().getIdServizio().getSoggettoErogatore().getTipo());
- transactionDTO.setNomeSoggettoErogatore(transaction.getRequestInfo().getIdServizio().getSoggettoErogatore().getNome());
- transactionDTO.setIdportaSoggettoErogatore(transaction.getRequestInfo().getIdServizio().getSoggettoErogatore().getCodicePorta());
- }
- // ** Identificativi Messaggi **
- if (info.getProtocollo()!=null) {
- // Richiesta
- String idMessaggioRichiesta = info.getProtocollo().getIdRichiesta();
- if(
- //TipoPdD.APPLICATIVA.equals(context.getTipoPorta()) &&
- CostantiLabel.MODIPA_PROTOCOL_NAME.equals(protocolFactory.getProtocol()) &&
- tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null && tracciaRichiesta.getBusta().getID()!=null &&
- !tracciaRichiesta.getBusta().getID().equals(idMessaggioRichiesta)) {
- // modificato durante la gestione della validazione semantica
- idMessaggioRichiesta = tracciaRichiesta.getBusta().getID();
- }
- Timestamp dateInternaIdProtocolloRichiesta = null;
- if(op2Properties.isTransazioniFiltroDuplicatiSaveDateEnabled(protocolFactory) &&
- idMessaggioRichiesta!=null){
- dateInternaIdProtocolloRichiesta = DateUtility.getTimestampIntoIdProtocollo(this.logger,protocolBustaBuilder,idMessaggioRichiesta);
- }
- // Risposta
- String idMessaggioRisposta = null;
- Timestamp dateInternaIdProtocolloRisposta = null;
- // Nel contesto l'id di riposta puo' essere null o un valore generato per la confermaPresa in carico.
- // Se e' presenta una busta di risposta nella transazione deve pero' finire l'id di protocollo della busta.
- if(tracciaRisposta!=null && tracciaRisposta.getBusta()!=null && tracciaRisposta.getBusta().getID()!=null){
- idMessaggioRisposta = tracciaRisposta.getBusta().getID();
- if(op2Properties.isTransazioniFiltroDuplicatiSaveDateEnabled(protocolFactory)){
- dateInternaIdProtocolloRisposta = DateUtility.getTimestampIntoIdProtocollo(this.logger,protocolBustaBuilder,idMessaggioRisposta);
- }
- }
- else if(info.getProtocollo().getIdRisposta()!=null){
- idMessaggioRisposta = info.getProtocollo().getIdRisposta();
- if(op2Properties.isTransazioniFiltroDuplicatiSaveDateEnabled(protocolFactory)){
- dateInternaIdProtocolloRisposta = DateUtility.getTimestampIntoIdProtocollo(this.logger,protocolBustaBuilder,idMessaggioRisposta);
- }
- }
- // Set
- transactionDTO.setIdMessaggioRichiesta(idMessaggioRichiesta);
- transactionDTO.setIdMessaggioRisposta(idMessaggioRisposta);
- if(op2Properties.isTransazioniFiltroDuplicatiSaveDateEnabled(protocolFactory)){
- transactionDTO.setDataIdMsgRichiesta(dateInternaIdProtocolloRichiesta);
- transactionDTO.setDataIdMsgRisposta(dateInternaIdProtocolloRisposta);
- }
- }
- // ** altre informazioni **
- if (info.getProtocollo()!=null && info.getProtocollo().getProfiloCollaborazione()!=null) {
- transactionDTO.setProfiloCollaborazioneOp2(info.getProtocollo().getProfiloCollaborazione().getEngineValue());
- }
- else if(profiloCollaborazioneBustaTracciaRichiesta!=null){
- transactionDTO.setProfiloCollaborazioneOp2(profiloCollaborazioneBustaTracciaRichiesta.getEngineValue());
- }
- if (info.getProtocollo()!=null && info.getProtocollo().getProfiloCollaborazioneValue()!=null) {
- transactionDTO.setProfiloCollaborazioneProt(info.getProtocollo().getProfiloCollaborazioneValue());
- }
- else if(profiloCollaborazioneValueBustaTracciaRichiesta!=null){
- transactionDTO.setProfiloCollaborazioneProt(profiloCollaborazioneValueBustaTracciaRichiesta);
- }
- IDAccordo idAccordo = null;
- if (info.getProtocollo()!=null){
- transactionDTO.setIdCollaborazione(info.getProtocollo().getCollaborazione());
- idAccordo = info.getProtocollo().getIdAccordo();
- if(idAccordo!=null){
- transactionDTO.setUriAccordoServizio(IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordo));
- }
- transactionDTO.setTipoServizio(info.getProtocollo().getTipoServizio());
- transactionDTO.setNomeServizio(info.getProtocollo().getServizio());
- if(info.getProtocollo().getVersioneServizio()!=null && info.getProtocollo().getVersioneServizio().intValue()>0) {
- transactionDTO.setVersioneServizio(info.getProtocollo().getVersioneServizio());
- }
- transactionDTO.setAzione(info.getProtocollo().getAzione());
- }
- if(transactionDTO.getTipoServizio()==null &&
- (transaction!=null && transaction.getRequestInfo()!=null && transaction.getRequestInfo().getIdServizio()!=null)
- ){
- transactionDTO.setTipoServizio(transaction.getRequestInfo().getIdServizio().getTipo());
- }
- if(transactionDTO.getNomeServizio()==null &&
- (transaction!=null && transaction.getRequestInfo()!=null && transaction.getRequestInfo().getIdServizio()!=null)
- ){
- transactionDTO.setNomeServizio(transaction.getRequestInfo().getIdServizio().getNome());
- }
- if(
- (info.getProtocollo()==null || info.getProtocollo().getVersioneServizio()==null || info.getProtocollo().getVersioneServizio().intValue()<=0)
- &&
- (transaction!=null && transaction.getRequestInfo()!=null && transaction.getRequestInfo().getIdServizio()!=null)
- ){
- transactionDTO.setVersioneServizio(transaction.getRequestInfo().getIdServizio().getVersione());
- }
- if(transactionDTO.getAzione()==null &&
- (transaction!=null && transaction.getRequestInfo()!=null && transaction.getRequestInfo().getIdServizio()!=null)
- ){
- transactionDTO.setAzione(transaction.getRequestInfo().getIdServizio().getAzione());
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("identificativi:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- RegistroServiziManager registroServiziManager = RegistroServiziManager.getInstance(info.getStato());
- if(idAccordo==null &&
- (transactionDTO.getNomeServizio()!=null && transactionDTO.getTipoServizio()!=null &&
- transactionDTO.getNomeSoggettoErogatore()!=null && transactionDTO.getTipoSoggettoErogatore()!=null)
- ) {
- idAccordo = getIdAccordo(transactionDTO, registroServiziManager, requestInfo);
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("id-api:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- if(idAccordo!=null) {
- setAccordoInfo(idAccordo, transactionDTO,
- op2Properties, registroServiziManager, requestInfo,
- idDominio, info, idTransazione,
- times, timeStart, fase);
- if(times!=null) {
- timeStart = DateManager.getTimeMillis();
- }
- }
- // ** Identificativo asincrono se utilizzato come riferimento messaggio nella richiesta (2 fase asincrona) **
-
- if(tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null &&
- (ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(tracciaRichiesta.getBusta().getProfiloDiCollaborazione()) || ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(tracciaRichiesta.getBusta().getProfiloDiCollaborazione()) ) ){
- Busta busta = tracciaRichiesta.getBusta();
- if(busta.getRiferimentoMessaggio()!=null){
- // Seconda fase dei profili asincroni
- transactionDTO.setIdAsincrono(busta.getRiferimentoMessaggio());
- }
- else{
- transactionDTO.setIdAsincrono(busta.getCollaborazione());
- }
- }
- if(tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null &&
- ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(tracciaRichiesta.getBusta().getProfiloDiCollaborazione()) ){
- Busta busta = tracciaRichiesta.getBusta();
- if(busta!=null){
- transactionDTO.setTipoServizioCorrelato(busta.getTipoServizioCorrelato());
- transactionDTO.setNomeServizioCorrelato(busta.getServizioCorrelato());
- }
- }
- else if(tracciaRisposta!=null && tracciaRisposta.getBusta()!=null &&
- ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(tracciaRisposta.getBusta().getProfiloDiCollaborazione()) ){
- Busta busta = tracciaRisposta.getBusta();
- if(busta!=null){
- transactionDTO.setTipoServizioCorrelato(busta.getTipoServizioCorrelato());
- transactionDTO.setNomeServizioCorrelato(busta.getServizioCorrelato());
- }
- }
-
- if(transactionDTO.getIdCollaborazione()==null) {
- if(tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null && tracciaRichiesta.getBusta().getCollaborazione()!=null) {
- transactionDTO.setIdCollaborazione(tracciaRichiesta.getBusta().getCollaborazione());
- }
- else if(tracciaRisposta!=null && tracciaRisposta.getBusta()!=null && tracciaRisposta.getBusta().getCollaborazione()!=null) {
- transactionDTO.setIdCollaborazione(tracciaRisposta.getBusta().getCollaborazione());
- }
- }
-
- boolean asincrono = tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null &&
- (ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(tracciaRichiesta.getBusta().getProfiloDiCollaborazione()) || ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(tracciaRichiesta.getBusta().getProfiloDiCollaborazione()) );
- if(!asincrono) {
- if(transactionDTO.getIdAsincrono()==null &&
- (tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null && tracciaRichiesta.getBusta().getRiferimentoMessaggio()!=null)
- ){
- transactionDTO.setIdAsincrono(tracciaRichiesta.getBusta().getRiferimentoMessaggio());
- }
- if(transactionDTO.getIdAsincrono()==null &&
- (info.getProtocollo()!=null)
- ){
- transactionDTO.setIdAsincrono(info.getProtocollo().getRiferimentoAsincrono());
- }
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
- // ** info protocollo **
- if(tracciaRichiesta!=null){
- if(this.transazioniRegistrazioneTracceHeaderRawEnabled){
- if(tracciaRichiesta.getBustaAsString()!=null){
- transactionDTO.setHeaderProtocolloRichiesta(tracciaRichiesta.getBustaAsString());
- }
- else if(tracciaRichiesta.getBustaAsByteArray()!=null){
- transactionDTO.setHeaderProtocolloRichiesta(new String(tracciaRichiesta.getBustaAsByteArray()));
- }
- else if(tracciaRichiesta.getBustaAsRawContent()!=null){
- setHeaderProtocolloRichiesta(transactionDTO, tracciaRichiesta);
- }
- }
- if(tracciaRichiesta.getBusta()!=null){
- if(this.transazioniRegistrazioneTracceDigestEnabled){
- transactionDTO.setDigestRichiesta(tracciaRichiesta.getBusta().getDigest());
- }
- if(this.transazioniRegistrazioneTracceProtocolPropertiesEnabled &&
- tracciaRichiesta.getBusta().sizeProperties()>0){
- Map<String, List<String>> propertiesBusta = new HashMap<>();
- String [] pNames = tracciaRichiesta.getBusta().getPropertiesNames();
- if(pNames!=null){
- for (int i = 0; i < pNames.length; i++) {
- String key = pNames[i];
- String value = tracciaRichiesta.getBusta().getProperty(key);
- if(key!=null && value!=null){
- TransportUtils.put(propertiesBusta, key, value, false);
- }
- }
- }
- PropertiesSerializator ps = new PropertiesSerializator(propertiesBusta);
- setProtocolloExtInfoRichiesta(transactionDTO, ps);
- }
- }
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("traccia-richiesta:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
- }
- if(tracciaRisposta!=null){
- if(this.transazioniRegistrazioneTracceHeaderRawEnabled){
- if(tracciaRisposta.getBustaAsString()!=null){
- transactionDTO.setHeaderProtocolloRisposta(tracciaRisposta.getBustaAsString());
- }
- else if(tracciaRisposta.getBustaAsByteArray()!=null){
- transactionDTO.setHeaderProtocolloRisposta(new String(tracciaRisposta.getBustaAsByteArray()));
- }
- else if(tracciaRisposta.getBustaAsRawContent()!=null){
- setHeaderProtocolloRisposta(transactionDTO, tracciaRisposta);
- }
- }
- if(tracciaRisposta.getBusta()!=null){
- if(this.transazioniRegistrazioneTracceDigestEnabled){
- transactionDTO.setDigestRisposta(tracciaRisposta.getBusta().getDigest());
- }
- if(this.transazioniRegistrazioneTracceProtocolPropertiesEnabled &&
- tracciaRisposta.getBusta().sizeProperties()>0){
- Map<String, List<String>> propertiesBusta = new HashMap<>();
- String [] pNames = tracciaRisposta.getBusta().getPropertiesNames();
- if(pNames!=null){
- for (int i = 0; i < pNames.length; i++) {
- String key = pNames[i];
- String value = tracciaRisposta.getBusta().getProperty(key);
- if(key!=null && value!=null){
- TransportUtils.put(propertiesBusta, key, value, false);
- }
- }
- }
- PropertiesSerializator ps = new PropertiesSerializator(propertiesBusta);
- setProtocolloExtInfoRisposta(transactionDTO, ps);
- }
- }
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("traccia-risposta:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
- }
-
- // ** diagnostici **
- // Gestite prima per la doppia fase, come per l'esito
-
- // ** informazioni di integrazione **
- if(info.getIntegrazione()!=null){
- transactionDTO.setIdCorrelazioneApplicativa(info.getIntegrazione().getIdCorrelazioneApplicativa());
- transactionDTO.setIdCorrelazioneApplicativaRisposta(transaction.getCorrelazioneApplicativaRisposta());
- transactionDTO.setServizioApplicativoFruitore(info.getIntegrazione().getServizioApplicativoFruitore());
- if(info!=null && info.getContext()!=null &&
- info.getContext().containsKey(CostantiPdD.CONNETTORE_MULTIPLO_SELEZIONATO)) {
- Object o = info.getContext().getObject(CostantiPdD.CONNETTORE_MULTIPLO_SELEZIONATO);
- if(o instanceof String) {
- String sa = (String) o;
- if(sa!=null && !"".equals(sa)) {
- transactionDTO.setServizioApplicativoErogatore(sa);
- }
- }
- }
- if(transactionDTO.getServizioApplicativoErogatore()==null) {
- // in caso di porta applicativa si salva l'elenco dei servizi applicativi erogatori
- if(info.getIntegrazione().sizeServiziApplicativiErogatori()>0){
- StringBuilder saErogatori = new StringBuilder();
- for (int i=0; i<info.getIntegrazione().sizeServiziApplicativiErogatori(); i++) {
- if (i>0){
- saErogatori.append(",");
- }
- saErogatori.append( info.getIntegrazione().getServizioApplicativoErogatore(i) );
- }
- transactionDTO.setServizioApplicativoErogatore(saErogatori.toString().length()>2000 ? saErogatori.toString().substring(0, 1999) : saErogatori.toString());
- }
- else if(transaction.getServiziApplicativiErogatore()!=null && !transaction.getServiziApplicativiErogatore().isEmpty()){
- StringBuilder saErogatori = new StringBuilder();
- for (int i=0; i<transaction.getServiziApplicativiErogatore().size(); i++) {
- if (i>0){
- saErogatori.append(",");
- }
- saErogatori.append( transaction.getServiziApplicativiErogatore().get(i) );
- }
- transactionDTO.setServizioApplicativoErogatore(saErogatori.toString().length()>2000 ? saErogatori.toString().substring(0, 1999) : saErogatori.toString());
- }
- }
- }
-
- if(info.getContext()!=null){
- Object operazioneIM = info.getContext().getObject(CostantiPdD.TIPO_OPERAZIONE_IM);
- if(operazioneIM instanceof String){
- String op = (String) operazioneIM;
- transactionDTO.setOperazioneIm(op);
- }
- }
-
- if(transactionDTO.getServizioApplicativoFruitore()==null &&
- // provo a vedere se fosse nella traccia di richiesta
- (tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null && tracciaRichiesta.getBusta().getServizioApplicativoFruitore()!=null)
- ){
- transactionDTO.setServizioApplicativoFruitore(tracciaRichiesta.getBusta().getServizioApplicativoFruitore());
- }
- if(transactionDTO.getServizioApplicativoFruitore()==null &&
- // provo a vedere se fosse nella traccia di risposta
- (tracciaRisposta!=null && tracciaRisposta.getBusta()!=null && tracciaRisposta.getBusta().getServizioApplicativoFruitore()!=null)
- ){
- transactionDTO.setServizioApplicativoFruitore(tracciaRisposta.getBusta().getServizioApplicativoFruitore());
- }
- // correggo anonimo
- if(transactionDTO.getServizioApplicativoFruitore()!=null && CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO.equals(transactionDTO.getServizioApplicativoFruitore())){
- transactionDTO.setServizioApplicativoFruitore(null);
- }
-
- if(transactionDTO.getServizioApplicativoErogatore()==null &&
- // provo a vedere se fosse nella traccia di richiesta
- (tracciaRichiesta!=null && tracciaRichiesta.getBusta()!=null && tracciaRichiesta.getBusta().getServizioApplicativoErogatore()!=null)
- ){
- transactionDTO.setServizioApplicativoErogatore(tracciaRichiesta.getBusta().getServizioApplicativoErogatore());
- }
- if(transactionDTO.getServizioApplicativoErogatore()==null &&
- // provo a vedere se fosse nella traccia di risposta
- (tracciaRisposta!=null && tracciaRisposta.getBusta()!=null && tracciaRisposta.getBusta().getServizioApplicativoErogatore()!=null)
- ){
- transactionDTO.setServizioApplicativoErogatore(tracciaRisposta.getBusta().getServizioApplicativoErogatore());
- }
-
- transactionDTO.setLocationRichiesta(tracciaRichiesta!=null ? tracciaRichiesta.getLocation() : null);
- transactionDTO.setLocationRisposta(tracciaRisposta!=null ? tracciaRisposta.getLocation() : null);
-
- if(transaction!=null && transaction.getRequestInfo()!=null && transaction.getRequestInfo().getProtocolContext()!=null){
- transactionDTO.setNomePorta(transaction.getRequestInfo().getProtocolContext().getInterfaceName());
- }
-
- if(transaction.getCredenziali()!=null){
- transactionDTO.setCredenziali(transaction.getCredenziali());
- }else{
- Object o = info.getContext().getObject(CostantiControlloTraffico.PDD_CONTEXT_MAX_REQUEST_VIOLATED_CREDENZIALI);
- if(o instanceof String){
- transactionDTO.setCredenziali((String)o);
- }
- else{
- o = info.getContext().getObject(org.openspcoop2.core.constants.Costanti.CREDENZIALI_INVOCAZIONE);
- if(o instanceof String){
- transactionDTO.setCredenziali((String)o);
- }
- }
- }
-
- transactionDTO.setLocationConnettore(transaction.getLocation());
-
- if(transaction.getUrlInvocazione()!=null){
- transactionDTO.setUrlInvocazione(transaction.getUrlInvocazione());
- }else{
- Object o = info.getContext().getObject(CostantiControlloTraffico.PDD_CONTEXT_MAX_REQUEST_VIOLATED_URL_INVOCAZIONE);
- if(o instanceof String){
- transactionDTO.setUrlInvocazione((String)o);
- }
- else{
- o = info.getContext().getObject(org.openspcoop2.core.constants.Costanti.URL_INVOCAZIONE);
- if(o instanceof String){
- transactionDTO.setUrlInvocazione((String)o);
- }
- }
- }
-
- // ** cluster-id **
- transactionDTO.setClusterId(op2Properties.getClusterId(false));
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("integration:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- // credenziali
- if(transaction.getCredenzialiMittente()!=null) {
-
- // trasporto
- if(transaction.getCredenzialiMittente().getTrasporto()!=null) {
- transactionDTO.setTrasportoMittente(transaction.getCredenzialiMittente().getTrasporto().getId()+"");
- }
-
- // token
- if(transaction.getCredenzialiMittente().getTokenIssuer()!=null) {
- transactionDTO.setTokenIssuer(transaction.getCredenzialiMittente().getTokenIssuer().getId()+"");
- }
- if(transaction.getCredenzialiMittente().getTokenClientId()!=null) {
- transactionDTO.setTokenClientId(transaction.getCredenzialiMittente().getTokenClientId().getId()+"");
- }
- if(transaction.getCredenzialiMittente().getTokenSubject()!=null) {
- transactionDTO.setTokenSubject(transaction.getCredenzialiMittente().getTokenSubject().getId()+"");
- }
- if(transaction.getCredenzialiMittente().getTokenUsername()!=null) {
- transactionDTO.setTokenUsername(transaction.getCredenzialiMittente().getTokenUsername().getId()+"");
- }
- if(transaction.getCredenzialiMittente().getTokenEMail()!=null) {
- transactionDTO.setTokenMail(transaction.getCredenzialiMittente().getTokenEMail().getId()+"");
- }
- }
-
- // token negoziazione
- InformazioniNegoziazioneToken informazioniNegoziazioneToken = null;
- if(this.transazioniRegistrazioneRetrieveTokenSaveAsTokenInfo) {
- if(transaction.getInformazioniNegoziazioneToken()!=null) {
- informazioniNegoziazioneToken = transaction.getInformazioniNegoziazioneToken();
- if(
- (
- op2Properties.isGestioneRetrieveTokenSaveAsTokenInfoExcludeJwtSignature() &&
- (informazioniNegoziazioneToken.getAccessToken()!=null || informazioniNegoziazioneToken.getRefreshToken()!=null)
- )
- ||
- (
- op2Properties.isGestioneRetrieveTokenGrantTypeRfc7523SaveClientAssertionJWTInfoExcludeJwtSignature() &&
- informazioniNegoziazioneToken.getRequest()!=null
- )
- ) {
- // clone for fix 'Caused by: java.util.ConcurrentModificationException' e non modificare informazione in cache dovuto alla deleteSignature e alla sostituzione del token
- informazioniNegoziazioneToken = (InformazioniNegoziazioneToken) informazioniNegoziazioneToken.clone();
- }
- }
-
- if(informazioniNegoziazioneToken!=null) {
- if(op2Properties.isGestioneRetrieveTokenSaveAsTokenInfoExcludeJwtSignature()) {
- if(informazioniNegoziazioneToken.getAccessToken()!=null) {
- String originale = informazioniNegoziazioneToken.getAccessToken();
- String senzaSignature = TokenUtilities.deleteSignature(informazioniNegoziazioneToken.getAccessToken());
- informazioniNegoziazioneToken.setAccessToken(senzaSignature);
- informazioniNegoziazioneToken.setClaims(TokenUtilities.replaceTokenInMapByValue(informazioniNegoziazioneToken.getClaims(), originale, senzaSignature));
- informazioniNegoziazioneToken.replaceInRawResponse(originale, senzaSignature);
- }
- if(informazioniNegoziazioneToken.getRefreshToken()!=null) {
- String originale = informazioniNegoziazioneToken.getRefreshToken();
- String senzaSignature = TokenUtilities.deleteSignature(informazioniNegoziazioneToken.getRefreshToken());
- informazioniNegoziazioneToken.setRefreshToken(senzaSignature);
- informazioniNegoziazioneToken.setClaims(TokenUtilities.replaceTokenInMapByValue(informazioniNegoziazioneToken.getClaims(), originale, senzaSignature));
- informazioniNegoziazioneToken.replaceInRawResponse(originale, senzaSignature);
- }
- }
-
- if(informazioniNegoziazioneToken.getRequest()!=null &&
- informazioniNegoziazioneToken.getRequest().getJwtClientAssertion()!=null &&
- informazioniNegoziazioneToken.getRequest().getJwtClientAssertion().getToken()!=null &&
- op2Properties.isGestioneRetrieveTokenGrantTypeRfc7523SaveClientAssertionJWTInfoExcludeJwtSignature()) {
- informazioniNegoziazioneToken.getRequest().getJwtClientAssertion().setToken(TokenUtilities.deleteSignature(informazioniNegoziazioneToken.getRequest().getJwtClientAssertion().getToken()));
- }
- }
- }
-
- // token info
- if(this.transazioniRegistrazioneTokenInformazioniNormalizzate && transaction.getInformazioniToken()!=null) {
-
- InformazioniToken informazioniToken = transaction.getInformazioniToken();
- if(informazioniToken.getToken()!=null && op2Properties.isGestioneTokenSaveTokenInfoValidationFailedExcludeJwtSignature()) {
- // clone for fix 'Caused by: java.util.ConcurrentModificationException' e non modificare informazione in cache dovuto alla deleteSignature e alla sostituzione del token
- informazioniToken = (InformazioniToken) informazioniToken.clone();
- }
-
- // token validazione
- if(informazioniToken.getToken()!=null && op2Properties.isGestioneTokenSaveTokenInfoValidationFailedExcludeJwtSignature()) {
- informazioniToken.setToken(TokenUtilities.deleteSignature(informazioniToken.getToken()));
- }
-
- // token negoziazione
- if(informazioniNegoziazioneToken!=null) {
- informazioniToken.setRetrievedToken(informazioniNegoziazioneToken);
- }
-
- // attributi
- InformazioniAttributi informazioniAttributi = null;
- if(!this.transazioniRegistrazioneAttributiInformazioniNormalizzate) {
- informazioniAttributi = informazioniToken.getAa();
- informazioniToken.setAa(null);
- }
- setTokenInfo(transactionDTO, informazioniToken);
- if(informazioniAttributi!=null) {
- informazioniToken.setAa(informazioniAttributi);
- }
-
- }
- if(transactionDTO.getTokenInfo()==null && this.transazioniRegistrazioneAttributiInformazioniNormalizzate &&
- transaction.getInformazioniAttributi()!=null) {
- if(informazioniNegoziazioneToken!=null) {
- setTokenInfo(transactionDTO, informazioniNegoziazioneToken, transaction);
- }
- else {
- setTokenInfo(transactionDTO, transaction);
- }
- }
- if(transactionDTO.getTokenInfo()==null && informazioniNegoziazioneToken!=null) {
- setTokenInfo(transactionDTO, informazioniNegoziazioneToken);
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("token:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- // tempi elaborazione
- if(this.transazioniRegistrazioneTempiElaborazione && transaction.getTempiElaborazione()!=null) {
- setTempiElaborazione(transactionDTO, transaction);
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("times:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- // ** Indirizzo IP **
- setAccordoInfoClientAddress(transactionDTO,
- requestInfo,
- idDominio, info, idTransazione,
- times, timeStart, fase);
- if(times!=null) {
- timeStart = DateManager.getTimeMillis();
- }
-
- // ** eventi di gestione **
- if(!FaseTracciamento.POST_OUT_RESPONSE.equals(fase)){ // altrimenti gestito prima come per l'esito
- setEventi(transactionDTO, transaction,
- op2Properties,
- requestInfo,
- idDominio, info, idTransazione,
- times, timeStart, fase);
- }
- if(times!=null) {
- timeStart = DateManager.getTimeMillis();
- }
-
- // ** filtro duplicati **
- if(richiestaDuplicata){
- transactionDTO.setDuplicatiRichiesta(-1);
- }
- else{
- transactionDTO.setDuplicatiRichiesta(0);
- }
- if(rispostaDuplicata){
- transactionDTO.setDuplicatiRisposta(-1);
- }
- else{
- transactionDTO.setDuplicatiRisposta(0);
- }
-
-
- // ** Extended Info **
- ExtendedTransactionInfo transactionExtendedInfo = null;
- if (info.getContext().getObject(Costanti.EXTENDED_INFO_TRANSAZIONE)!=null){
- transactionExtendedInfo = ((ExtendedTransactionInfo)info.getContext().getObject(Costanti.EXTENDED_INFO_TRANSAZIONE));
- List<String> keys = transactionExtendedInfo.keys();
- if(keys!=null && !keys.isEmpty()){
- for (String key : keys) {
- String value = transactionExtendedInfo.getValue(key);
- TransazioneExtendedInfo transazioneExtendedInfo = new TransazioneExtendedInfo();
- transazioneExtendedInfo.setNome(key);
- transazioneExtendedInfo.setValore(value);
- transactionDTO.addTransazioneExtendedInfo(transazioneExtendedInfo);
- }
- }
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("ext-info:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
-
- return transactionDTO;
- } catch (Exception e) {
- throw new HandlerException("Errore durante il popolamento della transazione da salvare su database: " + e.getLocalizedMessage(), e);
- }
- finally{
-
- if(consegnaMultiplaProfiloSincrono) {
- timeStart = consegnaMultiplaProfiloSincrono(info, idDominio, idTransazione,
- times, timeStart,
- schedulaNotificheDopoConsegnaSincrona, msgDiag, nomePorta);
- }
-
- if(identificativoSaveTransactionContext!=null) {
- timeStart = saveTransactionContext(identificativoSaveTransactionContext, info, idDominio, idTransazione,
- times, timeStart,
- msgDiag);
- }
- }
- }
-
- private static void setDataAccettazioneRichiesta(Transazione transactionDTO, InformazioniTransazione info, Transaction transaction) {
- // Se data_accettazione_richiesta è null viene impostata a CURRENT_TIMESTAMP
- if (transaction.getDataAccettazioneRichiesta()!=null){
- transactionDTO.setDataAccettazioneRichiesta(transaction.getDataAccettazioneRichiesta());
- }else{
- Object o = info.getContext().getObject(CostantiPdD.DATA_ACCETTAZIONE_RICHIESTA);
- if(o instanceof Date){
- transactionDTO.setDataAccettazioneRichiesta((Date) o);
- }
- else{
- transactionDTO.setDataAccettazioneRichiesta(DateManager.getDate());
- }
- }
- }
- private static void setDataIngressoRichiesta(OpenSPCoop2Properties op2Properties, Transazione transactionDTO, InformazioniTransazione info, Transaction transaction) {
- // Se data_ingresso_richiesta è null viene impostata a CURRENT_TIMESTAMP
- boolean valorizzataDataIngressoConDataAccettazione = op2Properties.isTransazioniValorizzaDataIngressoConDataAccettazione();
- if(valorizzataDataIngressoConDataAccettazione) {
- transactionDTO.setDataIngressoRichiesta(transactionDTO.getDataAccettazioneRichiesta());
- }
- else {
- if (transaction.getDataIngressoRichiesta()!=null){
- transactionDTO.setDataIngressoRichiesta(transaction.getDataIngressoRichiesta());
- }else{
- Object o = info.getContext().getObject(CostantiPdD.DATA_INGRESSO_RICHIESTA);
- if(o instanceof Date){
- transactionDTO.setDataIngressoRichiesta((Date) o);
- }
- else{
- transactionDTO.setDataIngressoRichiesta(DateManager.getDate());
- }
- }
- }
- }
- private static void setDataIngressoRichiestaStream(Transazione transactionDTO, InformazioniTransazione info) {
- if(info.getContext()!=null) {
- Object o = info.getContext().get(DiagnosticInputStream.DIAGNOSTIC_INPUT_STREAM_REQUEST_COMPLETE_DATE);
- if(o==null) {
- o = info.getContext().get(DiagnosticInputStream.DIAGNOSTIC_INPUT_STREAM_REQUEST_ERROR_DATE);
- }
- if(o instanceof Date) {
- Date d = (Date) o;
- transactionDTO.setDataIngressoRichiestaStream(d);
- }
- }
- }
-
- private static void setDataUscitaRichiesta(Transazione transactionDTO, FaseTracciamento fase, Transaction transaction) {
- // data_uscita_richiesta si imposta se e' diversa da null
- if(FaseTracciamento.OUT_REQUEST.equals(fase) || FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- if (transaction.getDataUscitaRichiesta()!=null) {
- transactionDTO.setDataUscitaRichiesta(transaction.getDataUscitaRichiesta());
- }
-
- // data_uscita_richiesta_stream
- if(transaction.getDataRichiestaInoltrata()!=null) {
- transactionDTO.setDataUscitaRichiestaStream(transaction.getDataRichiestaInoltrata());
- }
- }
- }
-
- private static void setDataAccettazioneRisposta(Transazione transactionDTO, FaseTracciamento fase, Transaction transaction) {
- if(
- (FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase))
- &&
- // data_accettazione_risposta
- // La porta di dominio mi passa sempre questa informazione.
- // Nel PddMonitor, invece, la data deve essere visualizzata solo se la dimensione e' diverso da 0 e cioe' se c'e' un messaggio di risposta.
- /**if (transaction.getDimensioneIngressoRispostaBytes()!=null && transaction.getDimensioneIngressoRispostaBytes()>0){*/
- // L'INFORMAZIONE DEVE INVECE ESSERE SALVATA PER LA SIMULAZIONE DEI MESSAGGI DIAGNOSTICI
- transaction.getDataAccettazioneRisposta()!=null){
- transactionDTO.setDataAccettazioneRisposta(transaction.getDataAccettazioneRisposta());
- }
- }
- private static void setDataIngressoRisposta(OpenSPCoop2Properties op2Properties, Transazione transactionDTO, FaseTracciamento fase, Transaction transaction) {
- if(FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- // data_ingresso_risposta
-
- boolean valorizzataDataIngressoConDataAccettazione = op2Properties.isTransazioniValorizzaDataIngressoConDataAccettazione();
-
- // La porta di dominio mi passa sempre questa informazione.
- // Nel PddMonitor, invece, la data deve essere visualizzata solo se la dimensione e' diverso da 0 e cioe' se c'e' un messaggio di risposta.
- /**if (transaction.getDimensioneIngressoRispostaBytes()!=null && transaction.getDimensioneIngressoRispostaBytes()>0){*/
- // L'INFORMAZIONE DEVE INVECE ESSERE SALVATA PER LA SIMULAZIONE DEI MESSAGGI DIAGNOSTICI
- if(valorizzataDataIngressoConDataAccettazione && transactionDTO.getDataAccettazioneRisposta()!=null) {
- transactionDTO.setDataIngressoRisposta(transactionDTO.getDataAccettazioneRisposta());
- }
- else {
- if (transaction.getDataIngressoRisposta()!=null){
- transactionDTO.setDataIngressoRisposta(transaction.getDataIngressoRisposta());
- }
- }
- }
- }
- private static void setDataIngressoRispostaStream(Transazione transactionDTO, InformazioniTransazione info, FaseTracciamento fase) {
- if(
- (FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase))
- &&
- // data_ingresso_risposta_stream
- info.getContext()!=null) {
- Object o = info.getContext().get(DiagnosticInputStream.DIAGNOSTIC_INPUT_STREAM_RESPONSE_COMPLETE_DATE);
- if(o==null) {
- o = info.getContext().get(DiagnosticInputStream.DIAGNOSTIC_INPUT_STREAM_RESPONSE_ERROR_DATE);
- }
- if(o instanceof Date) {
- Date d = (Date) o;
- transactionDTO.setDataIngressoRispostaStream(d);
- }
- }
- }
-
- private static void setDataUscitaRisposta(OpenSPCoop2Properties op2Properties, Transazione transactionDTO, InformazioniTransazione info, FaseTracciamento fase, Transaction transaction) {
- // ** data_uscita_risposta **
- if(FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- boolean calcolaDataUscitaRispostaConDateAfterResponseSent = op2Properties.isTransazioniValorizzaDataUscitaRispostaUseDateAfterResponseSent();
- if(calcolaDataUscitaRispostaConDateAfterResponseSent && info.getDataRispostaSpedita()!=null) {
- if(FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- transactionDTO.setDataUscitaRisposta(info.getDataRispostaSpedita());
- }
- }
- else if(!calcolaDataUscitaRispostaConDateAfterResponseSent && info.getDataPrimaSpedizioneRisposta()!=null) {
- transactionDTO.setDataUscitaRisposta(info.getDataPrimaSpedizioneRisposta());
- }
- else if (transaction.getDataUscitaRisposta()!=null){
- transactionDTO.setDataUscitaRisposta(transaction.getDataUscitaRisposta());
- }
- else{
- // creo sempre una data di risposta.
- transactionDTO.setDataUscitaRisposta(DateManager.getDate());
- }
- }
- }
- private static void setDataUscitaRispostaStream(OpenSPCoop2Properties op2Properties, Transazione transactionDTO, InformazioniTransazione info, FaseTracciamento fase) {
- // ** data_uscita_risposta_stream **
- if(FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- boolean calcolaDataUscitaRispostaConDateAfterResponseSent = op2Properties.isTransazioniValorizzaDataUscitaRispostaUseDateAfterResponseSent();
- if(calcolaDataUscitaRispostaConDateAfterResponseSent && info.getDataPrimaSpedizioneRisposta()!=null) {
- transactionDTO.setDataUscitaRispostaStream(info.getDataPrimaSpedizioneRisposta());
- }
- else if(!calcolaDataUscitaRispostaConDateAfterResponseSent && info.getDataRispostaSpedita()!=null &&
- FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- transactionDTO.setDataUscitaRispostaStream(info.getDataRispostaSpedita());
- }
-
- if(calcolaDataUscitaRispostaConDateAfterResponseSent && transactionDTO.getDataUscitaRispostaStream()==null) {
- transactionDTO.setDataUscitaRispostaStream(transactionDTO.getDataUscitaRisposta()); // uso la stessa
- }
- }
- }
-
- private static void setRichiestaIngressoBytes(Transazione transactionDTO, InformazioniTransazione info, Transaction transaction, FaseTracciamento fase) {
- // dimensione_ingresso_richiesta
- if (info.getInputRequestMessageSize()!=null && info.getInputRequestMessageSize()>0){
- transactionDTO.setRichiestaIngressoBytes(info.getInputRequestMessageSize());
- }
- if(transactionDTO.getRichiestaIngressoBytes()==null &&
- FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- transactionDTO.setRichiestaIngressoBytes(readDimensioneFromDumpBinario(TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO, transaction));
- }
- }
-
- private static void setRichiestaUscitaBytes(Transazione transactionDTO, InformazioniTransazione info, Transaction transaction, FaseTracciamento fase) {
- if(
- (FaseTracciamento.OUT_REQUEST.equals(fase) || FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase))
- &&
- (info.getOutputRequestMessageSize()!=null && info.getOutputRequestMessageSize()>0 &&
- transactionDTO.getDataUscitaRichiesta()!=null) // altrimenti non ha senso, poichè non c'è stato un vero inoltro verso il backend
- ) {
- transactionDTO.setRichiestaUscitaBytes(info.getOutputRequestMessageSize());
- }
- if(transactionDTO.getRichiestaUscitaBytes()==null &&
- FaseTracciamento.POST_OUT_RESPONSE.equals(fase)) {
- transactionDTO.setRichiestaUscitaBytes(readDimensioneFromDumpBinario(TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO, transaction));
- }
- }
-
- private static void setRispostaIngressoBytes(Transazione transactionDTO, InformazioniTransazione info, Transaction transaction, FaseTracciamento fase) {
- // ** dimensione_ingresso_risposta **
- if(
- (FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase))
- &&
- (info.getInputResponseMessageSize()!=null && info.getInputResponseMessageSize()>0 &&
- transaction!=null && transaction.getDataIngressoRisposta()!=null)
- ) { // altrimenti non ha senso, poichè non c'è stato un vero inoltro verso il backend
-
- boolean add = false;
- if(info.getContext()!=null) {
- Object o = info.getContext().get(DiagnosticInputStream.DIAGNOSTIC_INPUT_STREAM_RESPONSE_START_DATE);
- if(o instanceof Date) {
- add = true;
- }
- }
-
- if(add) {
- transactionDTO.setRispostaIngressoBytes(info.getInputResponseMessageSize());
- }
-
- }
- }
-
- private static void setRispostaUscitaBytes(Transazione transactionDTO, InformazioniTransazione info, FaseTracciamento fase) {
- if(
- (FaseTracciamento.OUT_RESPONSE.equals(fase) || FaseTracciamento.POST_OUT_RESPONSE.equals(fase))
- &&
- (info.getOutputResponseMessageSize()!=null && info.getOutputResponseMessageSize()>0)
- ){
- transactionDTO.setRispostaUscitaBytes(info.getOutputResponseMessageSize());
- }
- }
-
- private static Long readDimensioneFromDumpBinario(TipoMessaggio tipoMessaggio, Transaction transaction) {
- if(transaction!=null && !transaction.getMessaggi().isEmpty()) {
- for (Messaggio msg : transaction.getMessaggi()) {
- if(tipoMessaggio.equals(msg.getTipoMessaggio()) && msg.getBody()!=null){
- return Long.valueOf(msg.getBody().size());
- }
- }
- }
- return null;
- }
-
- private void setFaultInfo(Transazione transactionDTO,
- OpenSPCoop2Properties op2Properties,
- InformazioniTransazione info) {
- String fault = null;
- String formatoFault = null;
- try{
- if(info.getResponse()!=null){
- if(ServiceBinding.SOAP.equals(info.getResponse().getServiceBinding())) {
- OpenSPCoop2SoapMessage soapMsg = info.getResponse().castAsSoap();
- if(soapMsg.hasSOAPFault()){
-
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- bout.write(info.getResponse().getAsByte(soapMsg.getSOAPPart().getEnvelope(), false));
- bout.flush();
- bout.close();
-
- Logger log = OpenSPCoop2Logger.getLoggerOpenSPCoopTransazioni(op2Properties.isTransazioniDebug());
- if(op2Properties.isTransazioniFaultPrettyPrint()){
- // Faccio una pretty-print: potevo fare anche direttamente passando il fault a metodo prettyPrint,
- // Pero' non veniva stampato correttamente il SOAPFault. Mi appoggio allora a SoapUtils.
- /**byte [] content = org.openspcoop2.message.soap.TunnelSoapUtils.sbustamentoMessaggio(context.getMessaggio());*/
- byte [] content = bout.toByteArray();
- fault = DumpUtility.toString(MessageXMLUtils.getInstance(soapMsg.getFactory()).newDocument(content), log, info.getResponse());
- /**System.out.println("IMPOSTATO FAULT IN TRANSACTION ["+fault+"]");*/
- }
- else{
-
- fault = bout.toString();
- }
-
- formatoFault = soapMsg.getMessageType().name();
- }
- }
- else {
- OpenSPCoop2RestMessage<?> restMsg = info.getResponse().castAsRest();
- if(restMsg.isProblemDetailsForHttpApis_RFC7807() || MessageRole.FAULT.equals(restMsg.getMessageRole())) {
- switch (restMsg.getMessageType()) {
- case XML:
-
- ByteArrayOutputStream bout = new ByteArrayOutputStream();
- restMsg.writeTo(bout, false);
- bout.flush();
- bout.close();
-
- Logger log = OpenSPCoop2Logger.getLoggerOpenSPCoopTransazioni(op2Properties.isTransazioniDebug());
- if(op2Properties.isTransazioniFaultPrettyPrint()){
- // Faccio una pretty-print: potevo fare anche direttamente passando il fault a metodo prettyPrint,
- // Pero' non veniva stampato correttamente il SOAPFault. Mi appoggio allora a SoapUtils.
- /**byte [] content = org.openspcoop2.message.soap.TunnelSoapUtils.sbustamentoMessaggio(context.getMessaggio());*/
- byte [] content = bout.toByteArray();
- fault = DumpUtility.toString(MessageXMLUtils.getInstance(restMsg.getFactory()).newDocument(content), log, info.getResponse());
- /**System.out.println("IMPOSTATO FAULT IN TRANSACTION ["+fault+"]");*/
- }
- else{
-
- fault = bout.toString();
- }
-
- formatoFault = restMsg.getMessageType().name();
-
- break;
-
- case JSON:
-
- bout = new ByteArrayOutputStream();
- restMsg.writeTo(bout, false);
- bout.flush();
- bout.close();
-
- if(op2Properties.isTransazioniFaultPrettyPrint()){
-
- JSONUtils jsonUtils = JSONUtils.getInstance(true);
- byte [] content = bout.toByteArray();
- JsonNode jsonNode = jsonUtils.getAsNode(content);
- fault = jsonUtils.toString(jsonNode);
-
- }
- else{
-
- fault = bout.toString();
- }
-
- formatoFault = restMsg.getMessageType().name();
-
- break;
- default:
- break;
- }
- }
- }
- }
- }catch(Exception e){
- this.logger.error("Errore durante il dump del soap fault",e);
- }
- if(TipoPdD.DELEGATA.equals(info.getTipoPorta())){
- transactionDTO.setFaultIntegrazione(fault);
- transactionDTO.setFormatoFaultIntegrazione(formatoFault);
- }
- else{
- transactionDTO.setFaultCooperazione(fault);
- transactionDTO.setFormatoFaultCooperazione(formatoFault);
- }
- }
-
- private IDAccordo getIdAccordo(Transazione transactionDTO, RegistroServiziManager registroServiziManager, RequestInfo requestInfo) {
- try {
- IDServizio idServizio = IDServizioFactory.getInstance().getIDServizioFromValues(transactionDTO.getTipoServizio(), transactionDTO.getNomeServizio(),
- transactionDTO.getTipoSoggettoErogatore(), transactionDTO.getNomeSoggettoErogatore(), transactionDTO.getVersioneServizio());
- AccordoServizioParteSpecifica asps = registroServiziManager.getAccordoServizioParteSpecifica(idServizio, null, false, requestInfo);
- return IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
- }catch(Exception e) {
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- this.logger.error("Errore durante l'identificazione delle caratteristiche dell'API (Accesso servizio): "+e.getMessage(),e);
- return null;
- }
- }
-
- private void setAccordoInfo(IDAccordo idAccordo, Transazione transactionDTO,
- OpenSPCoop2Properties op2Properties, RegistroServiziManager registroServiziManager, RequestInfo requestInfo,
- IDSoggetto idDominio, InformazioniTransazione info, String idTransazione,
- TransazioniProcessTimes times, long timeStart, FaseTracciamento fase) {
- try {
- AccordoServizioParteComune aspc = registroServiziManager.getAccordoServizioParteComune(idAccordo, null, false, false, requestInfo);
- if(org.openspcoop2.core.registry.constants.ServiceBinding.REST.equals(aspc.getServiceBinding())) {
- transactionDTO.setTipoApi(TipoAPI.REST.getValoreAsInt());
- }
- else {
- transactionDTO.setTipoApi(TipoAPI.SOAP.getValoreAsInt());
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("api:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- String conflict = setAccordoInfoGruppi(aspc, transactionDTO,
- op2Properties,
- requestInfo,
- idDominio, info, idTransazione,
- times, fase);
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("tags:"+timeProcess+"/c"+conflict);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- }catch(Exception e) {
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- this.logger.error("Errore durante l'identificazione delle caratteristiche dell'API (Accesso servizio): "+e.getMessage(),e);
- }
-
- String conflict = setAccordoInfoUriAPC(idAccordo, transactionDTO,
- requestInfo,
- idDominio, info, idTransazione,
- times, fase);
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("uri-api:"+timeProcess+"/c"+conflict);
- }
- }
-
- private static final MapKey<String> CREDENZIALI_MITTENTE_GRUPPI_RESOLVED = org.openspcoop2.utils.Map.newMapKey("CREDENZIALI_MITTENTE_GRUPPI_RESOLVED");
- private String getCredenzialiMittenteGruppi(InformazioniTransazione info) {
- return (info!=null && info.getContext()!=null) ? (String) info.getContext().get(CREDENZIALI_MITTENTE_GRUPPI_RESOLVED) : null;
- }
- private void addCredenzialiMittenteGruppi(InformazioniTransazione info, String cred) {
- if(info!=null && info.getContext()!=null) {
- info.getContext().put(CREDENZIALI_MITTENTE_GRUPPI_RESOLVED, cred);
- }
- }
- private String setAccordoInfoGruppi(AccordoServizioParteComune aspc, Transazione transactionDTO,
- OpenSPCoop2Properties op2Properties,
- RequestInfo requestInfo,
- IDSoggetto idDominio, InformazioniTransazione info, String idTransazione,
- TransazioniProcessTimes times, FaseTracciamento fase) throws CoreException {
- String conflict = "0";
- if(aspc.getGruppi()!=null && aspc.getGruppi().sizeGruppoList()>0) {
-
- String cred = getCredenzialiMittenteGruppi(info);
- if(cred!=null && StringUtils.isNotEmpty(cred)) {
- transactionDTO.setGruppi(cred);
- }
- else {
- List<String> gruppi = new ArrayList<>();
- int count = 0;
- int maxLengthCredenziali = op2Properties.getTransazioniCredenzialiMittenteMaxLength()-AbstractCredenzialeList.PREFIX.length();
- for (int i=0; i<aspc.getGruppi().sizeGruppoList(); i++) {
- GruppoAccordo gruppoAccordo = aspc.getGruppi().getGruppo(i);
- String dbValue = AbstractCredenzialeList.getDBValue(gruppoAccordo.getNome());
- if(count+dbValue.length()<maxLengthCredenziali) {
- gruppi.add( gruppoAccordo.getNome() );
- count = count+dbValue.length();
- }
- else {
- // tronco i gruppi ai primi trovati. Sono troppi eventi gruppi associati alla api
- }
- }
- if(!gruppi.isEmpty()){
- StringBuilder sbConflict = null;
- if(times!=null) {
- sbConflict = new StringBuilder();
- }
- CredenzialeMittente credGruppi = null;
- try {
- credGruppi = GestoreAutenticazione.convertGruppiToCredenzialiMittenti(idDominio, info.getIdModulo(), idTransazione, gruppi,
- null, fase.name()+".gruppi",
- sbConflict, requestInfo);
- }catch(Exception e) {
- throw new CoreException(e.getMessage(),e);
- }
- if(sbConflict!=null && sbConflict.length()>0) {
- conflict = sbConflict.toString();
- }
- if(credGruppi!=null) {
- cred = credGruppi.getId()+"";
- transactionDTO.setGruppi(cred);
- addCredenzialiMittenteGruppi(info, cred);
- }
- }
- }
- }
- return conflict;
- }
-
-
- private static final MapKey<String> CREDENZIALI_MITTENTE_URI_APC_RESOLVED = org.openspcoop2.utils.Map.newMapKey("CREDENZIALI_MITTENTE_URI_APC_RESOLVED");
- private String getCredenzialiMittenteUriAPC(InformazioniTransazione info) {
- return (info!=null && info.getContext()!=null) ? (String) info.getContext().get(CREDENZIALI_MITTENTE_URI_APC_RESOLVED) : null;
- }
- private void addCredenzialiMittenteUriAPC(InformazioniTransazione info, String cred) {
- if(info!=null && info.getContext()!=null) {
- info.getContext().put(CREDENZIALI_MITTENTE_URI_APC_RESOLVED, cred);
- }
- }
- private String setAccordoInfoUriAPC(IDAccordo idAccordo, Transazione transactionDTO,
- RequestInfo requestInfo,
- IDSoggetto idDominio, InformazioniTransazione info, String idTransazione,
- TransazioniProcessTimes times, FaseTracciamento fase) {
- String conflict = "0";
- try {
- String cred = getCredenzialiMittenteUriAPC(info);
- if(cred!=null && StringUtils.isNotEmpty(cred)) {
- transactionDTO.setUriApi(cred);
- }
- else {
- if(transactionDTO.getUriAccordoServizio()==null){
- transactionDTO.setUriAccordoServizio(IDAccordoFactory.getInstance().getUriFromIDAccordo(idAccordo));
- }
- StringBuilder sbConflict = null;
- if(times!=null) {
- sbConflict = new StringBuilder();
- }
- CredenzialeMittente credAPI = GestoreAutenticazione.convertAPIToCredenzialiMittenti(idDominio, info.getIdModulo(), idTransazione, transactionDTO.getUriAccordoServizio(),
- null, fase.name()+".api",
- sbConflict, requestInfo);
- if(sbConflict!=null && sbConflict.length()>0) {
- conflict = sbConflict.toString();
- }
- if(credAPI!=null) {
- cred = credAPI.getId()+"";
- transactionDTO.setUriApi(cred);
- addCredenzialiMittenteUriAPC(info, cred);
- }
- }
- }catch(Exception e) {
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- this.logger.error("Errore durante l'identificazione dell'identificativo dell'API (Accesso servizio parte comune): "+e.getMessage(),e);
- }
- return conflict;
- }
-
- private void setHeaderProtocolloRichiesta(Transazione transactionDTO, Traccia tracciaRichiesta) {
- try{
- transactionDTO.setHeaderProtocolloRichiesta(tracciaRichiesta.getBustaAsRawContent().toString(TipoSerializzazione.DEFAULT));
- }catch(Exception e){
- /// NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- String msg = "Errore durante la conversione dell'oggetto Busta di richiesta ["+tracciaRichiesta.getBustaAsRawContent().getClass().getName()+"] in stringa";
- this.logger.error(msg);
- }
- }
-
- private void setProtocolloExtInfoRichiesta(Transazione transactionDTO, PropertiesSerializator ps) {
- try{
- transactionDTO.setProtocolloExtInfoRichiesta(ps.convertToDBColumnValue());
- }catch(Exception e){
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- this.logger.error("Errore durante la conversione delle proprieta della Busta di richiesta: "+e.getMessage(),e);
- }
- }
-
- private void setHeaderProtocolloRisposta(Transazione transactionDTO, Traccia tracciaRisposta) {
- try{
- transactionDTO.setHeaderProtocolloRisposta(tracciaRisposta.getBustaAsRawContent().toString(TipoSerializzazione.DEFAULT));
- }catch(Exception e){
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- String msg = "Errore durante la conversione dell'oggetto Busta di risposta ["+tracciaRisposta.getBustaAsRawContent().getClass().getName()+"] in stringa";
- this.logger.error(msg);
- }
- }
-
- private void setProtocolloExtInfoRisposta(Transazione transactionDTO, PropertiesSerializator ps) {
- try{
- transactionDTO.setProtocolloExtInfoRisposta(ps.convertToDBColumnValue());
- }catch(Exception e){
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- this.logger.error("Errore durante la conversione delle proprieta della Busta di risposta: "+e.getMessage(),e);
- }
- }
-
- private void setTokenInfo(Transazione transactionDTO, InformazioniToken informazioniToken) {
- try {
- transactionDTO.setTokenInfo(informazioniToken.toJson());
- }catch(Exception t) {
- this.logger.error("Serializzazione informazioni token non riuscita: "+t.getMessage(),t);
- }
- }
- private void setTokenInfo(Transazione transactionDTO, InformazioniNegoziazioneToken informazioniNegoziazioneToken, Transaction transaction) {
- try {
- InformazioniToken infoToken = new InformazioniToken(); // uso come aggregatore
- infoToken.setRetrievedToken(informazioniNegoziazioneToken);
- infoToken.setAa(transaction.getInformazioniAttributi());
- transactionDTO.setTokenInfo(infoToken.toJson());
- }catch(Exception t) {
- this.logger.error("Serializzazione informazioni attributi (aggregato insieme a client assertion) non riuscita: "+t.getMessage(),t);
- }
- }
- private void setTokenInfo(Transazione transactionDTO, Transaction transaction) {
- try {
- transactionDTO.setTokenInfo(transaction.getInformazioniAttributi().toJson());
- }catch(Exception t) {
- this.logger.error("Serializzazione informazioni attributi non riuscita: "+t.getMessage(),t);
- }
- }
- private void setTokenInfo(Transazione transactionDTO, InformazioniNegoziazioneToken informazioniNegoziazioneToken) {
- try {
- transactionDTO.setTokenInfo(informazioniNegoziazioneToken.toJson());
- }catch(Exception t) {
- this.logger.error("Serializzazione informazioni client assertion non riuscita: "+t.getMessage(),t);
- }
- }
-
- private void setTempiElaborazione(Transazione transactionDTO, Transaction transaction) {
- try {
- transactionDTO.setTempiElaborazione(TempiElaborazioneUtils.convertToDBValue(transaction.getTempiElaborazione()));
- }catch(Exception e) {
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- this.logger.error("TempiElaborazioneUtils.convertToDBValue failed: "+e.getMessage(),e);
- }
- }
-
- private static final MapKey<String> CREDENZIALI_MITTENTE_CLIENT_ADDRESS_RESOLVED = org.openspcoop2.utils.Map.newMapKey("CREDENZIALI_MITTENTE_CLIENT_ADDRESS_RESOLVED");
- private String getCredenzialiMittenteClientAddress(InformazioniTransazione info) {
- return (info!=null && info.getContext()!=null) ? (String) info.getContext().get(CREDENZIALI_MITTENTE_CLIENT_ADDRESS_RESOLVED) : null;
- }
- private void addCredenzialiMittenteClientAddress(InformazioniTransazione info, String cred) {
- if(info!=null && info.getContext()!=null) {
- info.getContext().put(CREDENZIALI_MITTENTE_CLIENT_ADDRESS_RESOLVED, cred);
- }
- }
- private void setAccordoInfoClientAddress(Transazione transactionDTO,
- RequestInfo requestInfo,
- IDSoggetto idDominio, InformazioniTransazione info, String idTransazione,
- TransazioniProcessTimes times, long timeStart, FaseTracciamento fase) {
- Object oIpAddressRemote = info.getContext().getObject(org.openspcoop2.core.constants.Costanti.CLIENT_IP_REMOTE_ADDRESS);
- if(oIpAddressRemote instanceof String){
- String ipAddress = (String)oIpAddressRemote;
- if(ipAddress.length()<=255){
- transactionDTO.setSocketClientAddress(ipAddress);
- }
- else{
- transactionDTO.setSocketClientAddress(ipAddress.substring(0, 250)+"...");
- }
- }
- Object oIpAddressTransport = info.getContext().getObject(org.openspcoop2.core.constants.Costanti.CLIENT_IP_TRANSPORT_ADDRESS);
- if(oIpAddressTransport instanceof String){
- String ipAddress = (String)oIpAddressTransport;
- if(ipAddress.length()<=255){
- transactionDTO.setTransportClientAddress(ipAddress);
- }
- else{
- transactionDTO.setTransportClientAddress(ipAddress.substring(0, 250)+"...");
- }
- }
- setAccordoInfoClientAddressCredenzialiMittente(transactionDTO,
- requestInfo,
- idDominio, info, idTransazione,
- times, timeStart, fase);
- }
- private void setAccordoInfoClientAddressCredenzialiMittente(Transazione transactionDTO,
- RequestInfo requestInfo,
- IDSoggetto idDominio, InformazioniTransazione info, String idTransazione,
- TransazioniProcessTimes times, long timeStart, FaseTracciamento fase) {
- String conflict = "0";
- if(transactionDTO.getSocketClientAddress()!=null || transactionDTO.getTransportClientAddress()!=null) {
- String cred = getCredenzialiMittenteClientAddress(info);
- if(cred!=null && StringUtils.isNotEmpty(cred)) {
- transactionDTO.setClientAddress(cred);
- }
- else {
- try {
- StringBuilder sbConflict = null;
- if(times!=null) {
- sbConflict = new StringBuilder();
- }
- CredenzialeMittente credClientAddress =GestoreAutenticazione.convertClientCredentialToCredenzialiMittenti(idDominio, info.getIdModulo(), idTransazione,
- transactionDTO.getSocketClientAddress(), transactionDTO.getTransportClientAddress(),
- null, fase.name()+".clientAddress",
- sbConflict, requestInfo);
- if(sbConflict!=null && sbConflict.length()>0) {
- conflict = sbConflict.toString();
- }
- if(credClientAddress!=null) {
- cred = credClientAddress.getId()+"";
- transactionDTO.setClientAddress(cred);
- addCredenzialiMittenteClientAddress(info, cred);
- }
- }catch(Exception e) {
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- this.logger.error("Errore durante la scrittura dell'indice per la ricerca del client address: "+e.getMessage(),e);
- }
- }
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("ip-address:"+timeProcess+"/c"+conflict);
- }
-
- }
-
- private void setEventi(Transazione transactionDTO, Transaction transaction,
- OpenSPCoop2Properties op2Properties,
- RequestInfo requestInfo,
- IDSoggetto idDominio, InformazioniTransazione info, String idTransazione,
- TransazioniProcessTimes times, long timeStart, FaseTracciamento fase) throws CoreException {
- List<String> eventiGestione = new ArrayList<>();
- int count = 0;
- int maxLengthCredenziali = op2Properties.getTransazioniCredenzialiMittenteMaxLength()-AbstractCredenzialeList.PREFIX.length();
-
- if(op2Properties.isTransazioniHttpStatusAsEvent_outResponseCode() && transactionDTO.getCodiceRispostaUscita()!=null &&
- !"".equals(transactionDTO.getCodiceRispostaUscita())) {
- String evento = CostantiPdD.PREFIX_HTTP_STATUS_CODE_OUT+transactionDTO.getCodiceRispostaUscita();
- String dbValue = AbstractCredenzialeList.getDBValue(evento);
- if(count+dbValue.length()<maxLengthCredenziali) {
- eventiGestione.add( evento );
- count = count+dbValue.length();
- }
- else {
- // tronco gli eventi ai primi trovati. Sono troppi eventi successi sulla transazione.
- }
- }
- if(op2Properties.isTransazioniHttpStatusAsEvent_inResponseCode() && transactionDTO.getCodiceRispostaIngresso()!=null &&
- !"".equals(transactionDTO.getCodiceRispostaIngresso())) {
- String evento = CostantiPdD.PREFIX_HTTP_STATUS_CODE_IN+transactionDTO.getCodiceRispostaIngresso();
- String dbValue = AbstractCredenzialeList.getDBValue(evento);
- if(count+dbValue.length()<maxLengthCredenziali) {
- eventiGestione.add( evento );
- count = count+dbValue.length();
- }
- else {
- // tronco gli eventi ai primi trovati. Sono troppi eventi successi sulla transazione.
- }
- }
- if(op2Properties.isTransazioniTipoApiAsEvent() && transactionDTO.getTipoApi()>0) {
- String evento = CostantiPdD.PREFIX_API+transactionDTO.getTipoApi();
- String dbValue = AbstractCredenzialeList.getDBValue(evento);
- if(count+dbValue.length()<maxLengthCredenziali) {
- eventiGestione.add( evento );
- count = count+dbValue.length();
- }
- else {
- // tronco gli eventi ai primi trovati. Sono troppi eventi successi sulla transazione.
- }
- }
- String consegneMultipleById = getConnettoriMultipli(info.getContext());
- if(op2Properties.isTransazioniConnettoriMultipliAsEvent() && consegneMultipleById!=null) {
- String evento = CostantiPdD.PREFIX_CONNETTORI_MULTIPLI+consegneMultipleById;
- String dbValue = AbstractCredenzialeList.getDBValue(evento);
- if(count+dbValue.length()<maxLengthCredenziali) {
- eventiGestione.add( evento );
- count = count+dbValue.length();
- }
- else {
- // tronco gli eventi ai primi trovati. Sono troppi eventi successi sulla transazione.
- }
- }
-
- if(transaction.getEventiGestione()!=null && !transaction.getEventiGestione().isEmpty()){
- for (int i=0; i<transaction.getEventiGestione().size(); i++) {
- String dbValue = AbstractCredenzialeList.getDBValue(transaction.getEventiGestione().get(i));
- if(count+dbValue.length()<maxLengthCredenziali) {
- eventiGestione.add( transaction.getEventiGestione().get(i) );
- count = count+dbValue.length();
- }
- else {
- // tronco gli eventi ai primi trovati. Sono troppi eventi successi sulla transazione.
- }
- }
- }
- Object oEventoMax = info.getContext().getObject(CostantiControlloTraffico.PDD_CONTEXT_MAX_REQUEST_VIOLATED_EVENTO);
- if(oEventoMax instanceof String){
- String max = (String)oEventoMax;
- String dbValue = AbstractCredenzialeList.getDBValue(max);
- if(count+dbValue.length()<maxLengthCredenziali) {
- eventiGestione.add( max );
- /**count = count+dbValue.length();*/
- }
- else {
- // tronco gli eventi ai primi trovati. Sono troppi eventi successi sulla transazione.
- }
- }
- String conflict = "0";
- if(!eventiGestione.isEmpty()){
- try {
- StringBuilder sbConflict = null;
- if(times!=null) {
- sbConflict = new StringBuilder();
- }
- CredenzialeMittente credEventi = GestoreAutenticazione.convertEventiToCredenzialiMittenti(idDominio, info.getIdModulo(), idTransazione, eventiGestione,
- null, fase.name()+".eventi",
- sbConflict, requestInfo);
- if(sbConflict!=null && sbConflict.length()>0) {
- conflict = sbConflict.toString();
- }
- if(credEventi!=null) {
- transactionDTO.setEventiGestione(credEventi.getId()+"");
- }
- }catch(Exception e) {
- // NOTA: questo metodo dovrebbe non lanciare praticamente mai eccezione
- this.logger.error("Errore durante la definizione dell'indice per la ricerca degli eventi: "+e.getMessage(),e);
- }
- }
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("eventi:"+timeProcess+"/c"+conflict);
- }
- }
-
-
- private boolean isEsito(List<Integer> esiti, int esitoCheck) {
- for (int esito : esiti) {
- if(esitoCheck == esito){
- return true;
- }
- }
- return false;
- }
-
- private long consegnaMultiplaProfiloSincrono(InformazioniTransazione info, IDSoggetto idDominio, String idTransazione,
- TransazioniProcessTimes times, long timeStart,
- boolean schedulaNotificheDopoConsegnaSincrona, MsgDiagnostico msgDiag, String nomePorta) {
- IOpenSPCoopState openspcoopState = null;
- try {
- OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
-
- EJBUtilsMessaggioInConsegna messaggiInConsegna = null;
- Object oConnettoreConfig = info.getContext().getObject(CostantiPdD.TIMER_RICONSEGNA_CONTENUTI_APPLICATIVI_MESSAGGI_SPEDIRE );
- if (oConnettoreConfig instanceof EJBUtilsMessaggioInConsegna){
- messaggiInConsegna = (EJBUtilsMessaggioInConsegna) oConnettoreConfig;
- }
- if(messaggiInConsegna==null) {
- this.logger.error("Non è stato possibile gestire lo scheduling delle notifiche (connettori multipli): configurazione non disponibile");
- }
- else {
- openspcoopState = new OpenSPCoopStateful();
- openspcoopState.initResource(idDominio, info.getIdModulo(), idTransazione);
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send-getConnection:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- GestoreMessaggi msgRequest = new GestoreMessaggi(openspcoopState,true, messaggiInConsegna.getBusta().getID(),
- org.openspcoop2.protocol.engine.constants.Costanti.INBOX,msgDiag,(PdDContext) info.getContext());
-
- if(schedulaNotificheDopoConsegnaSincrona) {
-
- RepositoryBuste repositoryBuste = null;
- boolean spedizioneConsegnaContenuti = false; // sarà il timer a far partire effettivamente la spedizione
- /**
- RepositoryBuste repositoryBuste = new RepositoryBuste(openspcoopState.getStatoRichiesta(), true, context.getProtocolFactory());
- */
-
- // Devo rilasciare l'attendi esito
- Logger log = OpenSPCoop2Logger.getLoggerOpenSPCoopTransazioniSql(op2Properties.isTransazioniDebug());
- msgRequest.releaseAttesaEsiti(op2Properties.isTransazioniDebug(), log);
-
- EJBUtils.sendMessages(this.logger, msgDiag, openspcoopState, idTransazione,
- repositoryBuste, msgRequest, null,
- info.getProtocolFactory(), idDominio, nomePorta, messaggiInConsegna,
- spedizioneConsegnaContenuti,
- (PdDContext) info.getContext(),
- ConfigurazionePdDManager.getInstance());
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- }
- else {
-
- for (String servizioApplicativo : messaggiInConsegna.getServiziApplicativi()) {
- msgRequest.eliminaDestinatarioMessaggio(servizioApplicativo, null, messaggiInConsegna.getOraRegistrazioneMessaggio());
- }
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send-del:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
- }
- }
-
- }catch(Exception e) {
- this.logger.error("Non è stato possibile gestire lo scheduling delle notifiche (connettori multipli): "+e.getMessage(), e);
- }
- finally {
- try{
- if(openspcoopState!=null && !openspcoopState.resourceReleased()){
- openspcoopState.commit();
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send-commit:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- openspcoopState.releaseResource();
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send-finish:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
- }
- }catch(Exception e){
- // ignore
- }
- }
-
- return timeStart;
- }
-
- private long saveTransactionContext(String identificativoSaveTransactionContext, InformazioniTransazione info, IDSoggetto idDominio, String idTransazione,
- TransazioniProcessTimes times, long timeStart,
- MsgDiagnostico msgDiag) {
- IOpenSPCoopState openspcoopState = null;
- try {
- openspcoopState = new OpenSPCoopStateful();
- openspcoopState.initResource(idDominio, info.getIdModulo(), idTransazione);
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send-saveTransactionContext:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- GestoreMessaggi msgRequest = new GestoreMessaggi(openspcoopState,true, identificativoSaveTransactionContext,
- org.openspcoop2.protocol.engine.constants.Costanti.INBOX,msgDiag,(PdDContext) info.getContext());
-
- msgRequest.registraTransactionContext_statelessEngine(identificativoSaveTransactionContext, info.getContext());
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send-saveTransactionContext-saved:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- }catch(Exception e) {
- this.logger.error("Non è stato possibile salvare il contesto della transazione per le notifiche (connettori multipli): "+e.getMessage(), e);
- }
- finally {
- try{
- if(openspcoopState!=null && !openspcoopState.resourceReleased()){
- openspcoopState.commit();
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send-saveTransactionContext-commit:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
-
- openspcoopState.releaseResource();
-
- if(times!=null) {
- long timeEnd = DateManager.getTimeMillis();
- long timeProcess = timeEnd-timeStart;
- times.fillTransactionDetails.add("async-send-saveTransactionContext-finish:"+timeProcess);
-
- timeStart = DateManager.getTimeMillis();
- }
- }
- }catch(Exception e){
- // ignore
- }
- }
-
- return timeStart;
- }
-
-
-
- public static Busta convertToBusta(Transazione transazioneDTO) {
- Busta busta = new Busta(transazioneDTO.getProtocollo());
-
- busta.setTipoMittente(transazioneDTO.getTipoSoggettoFruitore());
- busta.setMittente(transazioneDTO.getNomeSoggettoFruitore());
- busta.setIdentificativoPortaMittente(transazioneDTO.getIdportaSoggettoFruitore());
- busta.setIndirizzoMittente(transazioneDTO.getIndirizzoSoggettoFruitore());
-
- busta.setTipoDestinatario(transazioneDTO.getTipoSoggettoErogatore());
- busta.setDestinatario(transazioneDTO.getNomeSoggettoErogatore());
- busta.setIdentificativoPortaDestinatario(transazioneDTO.getIdportaSoggettoErogatore());
- busta.setIndirizzoDestinatario(transazioneDTO.getIndirizzoSoggettoErogatore());
-
- busta.setTipoServizio(transazioneDTO.getTipoServizio());
- busta.setServizio(transazioneDTO.getNomeServizio());
- busta.setVersioneServizio(transazioneDTO.getVersioneServizio());
- busta.setAzione(transazioneDTO.getAzione());
-
- busta.setID(transazioneDTO.getIdMessaggioRichiesta());
- busta.setRiferimentoMessaggio(transazioneDTO.getIdMessaggioRisposta());
-
- busta.setCollaborazione(transazioneDTO.getIdCollaborazione());
-
- busta.setServizioApplicativoFruitore(transazioneDTO.getServizioApplicativoFruitore());
- busta.setServizioApplicativoErogatore(transazioneDTO.getServizioApplicativoErogatore());
-
- return busta;
- }
- }