Dump.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;
- import java.sql.Connection;
- import java.util.Date;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import org.openspcoop2.core.config.DumpConfigurazione;
- import org.openspcoop2.core.config.PortaApplicativa;
- import org.openspcoop2.core.config.PortaDelegata;
- import org.openspcoop2.core.config.Proprieta;
- import org.openspcoop2.core.config.constants.StatoFunzionalita;
- import org.openspcoop2.core.config.driver.DriverConfigurazioneException;
- import org.openspcoop2.core.constants.TipoPdD;
- import org.openspcoop2.core.id.IDPortaApplicativa;
- import org.openspcoop2.core.id.IDPortaDelegata;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.core.transazioni.TransazioneApplicativoServer;
- import org.openspcoop2.core.transazioni.constants.TipoMessaggio;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.OpenSPCoop2MessageProperties;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.message.exception.MessageException;
- import org.openspcoop2.message.rest.DumpRestMessageUtils;
- import org.openspcoop2.message.soap.DumpSoapMessageUtils;
- import org.openspcoop2.message.utils.DumpAttachment;
- import org.openspcoop2.message.utils.DumpMessaggio;
- import org.openspcoop2.message.utils.DumpMessaggioConfig;
- import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
- import org.openspcoop2.pdd.config.CostantiProprieta;
- import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
- import org.openspcoop2.pdd.core.CostantiPdD;
- import org.openspcoop2.pdd.core.PdDContext;
- import org.openspcoop2.pdd.core.connettori.InfoConnettoreUscita;
- import org.openspcoop2.pdd.core.transazioni.GestoreConsegnaMultipla;
- import org.openspcoop2.pdd.core.transazioni.RepositoryGestioneStateful;
- import org.openspcoop2.pdd.core.transazioni.Transaction;
- import org.openspcoop2.pdd.core.transazioni.TransactionContext;
- import org.openspcoop2.pdd.core.transazioni.TransactionDeletedException;
- import org.openspcoop2.pdd.core.transazioni.TransactionNotExistsException;
- import org.openspcoop2.protocol.engine.ProtocolFactoryManager;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.dump.Attachment;
- import org.openspcoop2.protocol.sdk.dump.BodyMultipartInfo;
- import org.openspcoop2.protocol.sdk.dump.DumpException;
- import org.openspcoop2.protocol.sdk.dump.IDumpProducer;
- import org.openspcoop2.protocol.sdk.dump.Messaggio;
- import org.openspcoop2.protocol.sdk.state.IState;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.protocol.sdk.state.StateMessage;
- import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
- import org.openspcoop2.protocol.sdk.tracciamento.TracciamentoException;
- import org.openspcoop2.utils.date.DateManager;
- import org.openspcoop2.utils.io.DumpByteArrayOutputStream;
- import org.openspcoop2.utils.transport.TransportUtils;
- import org.openspcoop2.utils.transport.http.HttpConstants;
- import org.slf4j.Logger;
- /**
- * Contiene la definizione un Logger utilizzato dai nodi dell'infrastruttura di OpenSPCoop
- * per la registrazione di messaggi diagnostici.
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class Dump {
- /** Indicazione di un dump funzionante */
- private static boolean sistemaDumpDisponibile = true;
- public static boolean isSistemaDumpDisponibile() {
- return sistemaDumpDisponibile;
- }
- public static void setSistemaDumpDisponibile(boolean sistemaDumpDisponibile) {
- Dump.sistemaDumpDisponibile = sistemaDumpDisponibile;
- }
- /** Primo errore avvenuto nel momento in cui รจ stato rilevato un malfunzionamento nel sistema di dump */
- private static Throwable motivoMalfunzionamentoDump = null;
- public static Throwable getMotivoMalfunzionamentoDump() {
- return motivoMalfunzionamentoDump;
- }
- public static void setMotivoMalfunzionamentoDump(Throwable motivoMalfunzionamentoDump) {
- Dump.motivoMalfunzionamentoDump = motivoMalfunzionamentoDump;
- }
-
- private static final String DIAGNOSTICO_REGISTRAZIONE_NON_RIUSCITA = "dumpContenutiApplicativi.registrazioneNonRiuscita";
-
- /** Logger log4j utilizzato per effettuare un dump dei messaggi applicativi */
- private Logger loggerDump = null;
- private void loggerDumpError(String msg) {
- if(this.loggerDump!=null) {
- this.loggerDump.error(msg);
- }
- }
- private void loggerDumpError(String msg, Throwable e) {
- if(this.loggerDump!=null) {
- this.loggerDump.error(msg,e);
- }
- }
-
- private void loggerOpenSPCoopResourcesError(String msg, Throwable e) {
- if(OpenSPCoop2Logger.loggerOpenSPCoopResources!=null) {
- OpenSPCoop2Logger.loggerOpenSPCoopResources.error(msg,e);
- }
- }
-
-
-
- /** Soggetto che richiede il logger */
- private IDSoggetto dominio;
- /** Modulo Funzionale */
- private String idModulo;
- /** Identificativo del Messaggio */
- private String idMessaggio;
- /** Fruitore */
- private IDSoggetto fruitore;
- /** Servizio */
- private IDServizio servizio;
- /** Signature */
- private String signature;
- /** GDO */
- private Date gdo;
- /** TipoPdD */
- private TipoPdD tipoPdD;
- private String nomePorta;
- /** PdDContext */
- private PdDContext pddContext;
- /** RequestInfo */
- private RequestInfo requestInfo = null;
-
- /** OpenSPCoopProperties */
- private OpenSPCoop2Properties properties = null;
- /** MsgDiagnostico per eventuali errori di tracciamento (viene usato anche per registrare il dump in corso e completato) */
- private MsgDiagnostico msgDiagErroreDump = null;
- private boolean emitDiagnosticDump = false;
-
- /** Appender personalizzati per i dump applicativi di OpenSPCoop */
- private List<IDumpProducer> loggerDumpOpenSPCoopAppender = null;
- private List<String> tipoDumpOpenSPCoopAppender = null;
-
- private DumpConfigurazione dumpConfigurazione;
-
- private IProtocolFactory<?> protocolFactory = null;
- private String idTransazione = null;
-
- /** Stati */
- private StateMessage statoRichiesta;
- private StateMessage statoRisposta;
-
- /** Transaction */
- private Transaction transactionNullable = null;
-
- /** -----------------Impostazione TransazioneApplicativoServer ---------------- */
- private TransazioneApplicativoServer transazioneApplicativoServer;
- private IDPortaApplicativa idPortaApplicativa;
- private Date dataConsegnaTransazioneApplicativoServer;
- public void setTransazioneApplicativoServer(TransazioneApplicativoServer transazioneApplicativoServer, IDPortaApplicativa idPortaApplicativa, Date dataConsegnaTransazioneApplicativoServer) {
- this.transazioneApplicativoServer = transazioneApplicativoServer;
- this.idPortaApplicativa = idPortaApplicativa;
- this.dataConsegnaTransazioneApplicativoServer = dataConsegnaTransazioneApplicativoServer;
- }
-
- /**
- * Costruttore.
- *
- * @param dominio Soggetto che richiede il logger
- * @param modulo Funzione che richiede il logger
- * @param pddContext pddContext
- *
- */
- public Dump(IDSoggetto dominio, String modulo, TipoPdD tipoPdD, String nomePorta, PdDContext pddContext, DumpConfigurazione dumpConfigurazione) throws DumpException{ // dump binario
- this(dominio, modulo, null, null, null, tipoPdD, nomePorta, pddContext,null,null,dumpConfigurazione);
- }
- public Dump(IDSoggetto dominio, String modulo, TipoPdD tipoPdD, String nomePorta, PdDContext pddContext,IState statoRichiesta,IState statoRisposta,
- DumpConfigurazione dumpConfigurazione) throws DumpException{
- this(dominio, modulo, null, null, null, tipoPdD, nomePorta, pddContext,statoRichiesta,statoRisposta,dumpConfigurazione);
- }
- public Dump(IDSoggetto dominio, String modulo, String idMessaggio, IDSoggetto fruitore, IDServizio servizio,
- TipoPdD tipoPdD, String nomePorta, PdDContext pddContext,IState stateParam,IState responseStateParam,
- DumpConfigurazione dumpConfigurazione) throws DumpException{
- this.dominio = dominio;
- this.idModulo = modulo;
- this.idMessaggio = idMessaggio;
- this.fruitore = fruitore;
- this.servizio = servizio;
- this.loggerDump = OpenSPCoop2Logger.loggerDump;
- this.loggerDumpOpenSPCoopAppender = OpenSPCoop2Logger.loggerDumpOpenSPCoopAppender;
- this.tipoDumpOpenSPCoopAppender = OpenSPCoop2Logger.tipoDumpOpenSPCoopAppender;
- this.gdo = DateManager.getDate();
- if(this.dominio!=null)
- this.signature = this.dominio.getCodicePorta()+" <"+this.gdo+"> "+this.idModulo+"\n";
- else
- this.signature = "<"+this.gdo+"> "+this.idModulo+"\n";
- this.tipoPdD = tipoPdD;
- this.nomePorta = nomePorta;
- this.pddContext = pddContext;
- if(this.pddContext==null) {
- throw new DumpException("PdDContext is null");
- }
-
- this.properties = OpenSPCoop2Properties.getInstance();
- if(stateParam instanceof StateMessage){
- this.statoRichiesta = (StateMessage) stateParam;
- }
- if(responseStateParam instanceof StateMessage){
- this.statoRisposta = (StateMessage) responseStateParam;
- }
-
- OpenSPCoop2Properties op2Properties = OpenSPCoop2Properties.getInstance();
-
- this.dumpConfigurazione = dumpConfigurazione;
-
- if(this.pddContext.containsKey(org.openspcoop2.core.constants.Costanti.REQUEST_INFO)) {
- this.requestInfo = (RequestInfo) this.pddContext.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
- }
-
- this.msgDiagErroreDump = MsgDiagnostico.newInstance(this.tipoPdD,dominio,modulo,nomePorta,this.requestInfo,this.statoRichiesta,this.statoRisposta);
- this.msgDiagErroreDump.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_TRACCIAMENTO);
- this.emitDiagnosticDump = op2Properties.isDumpEmitDiagnostic();
-
- this.idTransazione = (String) this.pddContext.getObject(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE);
-
- // Protocol Factory Manager
- String protocol = null;
- try{
- this.protocolFactory = ProtocolFactoryManager.getInstance().getProtocolFactoryByName((String) this.pddContext.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
- protocol = this.protocolFactory.getProtocol();
- this.msgDiagErroreDump.setPddContext(this.pddContext, this.protocolFactory);
- }catch (Exception e) {
- throw new DumpException("Errore durante l'inizializzazione del ProtocolFactoryManager...",e);
- }
- if(this.dominio==null){
- this.dominio=op2Properties.getIdentitaPortaDefault(protocol, this.requestInfo);
- }
-
- try{
- if(this.idTransazione!=null) {
- this.transactionNullable = TransactionContext.getTransaction(this.idTransazione);
- }
- }catch(Exception e){
- // La transazione potrebbe essere stata eliminata nelle comunicazioni stateful
- }
- }
-
- private Connection getConnectionFromState(boolean richiesta){
- if(richiesta){
- Connection c = StateMessage.getConnection(this.statoRichiesta);
- if(c!=null) {
- return c;
- }
- }
- else{
- Connection c = StateMessage.getConnection(this.statoRisposta);
- if(c!=null) {
- return c;
- }
- }
- return null;
- }
- /** ----------------- METODI DI LOGGING ---------------- */
- public void emitDiagnosticStartDumpBinarioRichiestaIngresso(boolean onlyFileTrace) {
- emitDiagnosticDumpStart(TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO, onlyFileTrace);
- }
- public void dumpBinarioRichiestaIngresso(boolean dumpBinarioRegistrazioneDatabase, boolean onlyLogFileTraceHeaders, boolean onlyLogFileTraceBody,
- DumpByteArrayOutputStream msg, MessageType messageType,
- URLProtocolContext protocolContext) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpBinarioRichiestaIngresso();
- }
- try {
- dump(dumpBinarioRegistrazioneDatabase, onlyLogFileTraceHeaders, onlyLogFileTraceBody, TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO,
- null,msg,messageType,
- protocolContext!=null ? protocolContext.getSource() : null,
- protocolContext!=null ? protocolContext.getHeaders() : null);
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpBinarioRichiestaIngresso();
- }
- }
- }
-
- public void dumpRichiestaIngresso(OpenSPCoop2Message msg, URLProtocolContext protocolContext) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpRichiestaIngresso();
- }
- try {
- dump(false, false, false, TipoMessaggio.RICHIESTA_INGRESSO,
- msg,null,null,
- protocolContext!=null ? protocolContext.getSource() : null,
- protocolContext!=null ? protocolContext.getHeaders() : null);
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpRichiestaIngresso();
- }
- }
- }
- public void dumpRichiestaIngressoByIntegrationManagerError(byte[] msg, URLProtocolContext protocolContext) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpRichiestaIngresso();
- }
- try {
- dump(false, false, false, TipoMessaggio.RICHIESTA_INGRESSO,
- null,DumpByteArrayOutputStream.newInstance(msg),null,
- protocolContext!=null ? protocolContext.getSource() : null,
- protocolContext!=null ? protocolContext.getHeaders() : null);
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpRichiestaIngresso();
- }
- }
- }
-
- public void emitDiagnosticStartDumpBinarioRichiestaUscita(boolean onlyFileTrace) {
- emitDiagnosticDumpStart(TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO, onlyFileTrace);
- }
- public void dumpBinarioRichiestaUscita(boolean dumpBinarioRegistrazioneDatabase, boolean onlyLogFileTraceHeaders, boolean onlyLogFileTraceBody,
- DumpByteArrayOutputStream msg, MessageType messageType,
- InfoConnettoreUscita infoConnettore) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpBinarioRichiestaUscita();
- }
- try {
- dump(dumpBinarioRegistrazioneDatabase, onlyLogFileTraceHeaders, onlyLogFileTraceBody, TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO,
- null,msg,messageType,
- (infoConnettore!=null ? infoConnettore.getLocation() : null),
- (infoConnettore!=null ? infoConnettore.getHeaders() : null));
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpBinarioRichiestaUscita();
- }
- }
- }
- public void dumpRichiestaUscita(OpenSPCoop2Message msg, InfoConnettoreUscita infoConnettore) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpRichiestaUscita();
- }
- try {
- dump(false, false, false, TipoMessaggio.RICHIESTA_USCITA,
- msg,null,null,
- (infoConnettore!=null ? infoConnettore.getLocation() : null),
- (infoConnettore!=null ? infoConnettore.getHeaders() : null));
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpRichiestaUscita();
- }
- }
- }
- public void emitDiagnosticStartDumpBinarioRispostaIngresso(boolean onlyFileTrace) {
- emitDiagnosticDumpStart(TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO, onlyFileTrace);
- }
- public void dumpBinarioRispostaIngresso(boolean dumpBinarioRegistrazioneDatabase, boolean onlyLogFileTraceHeaders, boolean onlyLogFileTraceBody,
- DumpByteArrayOutputStream msg, MessageType messageType,
- InfoConnettoreUscita infoConnettore, Map<String, List<String>> transportHeaderRisposta) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpBinarioRispostaIngresso();
- }
- try {
- dump(dumpBinarioRegistrazioneDatabase, onlyLogFileTraceHeaders, onlyLogFileTraceBody, TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO,
- null,msg,messageType,
- (infoConnettore!=null ? infoConnettore.getLocation() : null),transportHeaderRisposta);
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpBinarioRispostaIngresso();
- }
- }
- }
-
- public void dumpRispostaIngresso(OpenSPCoop2Message msg, InfoConnettoreUscita infoConnettore, Map<String, List<String>> transportHeaderRisposta) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpRispostaIngresso();
- }
- try {
- dump(false, false, false, TipoMessaggio.RISPOSTA_INGRESSO,
- msg,null,null,
- (infoConnettore!=null ? infoConnettore.getLocation() : null),transportHeaderRisposta);
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpRispostaIngresso();
- }
- }
- }
-
- public void emitDiagnosticStartDumpBinarioRispostaUscita(boolean onlyFileTrace) {
- emitDiagnosticDumpStart(TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO, onlyFileTrace);
- }
- public void dumpBinarioRispostaUscita(boolean dumpBinarioRegistrazioneDatabase, boolean onlyLogFileTraceHeaders, boolean onlyLogFileTraceBody,
- DumpByteArrayOutputStream msg, MessageType messageType,
- URLProtocolContext protocolContext, Map<String, List<String>> transportHeaderRisposta) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpBinarioRispostaUscita();
- }
- try {
- dump(dumpBinarioRegistrazioneDatabase, onlyLogFileTraceHeaders, onlyLogFileTraceBody, TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO,
- null,msg,messageType,
- protocolContext!=null ? protocolContext.getSource() : null,transportHeaderRisposta);
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpBinarioRispostaUscita();
- }
- }
- }
-
- public void dumpRispostaUscita(OpenSPCoop2Message msg, URLProtocolContext protocolContext, Map<String, List<String>> transportHeaderRisposta) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpRispostaUscita();
- }
- try {
- dump(false, false, false, TipoMessaggio.RISPOSTA_USCITA,
- msg,null,null,
- protocolContext!=null ? protocolContext.getSource() : null,transportHeaderRisposta);
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpRispostaUscita();
- }
- }
- }
-
- public void dumpIntegrationManagerGetMessage(OpenSPCoop2Message msg) throws DumpException {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().startDumpIntegrationManager();
- }
- try {
- dump(false, false, false, TipoMessaggio.INTEGRATION_MANAGER,
- msg,null,null,
- "IntegrationManager.getMessage()",null);
- }
- finally {
- if(this.transactionNullable!=null) {
- this.transactionNullable.getTempiElaborazione().endDumpIntegrationManager();
- }
- }
- }
-
- /**
- * Il Metodo si occupa di creare un effettuare un dump del messaggio applicativo.
- *
- * @param msg Messaggio da registrare
- * @throws TracciamentoException
- *
- */
- private void dump(boolean dumpBinarioRegistrazioneDatabase, boolean onlyLogFileTraceHeaders, boolean onlyLogFileTraceBody,
- TipoMessaggio tipoMessaggio,OpenSPCoop2Message msg,DumpByteArrayOutputStream msgBytes, MessageType messageType,
- String location,Map<String, List<String>> transportHeaderParam) throws DumpException {
- boolean dumpNormale = TipoMessaggio.RICHIESTA_INGRESSO.equals(tipoMessaggio) ||
- TipoMessaggio.RICHIESTA_USCITA.equals(tipoMessaggio) ||
- TipoMessaggio.RISPOSTA_INGRESSO.equals(tipoMessaggio) ||
- TipoMessaggio.RISPOSTA_USCITA.equals(tipoMessaggio);
-
- boolean dumpBinario = TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO.equals(tipoMessaggio) ||
- TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO.equals(tipoMessaggio) ||
- TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO.equals(tipoMessaggio) ||
- TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO.equals(tipoMessaggio);
-
- boolean dumpIntegrationManager = TipoMessaggio.INTEGRATION_MANAGER.equals(tipoMessaggio);
-
-
- if(dumpNormale) {
- if(this.dumpConfigurazione==null) {
- return; // disabilitato
- }
- if(this.dumpConfigurazione!=null && StatoFunzionalita.DISABILITATO.equals(this.dumpConfigurazione.getRealtime())) {
- return; // viene gestito tramite l'handler notify
- }
- }
-
- boolean dumpHeaders = true;
- boolean dumpBody = true;
- boolean dumpAttachments = true;
- if(dumpBinario) {
- dumpAttachments = false;
- }
- boolean dumpBinarioAttivatoTramiteRegolaConfigurazione = false;
-
- if(dumpNormale) {
- // Il dump non binario si utilizza solo se viene richiesto un payload parsing, altrimenti quello binario รจ piรน preciso (anche se sono abilitati solo gli header)
- if(TipoMessaggio.RICHIESTA_INGRESSO.equals(tipoMessaggio)) {
- if(this.dumpConfigurazione!=null && this.dumpConfigurazione.getRichiestaIngresso()!=null) {
- if(StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getPayload()) &&
- StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getPayloadParsing())){
- dumpHeaders = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getHeaders());
- dumpBody = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getBody());
- dumpAttachments = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getAttachments());
- }
- else {
- dumpHeaders = false;
- dumpBody = false;
- dumpAttachments = false;
- }
- }
- }
- else if(TipoMessaggio.RICHIESTA_USCITA.equals(tipoMessaggio)) {
- if(this.dumpConfigurazione!=null && this.dumpConfigurazione.getRichiestaUscita()!=null) {
- if(StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getPayload()) &&
- StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getPayloadParsing())){
- dumpHeaders = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getHeaders());
- dumpBody = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getBody());
- dumpAttachments = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getAttachments());
- }
- else {
- dumpHeaders = false;
- dumpBody = false;
- dumpAttachments = false;
- }
- }
- }
- else if(TipoMessaggio.RISPOSTA_INGRESSO.equals(tipoMessaggio)) {
- if(this.dumpConfigurazione!=null && this.dumpConfigurazione.getRispostaIngresso()!=null) {
- if(StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getPayload()) &&
- StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getPayloadParsing())){
- dumpHeaders = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getHeaders());
- dumpBody = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getBody());
- dumpAttachments = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getAttachments());
- }
- else {
- dumpHeaders = false;
- dumpBody = false;
- dumpAttachments = false;
- }
- }
- }
- else if(TipoMessaggio.RISPOSTA_USCITA.equals(tipoMessaggio) &&
- this.dumpConfigurazione!=null && this.dumpConfigurazione.getRispostaUscita()!=null) {
- if(StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getPayload()) &&
- StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getPayloadParsing())){
- dumpHeaders = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getHeaders());
- dumpBody = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getBody());
- dumpAttachments = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getAttachments());
- }
- else {
- dumpHeaders = false;
- dumpBody = false;
- dumpAttachments = false;
- }
- }
- if(!dumpHeaders && !dumpBody && !dumpAttachments) {
- return; // disabilitato
- }
- }
- else if(dumpBinario) {
-
- if(dumpBinarioRegistrazioneDatabase) {
- // registro tutto
- }
- else {
-
- // imposto a false; verifico poi regola specifica e faccio successivamente verifica per file trace
- dumpHeaders = false;
- dumpBody = false;
-
- // Il dump non binario si utilizza solo se viene richiesto un payload parsing, altrimenti quello binario รจ piรน preciso (anche se sono abilitati solo gli header)
- if(TipoMessaggio.RICHIESTA_INGRESSO_DUMP_BINARIO.equals(tipoMessaggio)) {
- if(this.dumpConfigurazione!=null && this.dumpConfigurazione.getRichiestaIngresso()!=null) {
- boolean payloadParsing = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getPayload()) &&
- StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getPayloadParsing());
- if(!payloadParsing) {
- dumpHeaders = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getHeaders());
- dumpBody = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaIngresso().getPayload());
- dumpBinarioAttivatoTramiteRegolaConfigurazione = dumpHeaders || dumpBody;
- }
- }
- }
- else if(TipoMessaggio.RICHIESTA_USCITA_DUMP_BINARIO.equals(tipoMessaggio)) {
- if(this.dumpConfigurazione!=null && this.dumpConfigurazione.getRichiestaUscita()!=null) {
- boolean payloadParsing = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getPayload()) &&
- StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getPayloadParsing());
- if(!payloadParsing) {
- dumpHeaders = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getHeaders());
- dumpBody = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRichiestaUscita().getPayload());
- dumpBinarioAttivatoTramiteRegolaConfigurazione = dumpHeaders || dumpBody;
- }
- }
- }
- else if(TipoMessaggio.RISPOSTA_INGRESSO_DUMP_BINARIO.equals(tipoMessaggio)) {
- if(this.dumpConfigurazione!=null && this.dumpConfigurazione.getRispostaIngresso()!=null) {
- boolean payloadParsing = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getPayload()) &&
- StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getPayloadParsing());
- if(!payloadParsing) {
- dumpHeaders = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getHeaders());
- dumpBody = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaIngresso().getPayload());
- dumpBinarioAttivatoTramiteRegolaConfigurazione = dumpHeaders || dumpBody;
- }
- }
- }
- else if(TipoMessaggio.RISPOSTA_USCITA_DUMP_BINARIO.equals(tipoMessaggio) &&
- this.dumpConfigurazione!=null && this.dumpConfigurazione.getRispostaUscita()!=null) {
- boolean payloadParsing = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getPayload()) &&
- StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getPayloadParsing());
- if(!payloadParsing) {
- dumpHeaders = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getHeaders());
- dumpBody = StatoFunzionalita.ABILITATO.equals(this.dumpConfigurazione.getRispostaUscita().getPayload());
- dumpBinarioAttivatoTramiteRegolaConfigurazione = dumpHeaders || dumpBody;
- }
- }
- }
-
- if(!dumpHeaders && !dumpBody && !dumpAttachments && !onlyLogFileTraceHeaders && !onlyLogFileTraceBody) {
- return; // disabilitato
- }
- }
- boolean dumpMultipartHeaders = dumpHeaders;
-
- String identificativoDiagnostico = null;
- if(dumpNormale) {
- identificativoDiagnostico = emitDiagnosticDumpStart(tipoMessaggio, false);
- }
- else {
- boolean onlyFileTrace = !dumpHeaders && !dumpBody && !dumpAttachments;
-
- identificativoDiagnostico = getIdentificativoDiagnostico(tipoMessaggio, onlyFileTrace);
- }
-
- try {
- dumpEngine(onlyLogFileTraceHeaders, onlyLogFileTraceBody,
- tipoMessaggio, msg, msgBytes, messageType,
- location, transportHeaderParam,
- dumpHeaders, dumpBody, dumpAttachments, dumpMultipartHeaders,
- dumpIntegrationManager,
- dumpBinario, dumpBinarioAttivatoTramiteRegolaConfigurazione);
- }finally {
- if(identificativoDiagnostico!=null && this.emitDiagnosticDump) {
- try {
- if(this.transazioneApplicativoServer!=null && this.idPortaApplicativa!=null) {
- this.msgDiagErroreDump.setTransazioneApplicativoServer(this.transazioneApplicativoServer, this.idPortaApplicativa);
- }
- this.msgDiagErroreDump.logPersonalizzato(identificativoDiagnostico+"completato");
- }catch(Exception t) {
- if(this.loggerDump!=null) {
- this.loggerDumpError("Riscontrato errore durante l'emissione del diagnostico per il dump del contenuto applicativo in corso del messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+":"+t.getMessage(),t);
- }
- }finally {
- this.msgDiagErroreDump.setTransazioneApplicativoServer(null, null);
- }
- }
- }
- }
-
- private String getIdentificativoDiagnostico(TipoMessaggio tipoMessaggio, boolean onlyFileTrace) {
- String identificativoDiagnostico = null;
- if(tipoMessaggio!=null) {
- switch (tipoMessaggio) {
- case RICHIESTA_INGRESSO:
- case RICHIESTA_INGRESSO_DUMP_BINARIO:
- if(onlyFileTrace) {
- identificativoDiagnostico = "dumpContenutiApplicativiFileTrace.richiestaIngresso.";
- }
- else {
- identificativoDiagnostico = "dumpContenutiApplicativi.richiestaIngresso.";
- }
- break;
- case RICHIESTA_USCITA:
- case RICHIESTA_USCITA_DUMP_BINARIO:
- if(onlyFileTrace) {
- identificativoDiagnostico = "dumpContenutiApplicativiFileTrace.richiestaUscita.";
- }
- else {
- identificativoDiagnostico = "dumpContenutiApplicativi.richiestaUscita.";
- }
- break;
- case RISPOSTA_INGRESSO:
- case RISPOSTA_INGRESSO_DUMP_BINARIO:
- if(onlyFileTrace) {
- identificativoDiagnostico = "dumpContenutiApplicativiFileTrace.rispostaIngresso.";
- }
- else {
- identificativoDiagnostico = "dumpContenutiApplicativi.rispostaIngresso.";
- }
- break;
- case RISPOSTA_USCITA:
- case RISPOSTA_USCITA_DUMP_BINARIO:
- if(onlyFileTrace) {
- identificativoDiagnostico = "dumpContenutiApplicativiFileTrace.rispostaUscita.";
- }
- else {
- identificativoDiagnostico = "dumpContenutiApplicativi.rispostaUscita.";
- }
- break;
- default:
- break;
- }
- }
- return identificativoDiagnostico;
- }
-
- private String emitDiagnosticDumpStart(TipoMessaggio tipoMessaggio, boolean onlyFileTrace) {
- String identificativoDiagnostico = getIdentificativoDiagnostico(tipoMessaggio, onlyFileTrace);
- emitDiagnosticDumpStart(tipoMessaggio, identificativoDiagnostico);
- return identificativoDiagnostico;
- }
- private void emitDiagnosticDumpStart(TipoMessaggio tipoMessaggio, String identificativoDiagnostico) {
- if(identificativoDiagnostico!=null && this.emitDiagnosticDump) {
- try {
- if(this.transazioneApplicativoServer!=null && this.idPortaApplicativa!=null) {
- this.msgDiagErroreDump.setTransazioneApplicativoServer(this.transazioneApplicativoServer, this.idPortaApplicativa);
- }
- this.msgDiagErroreDump.logPersonalizzato(identificativoDiagnostico+"inCorso");
- }catch(Exception t) {
- if(this.loggerDump!=null) {
- this.loggerDumpError("Riscontrato errore durante l'emissione del diagnostico per il dump del contenuto applicativo in corso del messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+":"+t.getMessage(),t);
- }
- }finally {
- this.msgDiagErroreDump.setTransazioneApplicativoServer(null, null);
- }
- }
- }
-
-
- private List<String> initDumpWhiteHeaderList(TipoMessaggio tipoMessaggio) {
- return initDumpHeaderList(true, tipoMessaggio);
- }
- private List<String> initDumpBlackHeaderList(TipoMessaggio tipoMessaggio) {
- return initDumpHeaderList(false, tipoMessaggio);
- }
- private List<String> initDumpHeaderList(boolean whiteList, TipoMessaggio tipoMessaggio) {
-
- List<String> l = initDumpHeaderPorta(whiteList, tipoMessaggio);
- if(l!=null && !l.isEmpty()) {
- return l;
- }
-
- if(this.tipoPdD!=null && tipoMessaggio!=null) {
- l = initDumpHeaderListRequestResponse(whiteList, tipoMessaggio);
- if(l!=null && !l.isEmpty()) {
- return l;
- }
- }
-
- if(this.tipoPdD!=null) {
- l = initDumpHeaderList(whiteList,
- this.properties.getDumpHeaderErogazioniWhiteList(),
- this.properties.getDumpHeaderErogazioniBlackList(),
- this.properties.getDumpHeaderFruizioniWhiteList(),
- this.properties.getDumpHeaderFruizioniBlackList());
- if(l!=null && !l.isEmpty()) {
- return l;
- }
- }
-
- return whiteList ? this.properties.getDumpHeaderWhiteList() : this.properties.getDumpHeaderBlackList();
- }
- private List<Proprieta> getProprietaPortaList() throws DriverConfigurazioneException{
- List<Proprieta> lReturn = null;
- if(this.tipoPdD!=null && this.nomePorta!=null) {
-
- ConfigurazionePdDManager configPdDManager = ConfigurazionePdDManager.getInstance(this.statoRichiesta!=null ? this.statoRichiesta : this.statoRisposta);
-
- if(TipoPdD.APPLICATIVA.equals(this.tipoPdD)) {
- IDPortaApplicativa idPA = new IDPortaApplicativa();
- idPA.setNome(this.nomePorta);
- PortaApplicativa pa = configPdDManager.getPortaApplicativaSafeMethod(idPA, this.requestInfo);
- if(pa!=null) {
- return pa.getProprieta();
- }
- }
- else if(TipoPdD.DELEGATA.equals(this.tipoPdD)) {
- IDPortaDelegata idPD = new IDPortaDelegata();
- idPD.setNome(this.nomePorta);
- PortaDelegata pd = configPdDManager.getPortaDelegataSafeMethod(idPD, this.requestInfo);
- if(pd!=null) {
- return pd.getProprieta();
- }
- }
-
- }
- return lReturn;
- }
- private List<String> initDumpHeaderPorta(boolean whiteList, TipoMessaggio tipoMessaggio) {
-
- List<String> l = null;
-
- List<Proprieta> portaProps = null;
- try {
- portaProps = getProprietaPortaList();
- }catch(Exception e) {
- this.loggerDumpError("Recupero proprietร dalla porta '"+this.nomePorta+"' (tipo: "+this.tipoPdD+") fallito: "+e.getMessage(),e);
- }
-
- if(portaProps!=null && !portaProps.isEmpty()) {
-
- l = initDumpHeaderListRequestResponsePorta(whiteList, tipoMessaggio, portaProps);
- if(l!=null && !l.isEmpty()) {
- return l;
- }
-
- List<String> white = CostantiProprieta.getRegistrazioneMessaggiWhiteList(portaProps);
- List<String> black = CostantiProprieta.getRegistrazioneMessaggiBlackList(portaProps);
- l = initDumpHeaderList(whiteList,
- white,
- black,
- white,
- black);
- if(l!=null && !l.isEmpty()) {
- return l;
- }
-
- }
-
- return l;
- }
- private List<String> initDumpHeaderListRequestResponsePorta(boolean whiteList, TipoMessaggio tipoMessaggio, List<Proprieta> proprieta) {
- List<String> l = null;
-
- if(this.tipoPdD!=null && tipoMessaggio!=null) {
- switch (tipoMessaggio) {
-
- case RICHIESTA_INGRESSO:
- case RICHIESTA_INGRESSO_DUMP_BINARIO:{
- List<String> white = CostantiProprieta.getRegistrazioneMessaggiRichiestaIngressoWhiteList(proprieta);
- List<String> black = CostantiProprieta.getRegistrazioneMessaggiRichiestaIngressoBlackList(proprieta);
- l = initDumpHeaderList(whiteList,
- white,
- black,
- white,
- black);
- break;
- }
- case RICHIESTA_USCITA:
- case RICHIESTA_USCITA_DUMP_BINARIO:{
- List<String> white = CostantiProprieta.getRegistrazioneMessaggiRichiestaUscitaWhiteList(proprieta);
- List<String> black = CostantiProprieta.getRegistrazioneMessaggiRichiestaUscitaBlackList(proprieta);
- l = initDumpHeaderList(whiteList,
- white,
- black,
- white,
- black);
- break;
- }
- case RISPOSTA_INGRESSO:
- case RISPOSTA_INGRESSO_DUMP_BINARIO:{
- List<String> white = CostantiProprieta.getRegistrazioneMessaggiRispostaIngressoWhiteList(proprieta);
- List<String> black = CostantiProprieta.getRegistrazioneMessaggiRispostaIngressoBlackList(proprieta);
- l = initDumpHeaderList(whiteList,
- white,
- black,
- white,
- black);
- break;
- }
-
- case RISPOSTA_USCITA:
- case RISPOSTA_USCITA_DUMP_BINARIO:{
- List<String> white = CostantiProprieta.getRegistrazioneMessaggiRispostaUscitaWhiteList(proprieta);
- List<String> black = CostantiProprieta.getRegistrazioneMessaggiRispostaUscitaBlackList(proprieta);
- l = initDumpHeaderList(whiteList,
- white,
- black,
- white,
- black);
- break;
- }
-
- default:
- break;
- }
- }
- return l;
- }
- private List<String> initDumpHeaderListRequestResponse(boolean whiteList, TipoMessaggio tipoMessaggio) {
-
- List<String> l = null;
-
- if(this.tipoPdD!=null && tipoMessaggio!=null) {
- switch (tipoMessaggio) {
-
- case RICHIESTA_INGRESSO:
- case RICHIESTA_INGRESSO_DUMP_BINARIO:
- l = initDumpHeaderList(whiteList,
- this.properties.getDumpHeaderErogazioniRichiestaIngressoWhiteList(),
- this.properties.getDumpHeaderErogazioniRichiestaIngressoBlackList(),
- this.properties.getDumpHeaderFruizioniRichiestaIngressoWhiteList(),
- this.properties.getDumpHeaderFruizioniRichiestaIngressoBlackList());
- break;
-
- case RICHIESTA_USCITA:
- case RICHIESTA_USCITA_DUMP_BINARIO:
- l = initDumpHeaderList(whiteList,
- this.properties.getDumpHeaderErogazioniRichiestaUscitaWhiteList(),
- this.properties.getDumpHeaderErogazioniRichiestaUscitaBlackList(),
- this.properties.getDumpHeaderFruizioniRichiestaUscitaWhiteList(),
- this.properties.getDumpHeaderFruizioniRichiestaUscitaBlackList());
- break;
-
- case RISPOSTA_INGRESSO:
- case RISPOSTA_INGRESSO_DUMP_BINARIO:
- l = initDumpHeaderList(whiteList,
- this.properties.getDumpHeaderErogazioniRispostaIngressoWhiteList(),
- this.properties.getDumpHeaderErogazioniRispostaIngressoBlackList(),
- this.properties.getDumpHeaderFruizioniRispostaIngressoWhiteList(),
- this.properties.getDumpHeaderFruizioniRispostaIngressoBlackList());
- break;
-
- case RISPOSTA_USCITA:
- case RISPOSTA_USCITA_DUMP_BINARIO:
- l = initDumpHeaderList(whiteList,
- this.properties.getDumpHeaderErogazioniRispostaUscitaWhiteList(),
- this.properties.getDumpHeaderErogazioniRispostaUscitaBlackList(),
- this.properties.getDumpHeaderFruizioniRispostaUscitaWhiteList(),
- this.properties.getDumpHeaderFruizioniRispostaUscitaBlackList());
- break;
-
- default:
- break;
- }
- }
- return l;
- }
- private List<String> initDumpHeaderList(boolean whiteList, List<String> erogazioniWhiteList, List<String> erogazioniBlackList, List<String> fruizioniWhiteList, List<String> fruizioniBlackList){
- List<String> l = null;
- if(TipoPdD.APPLICATIVA.equals(this.tipoPdD)) {
- l = whiteList ? erogazioniWhiteList : erogazioniBlackList;
- }
- else if(TipoPdD.DELEGATA.equals(this.tipoPdD)) {
- l = whiteList ? fruizioniWhiteList : fruizioniBlackList;
- }
- return l;
- }
-
-
- private void dumpEngine(boolean onlyLogFileTraceHeaders, boolean onlyLogFileTraceBody,
- TipoMessaggio tipoMessaggio,OpenSPCoop2Message msg,DumpByteArrayOutputStream msgBytes, MessageType messageType,
- String location,Map<String, List<String>> transportHeaderParam,
- boolean dumpHeaders, boolean dumpBody, boolean dumpAttachments, boolean dumpMultipartHeaders,
- boolean dumpIntegrationManager,
- boolean dumpBinario, boolean dumpBinarioAttivatoTramiteRegolaConfigurazione) throws DumpException {
-
-
- Messaggio messaggio = new Messaggio();
- if(this.protocolFactory!=null) {
- messaggio.setProtocollo(this.protocolFactory.getProtocol());
- }
- messaggio.setTipoMessaggio(tipoMessaggio);
- if(msg!=null) {
- messaggio.setFormatoMessaggio(msg.getMessageType());
- }
- else if(messageType!=null) {
- messaggio.setFormatoMessaggio(messageType);
- }
-
- messaggio.setGdo(DateManager.getDate());
-
- messaggio.setDominio(this.dominio);
- messaggio.setTipoPdD(this.tipoPdD);
- messaggio.setIdFunzione(this.idModulo);
-
- messaggio.setIdTransazione(this.idTransazione);
- messaggio.setIdBusta(this.idMessaggio);
- messaggio.setFruitore(this.fruitore);
- messaggio.setServizio(this.servizio);
-
- if(this.protocolFactory!=null) {
- messaggio.setProtocollo(this.protocolFactory.getProtocol());
- }
-
-
-
- // HEADERS
- Map<String, List<String>> transportHeader = new HashMap<>(); // uso anche sotto per content type in caso msg bytes
- try{
- if(transportHeaderParam!=null && transportHeaderParam.size()>0){
- transportHeader.putAll(transportHeaderParam);
- }
- if(msg!=null){
- OpenSPCoop2MessageProperties forwardHeader = null;
- if(TipoMessaggio.RICHIESTA_USCITA.equals(tipoMessaggio)){
- if(ServiceBinding.REST.equals(msg.getServiceBinding())) {
- forwardHeader = msg.getForwardTransportHeader(this.properties.getRESTServicesHeadersForwardConfig(true));
- }
- else {
- forwardHeader = msg.getForwardTransportHeader(this.properties.getSOAPServicesHeadersForwardConfig(true));
- }
- }
- else if(TipoMessaggio.RISPOSTA_USCITA.equals(tipoMessaggio)){
- if(ServiceBinding.REST.equals(msg.getServiceBinding())) {
- forwardHeader = msg.getForwardTransportHeader(this.properties.getRESTServicesHeadersForwardConfig(false));
- }
- else {
- forwardHeader = msg.getForwardTransportHeader(this.properties.getSOAPServicesHeadersForwardConfig(false));
- }
- }
- if(forwardHeader!=null && forwardHeader.size()>0){
- Iterator<String> enHdr = forwardHeader.getKeys();
- while (enHdr.hasNext()) {
- String key = enHdr.next();
- if(key!=null){
- List<String> values = forwardHeader.getPropertyValues(key);
- if(values!=null && !values.isEmpty()){
- transportHeader.put(key, values);
- }
- }
- }
- }
- }
- if(msg!=null &&
- !TransportUtils.containsKey(transportHeader, HttpConstants.CONTENT_TYPE)) {
- String contentType = msg.getContentType();
- if(contentType!=null) {
- TransportUtils.setHeader(transportHeader, HttpConstants.CONTENT_TYPE, contentType);
- }
- }
- }catch(Exception e){
- // Registro solo l'errore sul file dump.log
- // Si tratta di un errore che non dovrebbe mai avvenire
- String messaggioErrore = "Riscontrato errore durante la lettura degli header di trasporto del contenuto applicativo presente nel messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+":"+e.getMessage();
- this.loggerDumpError(messaggioErrore);
- OpenSPCoop2Logger.getLoggerOpenSPCoopCore().error(messaggioErrore);
- }
- if( (dumpHeaders || onlyLogFileTraceHeaders) &&
- (transportHeader!=null && transportHeader.size()>0)
- ){
-
- List<String> filterList = null;
- boolean white = false;
-
- List<String> dumpHeaderWhiteList = initDumpWhiteHeaderList(tipoMessaggio);
- List<String> dumpHeaderBlackList = initDumpBlackHeaderList(tipoMessaggio);
-
- if(dumpHeaderWhiteList!=null && !dumpHeaderWhiteList.isEmpty()) {
- filterList = dumpHeaderWhiteList;
- white = true;
- }
- else if(dumpHeaderBlackList!=null && !dumpHeaderBlackList.isEmpty()) {
- filterList = dumpHeaderBlackList;
- white = false;
- }
-
- Iterator<String> keys = transportHeader.keySet().iterator();
- while (keys.hasNext()) {
- String key = keys.next();
- if(key!=null){
-
- boolean add = false;
- if(filterList!=null) {
- boolean find = false;
- for (String filterHdr : filterList) {
- if(filterHdr.equalsIgnoreCase(key)) {
- find = true;
- break;
- }
- }
- if(white) {
- if(find) {
- add = true;
- }
- }
- else {
- if(!find) {
- add = true;
- }
- }
- }
- else {
- add = true;
- }
-
- if(add) {
- List<String> values = transportHeader.get(key);
- messaggio.getHeaders().put(key, values);
- }
- }
- }
- }
-
-
-
-
- // BODY e ATTACHMENTS
- DumpMessaggio dumpMessaggio = null;
- DumpMessaggioConfig dumpMessaggioConfig = null;
- try {
- if( (dumpBody || onlyLogFileTraceBody)
- ||
- dumpAttachments
- ) {
- if(msg!=null){
- dumpMessaggioConfig = new DumpMessaggioConfig();
- dumpMessaggio = fillMessaggio(msg, dumpMessaggioConfig,
- dumpBody, dumpAttachments, dumpMultipartHeaders,
- messaggio);
- }
- else {
-
- if( dumpBody || onlyLogFileTraceBody ) {
-
- if(transportHeader!=null && !transportHeader.isEmpty()) {
- Iterator<String> keys = transportHeader.keySet().iterator();
- while (keys.hasNext()) {
- String key = keys.next();
- if(HttpConstants.CONTENT_TYPE.equalsIgnoreCase(key)){
- List<String> values = transportHeader.get(key);
- if(values!=null && !values.isEmpty()) {
- messaggio.setContentType(values.get(0));
- }
- break;
- }
- }
- }
-
- messaggio.setBody(msgBytes);
- }
- }
- }
- }catch(Exception e){
- try{
- // Registro l'errore sul file dump.log
- this.loggerDumpError("Riscontrato errore durante la preparazione al dump del contenuto applicativo presente nel messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+":"+e.getMessage());
- }catch(Exception eLog){
- // ignore
- }
- loggerOpenSPCoopResourcesError("Errore durante la preparazione al dump del contenuto applicativo presente nel messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+": "+e.getMessage(),e);
- try{
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIA_TIPO, tipoMessaggio.getValue());
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIAMENTO_ERRORE,e.getMessage());
- this.msgDiagErroreDump.logPersonalizzato(DIAGNOSTICO_REGISTRAZIONE_NON_RIUSCITA);
- }catch(Exception eMsg){
- // ignore
- }
- gestioneErroreDump(e);
- }
-
-
-
-
-
- // TransazioneContext
- if(this.properties.isTransazioniSaveDumpInUniqueTransaction() || onlyLogFileTraceBody || onlyLogFileTraceHeaders) {
-
-
- if(this.transazioneApplicativoServer!=null) {
- try {
- // forzo
- messaggio.setIdTransazione(this.transazioneApplicativoServer.getIdTransazione());
- messaggio.setServizioApplicativoErogatore(this.transazioneApplicativoServer.getServizioApplicativoErogatore());
- messaggio.setDataConsegna(this.dataConsegnaTransazioneApplicativoServer);
- GestoreConsegnaMultipla.getInstance().safeSave(messaggio, this.idPortaApplicativa, this.statoRichiesta!=null ? this.statoRichiesta : this.statoRisposta, this.requestInfo, this.pddContext);
- }catch(Exception t) {
- String msgError = "Errore durante il salvataggio delle informazioni relative al servizio applicativo: "+t.getMessage();
- this.loggerDumpError(msgError,t);
- loggerOpenSPCoopResourcesError(msgError,t);
- try{
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIA_TIPO, tipoMessaggio.getValue());
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIAMENTO_ERRORE,t.getMessage());
- this.msgDiagErroreDump.logPersonalizzato(DIAGNOSTICO_REGISTRAZIONE_NON_RIUSCITA);
- }catch(Exception eMsg){
- // ignore
- }
- gestioneErroreDump(t);
- }
- }
- else {
-
- Exception exc = null;
- boolean gestioneStateful = false;
- try {
- Transaction tr = TransactionContext.getTransaction(this.idTransazione);
- if(messaggio.getBody()!=null) {
- messaggio.getBody().lock();
- }
- tr.addMessaggio(messaggio, onlyLogFileTraceHeaders, onlyLogFileTraceBody);
- }catch(TransactionDeletedException | TransactionNotExistsException e){
- gestioneStateful = true;
- }catch(Exception e){
- exc = e;
- }
- if(gestioneStateful && !dumpIntegrationManager){
- try{
- /**System.out.println("@@@@@REPOSITORY@@@@@ LOG DUMP ID TRANSAZIONE ["+idTransazione+"] ADD");*/
- RepositoryGestioneStateful.addMessaggio(this.idTransazione, messaggio);
- }catch(Exception e){
- exc = e;
- }
- }
- if(exc!=null) {
- try{
- // Registro l'errore sul file dump.log
- this.loggerDumpError("Riscontrato errore durante la registrazione, nel contesto della transazione, del dump del contenuto applicativo presente nel messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+":"+exc.getMessage());
- }catch(Exception eLog){
- // ignore
- }
- loggerOpenSPCoopResourcesError("Errore durante la registrazione, nel contesto della transazione, del contenuto applicativo presente nel messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+": "+exc.getMessage(),exc);
- try{
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIA_TIPO, tipoMessaggio.getValue());
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIAMENTO_ERRORE,exc.getMessage());
- this.msgDiagErroreDump.logPersonalizzato(DIAGNOSTICO_REGISTRAZIONE_NON_RIUSCITA);
- }catch(Exception eMsg){
- // ignore
- }
- gestioneErroreDump(exc);
- }
-
- }
- }
-
- // Log4J
- if(OpenSPCoop2Logger.loggerDumpAbilitato &&
- (!dumpBinario || dumpBinarioAttivatoTramiteRegolaConfigurazione) // Se attivato da console deve finire in dump.log
- ){
- // Su file di log, il log binario viene registrato in altra maniera sul file openspcoop2_connettori.log
- try{
- StringBuilder out = new StringBuilder();
- out.append(this.signature);
- out.append("TipoMessaggio:"+tipoMessaggio.getValue());
-
- if(this.idTransazione!=null){
- out.append(" idTransazione:");
- out.append(this.idTransazione);
- }
-
- if(this.idMessaggio!=null){
- out.append(" idMessaggio:");
- out.append(this.idMessaggio);
- }
-
- if(location!=null){
- if(TipoMessaggio.RICHIESTA_INGRESSO.equals(tipoMessaggio) || TipoMessaggio.RISPOSTA_USCITA.equals(tipoMessaggio)){
- out.append(" source:");
- }else{
- out.append(" location:");
- }
- out.append(location);
- }
-
- if( this.fruitore!=null ){
- out.append(" FR:");
- out.append(this.fruitore.toString());
- }
- if( this.fruitore!=null && this.servizio!=null)
- out.append(" -> ");
- if( this.servizio!=null ){
- if(this.servizio.getNome()!=null){
- out.append(" S:");
- try{
- out.append(IDServizioFactory.getInstance().getUriFromIDServizio(this.servizio));
- }catch(Exception e){
- out.append(this.servizio.toString(false));
- }
- }else if(this.servizio.getSoggettoErogatore()!=null){
- out.append(" ER:");
- out.append(this.servizio.getSoggettoErogatore().toString());
- }
- }
-
- out.append(" \n");
-
- // HEADER
-
- if(dumpHeaders) {
- out.append("------ Header di trasporto ------\n");
- if(messaggio.getHeaders()!=null && messaggio.getHeaders().size()>0) {
- Iterator<?> it = messaggio.getHeaders().keySet().iterator();
- while (it.hasNext()) {
- String key = (String) it.next();
- if(key!=null){
- List<String> values = messaggio.getHeaders().get(key);
- if(values!=null && !values.isEmpty()) {
- for (String value : values) {
- out.append("- "+key+": "+value+"\n");
- }
- }
- }
- }
- }
- else {
- out.append("Non presenti\n");
- }
- }
-
- // BODY e ATTACHMENTS
-
- if(dumpBody || dumpAttachments) {
- if(msg!=null){
-
- if(dumpAttachments && !this.properties.isDumpAllAttachments()) {
- // Ricalcolo gli attachments prendendo solo quelli stampabili
- if(ServiceBinding.SOAP.equals(msg.getServiceBinding())){
- dumpMessaggio = DumpSoapMessageUtils.dumpMessage(msg.castAsSoap(), dumpMessaggioConfig, false);
- }
- else{
- dumpMessaggio = DumpRestMessageUtils.dumpMessage(msg.castAsRest(), dumpMessaggioConfig, false);
- }
- }
-
- if(dumpMessaggio!=null) {
- out.append(dumpMessaggio.toString(dumpMessaggioConfig,this.properties.isDumpAllAttachments()));
- }
-
- }else{
- if(msgBytes!=null && msgBytes.size()>0) {
- if(org.openspcoop2.utils.mime.MultipartUtils.messageWithAttachment(msgBytes.toByteArray())){
- out.append("------ MessageWithAttachments ------\n");
- }else{
- out.append("------ Message ------\n");
- }
- out.append(msgBytes.toString());
- }
- else {
- out.append("------ Message ------\n");
- out.append("Non presente\n");
- }
- }
-
- }
-
- String msgDump = out.toString();
- this.loggerDump.info(msgDump);
-
- }catch(Exception e){
- try{
- // Registro l'errore sul file dump.log
- this.loggerDumpError("Riscontrato errore durante il dump su file di log del contenuto applicativo presente nel messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+":"+e.getMessage());
- }catch(Exception eLog){
- // ignore
- }
- loggerOpenSPCoopResourcesError("Errore durante il dump su file di log del contenuto applicativo presente nel messaggio ("+tipoMessaggio+
- ") "+getLogIdTransazione()+": "+e.getMessage(),e);
- try{
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIA_TIPO, tipoMessaggio.getValue());
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIAMENTO_ERRORE,e.getMessage());
- this.msgDiagErroreDump.logPersonalizzato(DIAGNOSTICO_REGISTRAZIONE_NON_RIUSCITA);
- }catch(Exception eMsg){
- // ignore
- }
- gestioneErroreDump(e);
- }
- }
-
- // Il dump via API lo effettuo solamente se ho davvero un messaggio OpenSPCoop
- // Senno ottengo errori all'interno delle implementazioni degli appender dump
- boolean onlyLogFileTrace = false;
- if( (onlyLogFileTraceHeaders && !dumpHeaders)
- ||
- (onlyLogFileTraceBody && !dumpBody) ) {
- onlyLogFileTrace=true;
- }
- if(!onlyLogFileTrace && !dumpIntegrationManager) {
- for(int i=0; i<this.loggerDumpOpenSPCoopAppender.size();i++){
- try{
- boolean headersCompact = false; //non supportato nei plugins
- this.loggerDumpOpenSPCoopAppender.get(i).dump(getConnectionFromState(false),messaggio,headersCompact);
- }catch(Exception e){
- loggerOpenSPCoopResourcesError("Errore durante il dump personalizzato ["+this.tipoDumpOpenSPCoopAppender.get(i)+
- "] del contenuto applicativo presente nel messaggio ("+tipoMessaggio+") "+getLogIdTransazione()+": "+e.getMessage(),e);
- try{
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIA_TIPO, tipoMessaggio.getValue());
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIAMENTO_ERRORE,e.getMessage());
- this.msgDiagErroreDump.addKeyword(CostantiPdD.KEY_TRACCIAMENTO_PERSONALIZZATO,this.tipoDumpOpenSPCoopAppender.get(i));
- this.msgDiagErroreDump.logPersonalizzato("dumpContenutiApplicativi.registrazioneNonRiuscita.openspcoopAppender");
- }catch(Exception eMsg){
- // ignore
- }
- gestioneErroreDump(e);
- }
- }
- }
- }
-
- public static DumpMessaggio fillMessaggio(OpenSPCoop2Message msg, DumpMessaggioConfig dumpMessaggioConfig,
- boolean dumpBody, boolean dumpAttachments, boolean dumpMultipartHeaders,
- Messaggio messaggio) throws MessageException {
-
- DumpMessaggio dumpMessaggio = null;
-
- dumpMessaggioConfig.setDumpBody(dumpBody);
- dumpMessaggioConfig.setDumpHeaders(false); // utilizzo sempre quello fornito poiche' per il raw il msg openspcoop2 non e' disponibile, altrimenti perche' devo considerare i forward header
- dumpMessaggioConfig.setDumpAttachments(dumpAttachments);
- dumpMessaggioConfig.setDumpMultipartHeaders(dumpMultipartHeaders);
-
- if(ServiceBinding.SOAP.equals(msg.getServiceBinding())){
- dumpMessaggio = DumpSoapMessageUtils.dumpMessage(msg.castAsSoap(), dumpMessaggioConfig, true); /**!Devo leggere tutti gli attachments! this.properties.isDumpAllAttachments());*/
- }
- else{
- dumpMessaggio = DumpRestMessageUtils.dumpMessage(msg.castAsRest(), dumpMessaggioConfig, true); /**!Devo leggere tutti gli attachments! this.properties.isDumpAllAttachments());*/
- }
-
- messaggio.setContentType(dumpMessaggio.getContentType());
-
- if(dumpBody) {
- messaggio.setBody(DumpByteArrayOutputStream.newInstance(dumpMessaggio.getBody()));
- if(dumpMessaggio.getMultipartInfoBody()!=null) {
- BodyMultipartInfo bodyMultipartInfo = new BodyMultipartInfo();
-
- bodyMultipartInfo.setContentId(dumpMessaggio.getMultipartInfoBody().getContentId());
- bodyMultipartInfo.setContentLocation(dumpMessaggio.getMultipartInfoBody().getContentLocation());
- bodyMultipartInfo.setContentType(dumpMessaggio.getMultipartInfoBody().getContentType());
-
- if(dumpMultipartHeaders &&
- dumpMessaggio.getMultipartInfoBody().getHeadersValues()!=null &&
- dumpMessaggio.getMultipartInfoBody().getHeadersValues().size()>0) {
- Iterator<?> it = dumpMessaggio.getMultipartInfoBody().getHeadersValues().keySet().iterator();
- while (it.hasNext()) {
- String key = (String) it.next();
- List<String> values = dumpMessaggio.getMultipartInfoBody().getHeadersValues().get(key);
- bodyMultipartInfo.getHeaders().put(key, values);
- }
- }
-
- messaggio.setBodyMultipartInfo(bodyMultipartInfo);
- }
- }
-
- if(dumpAttachments && dumpMessaggio.getAttachments()!=null &&
- !dumpMessaggio.getAttachments().isEmpty()) {
- for (DumpAttachment dumpAttach : dumpMessaggio.getAttachments()) {
-
- Attachment attachment = new Attachment();
-
- attachment.setContentId(dumpAttach.getContentId());
- attachment.setContentLocation(dumpAttach.getContentLocation());
- attachment.setContentType(dumpAttach.getContentType());
-
- if(dumpMultipartHeaders &&
- dumpAttach.getHeadersValues()!=null &&
- dumpAttach.getHeadersValues().size()>0) {
- Iterator<?> it = dumpAttach.getHeadersValues().keySet().iterator();
- while (it.hasNext()) {
- String key = (String) it.next();
- List<String> values = dumpAttach.getHeadersValues().get(key);
- attachment.getHeaders().put(key, values);
- }
- }
-
- if(dumpAttach.getContent()!=null)
- attachment.setContent(dumpAttach.getContent());
- else if(dumpAttach.getErrorContentNotSerializable()!=null)
- attachment.setContent(dumpAttach.getErrorContentNotSerializable().getBytes());
- else
- throw new MessageException("Contenuto dell'attachment con id '"+attachment.getContentId()+"' non presente ?");
-
- messaggio.getAttachments().add(attachment);
- }
- }
-
- return dumpMessaggio;
- }
-
- private void gestioneErroreDump(Throwable e) throws DumpException{
-
- if(this.properties.isDumpFallitoBloccoServiziPdD()){
- Dump.setSistemaDumpDisponibile(false);
- Dump.setMotivoMalfunzionamentoDump(e);
- try{
- this.msgDiagErroreDump.logPersonalizzato("dumpContenutiApplicativi.errore.bloccoServizi");
- }catch(Exception eMsg){
- // ignore
- }
- loggerOpenSPCoopResourcesError("Il Sistema di dump dei contenuti applicativi ha rilevato un errore "+
- "durante la registrazione di un contenuto applicativo, tutti i servizi/moduli della porta di dominio sono sospesi."+
- " Si richiede un intervento sistemistico per la risoluzione del problema e il riavvio di GovWay. "+
- "Errore rilevato: ",e);
- }
-
- if(this.properties.isDumpFallitoBloccaCooperazioneInCorso()){
- throw new DumpException(e);
- }
- }
-
- private String getLogIdTransazione() {
- return "con identificativo di transazione ["+this.idTransazione+"]";
- }
- }