Sbustamento.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.pdd.mdb;
import org.openspcoop2.core.config.PortaApplicativa;
import org.openspcoop2.core.config.PortaDelegata;
import org.openspcoop2.core.config.ServizioApplicativo;
import org.openspcoop2.core.config.constants.CostantiConfigurazione;
import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
import org.openspcoop2.core.constants.TipoPdD;
import org.openspcoop2.core.eccezione.details.DettaglioEccezione;
import org.openspcoop2.core.eccezione.details.constants.TipoEccezione;
import org.openspcoop2.core.eccezione.details.utils.XMLUtils;
import org.openspcoop2.core.id.IDPortaDelegata;
import org.openspcoop2.core.id.IDServizio;
import org.openspcoop2.core.id.IDServizioApplicativo;
import org.openspcoop2.core.id.IDSoggetto;
import org.openspcoop2.core.registry.driver.IDServizioFactory;
import org.openspcoop2.message.OpenSPCoop2Message;
import org.openspcoop2.message.OpenSPCoop2MessageFactory;
import org.openspcoop2.message.constants.MessageRole;
import org.openspcoop2.message.utils.MessageUtilities;
import org.openspcoop2.pdd.config.ClassNameProperties;
import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
import org.openspcoop2.pdd.config.OpenSPCoop2Properties;
import org.openspcoop2.pdd.config.RichiestaApplicativa;
import org.openspcoop2.pdd.config.RichiestaDelegata;
import org.openspcoop2.pdd.core.CostantiPdD;
import org.openspcoop2.pdd.core.EJBUtils;
import org.openspcoop2.pdd.core.EJBUtilsConsegnaException;
import org.openspcoop2.pdd.core.GestoreMessaggi;
import org.openspcoop2.pdd.core.PdDContext;
import org.openspcoop2.pdd.core.behaviour.Behaviour;
import org.openspcoop2.pdd.core.state.IOpenSPCoopState;
import org.openspcoop2.pdd.core.state.OpenSPCoopState;
import org.openspcoop2.pdd.core.state.OpenSPCoopStateException;
import org.openspcoop2.pdd.core.state.OpenSPCoopStateless;
import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
import org.openspcoop2.pdd.logger.MsgDiagnostico;
import org.openspcoop2.pdd.services.error.RicezioneBusteExternalErrorGenerator;
import org.openspcoop2.pdd.services.error.RicezioneContenutiApplicativiInternalErrorGenerator;
import org.openspcoop2.protocol.engine.constants.Costanti;
import org.openspcoop2.protocol.engine.driver.History;
import org.openspcoop2.protocol.engine.driver.IFiltroDuplicati;
import org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione;
import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
import org.openspcoop2.protocol.registry.RegistroServiziManager;
import org.openspcoop2.protocol.registry.RisultatoValidazione;
import org.openspcoop2.protocol.sdk.Busta;
import org.openspcoop2.protocol.sdk.Eccezione;
import org.openspcoop2.protocol.sdk.IProtocolFactory;
import org.openspcoop2.protocol.sdk.Integrazione;
import org.openspcoop2.protocol.sdk.Riscontro;
import org.openspcoop2.protocol.sdk.builder.ProprietaErroreApplicativo;
import org.openspcoop2.protocol.sdk.config.IProtocolConfiguration;
import org.openspcoop2.protocol.sdk.config.IProtocolManager;
import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
import org.openspcoop2.protocol.sdk.config.ITraduttore;
import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
import org.openspcoop2.protocol.sdk.constants.ErroreCooperazione;
import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
import org.openspcoop2.protocol.sdk.constants.ErroriCooperazione;
import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
import org.openspcoop2.protocol.sdk.constants.Inoltro;
import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
import org.openspcoop2.protocol.sdk.constants.RuoloBusta;
import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
import org.openspcoop2.protocol.sdk.state.RequestInfo;
import org.openspcoop2.utils.date.DateManager;
import org.openspcoop2.utils.date.DateUtils;
import org.openspcoop2.utils.resources.Loader;
import org.slf4j.Logger;
/**
*
* Contiene la libreria Sbustamento
*
* @author Poli Andrea (apoli@link.it)
* @author Tronci Fabio (tronci@link.it)
* @author $Author$
* @version $Rev$, $Date$
*
*/
public class Sbustamento extends GenericLib{
public static final String ID_MODULO = "Sbustamento";
/** XMLBuilder */
private RicezioneContenutiApplicativiInternalErrorGenerator generatoreErrore;
public Sbustamento(Logger log) throws GenericLibException {
super(Sbustamento.ID_MODULO, log);
inizializza();
}
@Override
protected synchronized void inizializza() throws GenericLibException {
super.inizializza();
}
@Override
public EsitoLib _onMessage(IOpenSPCoopState openspcoopstate,
RegistroServiziManager registroServiziManager,ConfigurazionePdDManager configurazionePdDManager,
MsgDiagnostico msgDiag) throws OpenSPCoopStateException {
SbustamentoMessage sbustamentoMsg = (SbustamentoMessage) openspcoopstate.getMessageLib();
EsitoLib esito = new EsitoLib();
/* PddContext */
PdDContext pddContext = sbustamentoMsg.getPddContext();
String idTransazione = PdDContext.getValue(org.openspcoop2.core.constants.Costanti.ID_TRANSAZIONE, pddContext);
RequestInfo requestInfo = (RequestInfo) pddContext.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
/* Protocol Factory */
IProtocolFactory<?> protocolFactory = null;
IProtocolVersionManager protocolManager = null;
ITraduttore traduttore = null;
try{
protocolFactory = this.protocolFactoryManager.getProtocolFactoryByName((String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
protocolManager = protocolFactory.createProtocolVersionManager(sbustamentoMsg.getRichiestaApplicativa().getProfiloGestione());
traduttore = protocolFactory.createTraduttore();
}catch(Exception e){
msgDiag.logErroreGenerico(e, "ProtocolFactory.instanziazione");
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(false);
esito.setStatoInvocazioneErroreNonGestito(e);
return esito;
}
msgDiag.setPddContext(pddContext, protocolFactory);
/* Busta e tipo di implementazione PdD con cui interoperare */
Busta bustaRichiesta = sbustamentoMsg.getBusta();
String implementazionePdDMittente = sbustamentoMsg.getImplementazionePdDSoggettoMittente();
/* Intrepretazione informazioni */
RichiestaApplicativa richiestaApplicativa = sbustamentoMsg.getRichiestaApplicativa();
if(richiestaApplicativa==null) {
msgDiag.logErroreGenerico("RichiestaApplicativa is null", "RichiestaApplicativa.checkNull");
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(false);
return esito;
}
TipoPdD tipoPdD = TipoPdD.APPLICATIVA;
if(msgDiag.getPorta()==null) {
if(richiestaApplicativa!=null && richiestaApplicativa.getIdPortaApplicativa()!=null) {
msgDiag.updatePorta(tipoPdD, richiestaApplicativa.getIdPortaApplicativa().getNome(), requestInfo);
}
}
IDServizio idServizio = richiestaApplicativa.getIDServizio();
IDSoggetto idSoggettoFruitore = richiestaApplicativa.getSoggettoFruitore();
java.util.List<Eccezione> errors = sbustamentoMsg.getErrors();
IntegrationFunctionError validazione_integrationFunctionError = sbustamentoMsg.getIntegrationFunctionErrorValidazione();
boolean isMessaggioErroreProtocollo = sbustamentoMsg.isMessaggioErroreProtocollo();
boolean bustaDiServizio = sbustamentoMsg.getIsBustaDiServizio();
IDSoggetto identitaPdD = sbustamentoMsg.getRichiestaApplicativa().getDominio();
msgDiag.setDominio(identitaPdD); // imposto anche il dominio nel msgDiag
msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_SBUSTAMENTO);
msgDiag.addKeywords(bustaRichiesta, true);
if(richiestaApplicativa.getIdentitaServizioApplicativoFruitore()!=null){
msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, richiestaApplicativa.getIdentitaServizioApplicativoFruitore());
}
msgDiag.setIdCorrelazioneApplicativa(richiestaApplicativa.getIdCorrelazioneApplicativa());
msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, richiestaApplicativa.getIdCorrelazioneApplicativa());
String profiloGestione = richiestaApplicativa.getProfiloGestione();
msgDiag.mediumDebug("Profilo di gestione ["+Sbustamento.ID_MODULO+"] della busta: "+profiloGestione);
try{
this.generatoreErrore = new RicezioneContenutiApplicativiInternalErrorGenerator(this.log, this.idModulo, requestInfo);
this.generatoreErrore.updateInformazioniCooperazione(idSoggettoFruitore, idServizio);
this.generatoreErrore.updateTipoPdD(TipoPdD.APPLICATIVA);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "RicezioneContenutiApplicativiGeneratoreErrore.instanziazione");
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(false);
esito.setStatoInvocazioneErroreNonGestito(e);
return esito;
}
/* ------------------ Inizializzo stato OpenSPCoop --------------- */
msgDiag.mediumDebug("Inizializzo stato per la gestione della richiesta...");
openspcoopstate.initResource(identitaPdD, Sbustamento.ID_MODULO,idTransazione);
registroServiziManager = registroServiziManager.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
configurazionePdDManager = configurazionePdDManager.refreshState(registroServiziManager);
msgDiag.updateState(configurazionePdDManager);
/* ------------- STATO RICHIESTA E STATO RISPOSTA ------------------------------- */
// IState statoRichiesta = openSPCoopState.getStatoRichiesta();
// IState statoRisposta = openSPCoopState.getStatoRisposta();
/* ----------------- ID RICHIESTA ---------------------------------------------- */
String idMessageRequest = openspcoopstate.getIDMessaggioSessione();
// Aggiornamento Informazioni
msgDiag.setIdMessaggioRichiesta(idMessageRequest);
msgDiag.setFruitore(idSoggettoFruitore);
msgDiag.setServizio(idServizio);
/* ------------------ Inizializzazione Contesto di gestione --------------- */
msgDiag.mediumDebug("Inizializzo contesto per la gestione...");
// EJBUtils (per eventuali errori)
EJBUtils ejbUtils = null;
try{
ejbUtils = new EJBUtils(identitaPdD,tipoPdD,Sbustamento.ID_MODULO,idMessageRequest, idMessageRequest,Costanti.INBOX,openspcoopstate,msgDiag,false,
sbustamentoMsg.getImplementazionePdDSoggettoMittente(),
sbustamentoMsg.getImplementazionePdDSoggettoDestinatario(),
profiloGestione,pddContext);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "EJBUtils.new");
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(false);
esito.setStatoInvocazioneErroreNonGestito(e);
return esito;
}
try{
RicezioneBusteExternalErrorGenerator generatoreErrorePA = new RicezioneBusteExternalErrorGenerator(this.log, this.idModulo, requestInfo, openspcoopstate.getStatoRichiesta());
generatoreErrorePA.updateInformazioniCooperazione(idSoggettoFruitore, idServizio);
generatoreErrorePA.updateInformazioniCooperazione(richiestaApplicativa.getIdentitaServizioApplicativoFruitore());
generatoreErrorePA.updateTipoPdD(TipoPdD.APPLICATIVA);
ejbUtils.setGeneratoreErrorePortaApplicativa(generatoreErrorePA);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "RicezioneBusteExternalErrorGenerator.instanziazione");
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(false);
esito.setStatoInvocazioneErroreNonGestito(e);
return esito;
}
// Oneway versione 11
boolean oneWayVersione11 = sbustamentoMsg.isOneWayVersione11();
ejbUtils.setOneWayVersione11(oneWayVersione11);
ejbUtils.setPortaDiTipoStateless_esclusoOneWay11(sbustamentoMsg.isStateless());
// Gestori funzionalita'
ProfiloDiCollaborazione profiloCollaborazione = null;
try{
profiloCollaborazione = new ProfiloDiCollaborazione(openspcoopstate.getStatoRichiesta(),protocolFactory);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "ProfiloDiCollaborazione.new");
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(false);
esito.setStatoInvocazioneErroreNonGestito(e);
return esito;
}
History historyBuste = new History(openspcoopstate.getStatoRichiesta());
RepositoryBuste repositoryBuste = new RepositoryBuste(openspcoopstate.getStatoRichiesta(), true,protocolFactory);
String ricevutaAsincrona = null;
// Gestore Messaggi
GestoreMessaggi msgRequest = new GestoreMessaggi(openspcoopstate,true, idMessageRequest,Costanti.INBOX,msgDiag,pddContext);
GestoreMessaggi msgResponse = null; // Evenutuale busta spedita indietro contenente riscontri...
msgRequest.setOneWayVersione11(oneWayVersione11);
// Informazioni di integrazione
String servizioApplicativoFruitore = richiestaApplicativa.getIdentitaServizioApplicativoFruitore();
String idCorrelazioneApplicativa = richiestaApplicativa.getIdCorrelazioneApplicativa();
// Modalita' gestione risposta (Sincrona/Fault/Ricevute...)
// Per i profili diversi dal sincrono e' possibile impostare dove far ritornare l'errore
boolean newConnectionForResponse = false;
if( (org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())==false) &&
(sbustamentoMsg.isStateless()==false) ) {
newConnectionForResponse = configurazionePdDManager.newConnectionForResponse();
}
ejbUtils.setReplyOnNewConnection(newConnectionForResponse);
// Gestione indirizzo telematico
boolean gestioneIndirizzoTelematico = false;
if(sbustamentoMsg.isStateless()==false){
gestioneIndirizzoTelematico = configurazionePdDManager.isUtilizzoIndirizzoTelematico();
}
ejbUtils.setUtilizzoIndirizzoTelematico(gestioneIndirizzoTelematico);
// Indicazione se deve essere spedito lo sblocco al moduloRicezione
// non deve essere spedito SOLO se il modulo ha gia' terminato di gestire.
// Succede se:
// - e' abilitata la gestione dell'indirizzo telematico e la busta lo possiede nel mittente
// - profilo della busta non è sincrono e le risposte vengono mandate su di una nuova connessione
boolean sendSbloccoRicezioneBuste = true;
if ( configurazionePdDManager.isUtilizzoIndirizzoTelematico() && bustaRichiesta.getIndirizzoMittente()!=null &&
(sbustamentoMsg.isStateless()==false) ){
sendSbloccoRicezioneBuste = false;
}else if( newConnectionForResponse ) {
sendSbloccoRicezioneBuste = false;
}
// Ruolo Busta ricevuta
RuoloBusta ruoloBustaRicevuta = sbustamentoMsg.getRuoloBustaRicevuta();
// Punto di inizio per la transazione.
Busta bustaHTTPReply = null;
try{
boolean ricezioneRiscontri = false;
switch (protocolManager.getConsegnaAffidabile(bustaRichiesta)) {
case ABILITATA:
ricezioneRiscontri = true;
break;
case DISABILITATA:
ricezioneRiscontri = false;
break;
default:
ricezioneRiscontri = this.propertiesReader.isGestioneRiscontri(implementazionePdDMittente);
break;
}
boolean consegnaAffidabile = false;
switch (protocolManager.getConsegnaAffidabile(bustaRichiesta)) {
case ABILITATA:
consegnaAffidabile = true;
break;
case DISABILITATA:
consegnaAffidabile = false;
break;
default:
consegnaAffidabile = this.propertiesReader.isGestioneRiscontri(implementazionePdDMittente) && bustaRichiesta.isConfermaRicezione();
break;
}
boolean idCollaborazione = false;
switch (protocolManager.getCollaborazione(bustaRichiesta)) {
case ABILITATA:
idCollaborazione = true;
break;
case DISABILITATA:
idCollaborazione = false;
break;
default:
idCollaborazione = this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente) && (bustaRichiesta.getCollaborazione()!=null);
break;
}
boolean consegnaInOrdine = false;
switch (protocolManager.getConsegnaInOrdine(bustaRichiesta)) {
case ABILITATA:
consegnaInOrdine = true;
break;
case DISABILITATA:
consegnaInOrdine = false;
break;
default:
boolean gestioneConsegnaInOrdineAbilitata = this.propertiesReader.isGestioneRiscontri(implementazionePdDMittente) &&
this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente) &&
this.propertiesReader.isGestioneConsegnaInOrdine(implementazionePdDMittente);
consegnaInOrdine = gestioneConsegnaInOrdineAbilitata &&
bustaRichiesta.getSequenza()!=-1;
break;
}
boolean imbustamentoFiltroDuplicatiAbilitato = false;
switch (protocolManager.getFiltroDuplicati(bustaRichiesta)) {
case ABILITATA:
imbustamentoFiltroDuplicatiAbilitato = true;
break;
case DISABILITATA:
imbustamentoFiltroDuplicatiAbilitato = false;
break;
default:
imbustamentoFiltroDuplicatiAbilitato = (Inoltro.SENZA_DUPLICATI.equals(bustaRichiesta.getInoltro())) ||
(this.propertiesReader.isCheckFromRegistroFiltroDuplicatiAbilitato(implementazionePdDMittente) && sbustamentoMsg.isFiltroDuplicatiRichiestoAccordo());
break;
}
// ------------- Controllo funzionalita di protocollo richieste siano compatibili con il protocollo -----------------------------
try{
// NOTA: Usare getIntegrationServiceBinding poichè le funzionalità si riferiscono al tipo di integrazione scelta
IProtocolConfiguration protocolConfiguration = protocolFactory.createProtocolConfiguration();
if(bustaRichiesta.getProfiloDiCollaborazione()!=null &&
!org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.UNKNOWN.equals(bustaRichiesta.getProfiloDiCollaborazione())){
if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),bustaRichiesta.getProfiloDiCollaborazione())==false){
throw new Exception("Profilo di Collaborazione ["+bustaRichiesta.getProfiloDiCollaborazione().getEngineValue()+"]");
}
}
if(imbustamentoFiltroDuplicatiAbilitato){
if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.FILTRO_DUPLICATI)==false){
throw new Exception(FunzionalitaProtocollo.FILTRO_DUPLICATI.getEngineValue());
}
}
if(consegnaAffidabile){
if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.CONFERMA_RICEZIONE)==false){
throw new Exception(FunzionalitaProtocollo.CONFERMA_RICEZIONE.getEngineValue());
}
}
if(idCollaborazione){
if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.COLLABORAZIONE)==false){
throw new Exception(FunzionalitaProtocollo.COLLABORAZIONE.getEngineValue());
}
}
if(consegnaInOrdine){
if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.CONSEGNA_IN_ORDINE)==false){
throw new Exception(FunzionalitaProtocollo.CONSEGNA_IN_ORDINE.getEngineValue());
}
}
}catch(Exception e){
msgDiag.addKeywordErroreProcessamento(e);
msgDiag.logPersonalizzato("protocolli.funzionalita.unsupported");
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL);
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_439_FUNZIONALITA_NOT_SUPPORTED_BY_PROTOCOL.
getErrore439_FunzionalitaNotSupportedByProtocol(e.getMessage(), protocolFactory),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("protocolli.funzionalita.unsupported"));
return esito;
}
/* -------------- Validazione: Gestione messaggio Errore Protocollo ----------------- */
if(isMessaggioErroreProtocollo){
msgDiag.mediumDebug("Gestione messaggio errore protocollo...");
boolean msgErroreProtocolloValido = true;
// validazione
if(configurazionePdDManager.getTipoValidazione(implementazionePdDMittente).equals(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO) == false){
if(errors.size() != 0){
// BUSTA ERRORE MALFORMATA :
// Il seguente codice viene eseguito solo se la modalita' di validazione
// della busta e' "Warning Only" o "active"
// Registrazione eccezioni riscontrate dalla validazione della busta
StringBuilder eccBuffer = new StringBuilder();
for(int k = 0; k < errors.size() ; k++){
Eccezione er = errors.get(k);
if(k>0)
eccBuffer.append("\n");
eccBuffer.append(er.toString(protocolFactory));
}
msgDiag.addKeyword(CostantiPdD.KEY_NUMERO_ECCEZIONI, errors.size()+"");
msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, eccBuffer.toString());
msgDiag.logPersonalizzato("validazioneBustaErrore.listaEccezioniMalformata");
// Il lavoro deve essere terminato solo in caso di Modalita Active
if(configurazionePdDManager.getTipoValidazione(implementazionePdDMittente).equals(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO) == true){
msgErroreProtocolloValido=false;
}
}
}// -- end if not active
if(msgErroreProtocolloValido){
// Registrazione eccezioni portate nella busta
if(bustaRichiesta.sizeListaEccezioni()>0){
msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, bustaRichiesta.toStringListaEccezioni(protocolFactory));
msgDiag.addKeyword(CostantiPdD.KEY_NUMERO_ECCEZIONI, bustaRichiesta.sizeListaEccezioni()+"");
msgDiag.logPersonalizzato("ricezioneBustaErrore");
}
}
DettaglioEccezione dettaglioEccezione = sbustamentoMsg.getDettaglioEccezione();
if(dettaglioEccezione!=null){
msgDiag.addKeyword(CostantiPdD.KEY_OPENSPCOOP2_DETAILS, XMLUtils.toString(dettaglioEccezione));
msgDiag.logPersonalizzato("ricezioneBustaErroreDetails");
}
if(sendSbloccoRicezioneBuste){
msgDiag.mediumDebug("Invio messaggio di sblocco a RicezioneBuste...");
msgResponse = ejbUtils.sendSbloccoRicezioneBuste(richiestaApplicativa.getIdModuloInAttesa());
}
// spedizioneErrore (se la validazione e' disattivata)
msgDiag.mediumDebug("Invio eventuale messaggio di errore al servizio applicativo (gestione errore)...");
Eccezione eccezioneDaInviareServizioApplicativo =
Eccezione.getEccezioneValidazione(ErroriCooperazione.ERRORE_GENERICO_PROTOCOLLO_NON_CORRETTO.getErroreCooperazione(), protocolFactory);
ErroreIntegrazione erroreIntegrazioneDaInviareServizioApplicativo = null;
if(msgErroreProtocolloValido){
if(bustaRichiesta.sizeListaEccezioni()>1){
StringBuilder bfDescrizione = new StringBuilder();
for(int k=0; k<bustaRichiesta.sizeListaEccezioni();k++){
Eccezione eccLista = bustaRichiesta.getEccezione(k);
if(eccLista.getDescrizione(protocolFactory)!=null)
bfDescrizione.append("["+traduttore.toString(eccLista.getCodiceEccezione(),eccLista.getSubCodiceEccezione())+"] "+eccLista.getDescrizione(protocolFactory)+"\n");
}
if(bfDescrizione.length()>0)
eccezioneDaInviareServizioApplicativo.setDescrizione(bfDescrizione.toString());
} else {
if(bustaRichiesta.sizeListaEccezioni()==1){
eccezioneDaInviareServizioApplicativo = bustaRichiesta.getEccezione(0);
}else{
if(dettaglioEccezione!=null && dettaglioEccezione.getExceptions()!=null && dettaglioEccezione.getExceptions().sizeExceptionList()>0){
org.openspcoop2.core.eccezione.details.Eccezione e = dettaglioEccezione.getExceptions().getException(0);
if(TipoEccezione.PROTOCOL.equals(e.getType())){
ErroreCooperazione msgErroreCooperazione =
new ErroreCooperazione(e.getDescription(), traduttore.toCodiceErroreCooperazione(e.getCode()));
eccezioneDaInviareServizioApplicativo = new Eccezione(msgErroreCooperazione, false, Sbustamento.ID_MODULO, protocolFactory);
}else{
// erroreIntegrazioneDaInviareServizioApplicativo =
// new ErroreIntegrazione(e.getDescrizione(), traduttore.toCodiceErroreIntegrazione(e.getCodiceAAA(), propertiesReader.getProprietaGestioneErrorePD(protocolManager).getFaultPrefixCode()));
// Se e' arrivato un details di errore di integrazione, comunque genero una busta di errore di processamento, visto che di fatto ho ricevuto questa.
eccezioneDaInviareServizioApplicativo = Eccezione.
getEccezioneProcessamento(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreProcessamento(e.getDescription()), protocolFactory);
}
}else{
eccezioneDaInviareServizioApplicativo =
new Eccezione(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreCooperazione(),
false, Sbustamento.ID_MODULO, protocolFactory);
}
}
}
}
else{
if(errors.size()>1){
StringBuilder bfDescrizione = new StringBuilder();
for(int k=0; k<errors.size();k++){
Eccezione error = errors.get(k);
if(error.getDescrizione(protocolFactory)!=null)
bfDescrizione.append("["+traduttore.toString(error.getCodiceEccezione(),error.getSubCodiceEccezione())+"] "+error.getDescrizione(protocolFactory)+"\n");
}
if(bfDescrizione.length()>0)
eccezioneDaInviareServizioApplicativo.setDescrizione(bfDescrizione.toString());
}else{
eccezioneDaInviareServizioApplicativo = errors.get(0);
}
}
IntegrationFunctionError integrationFunctionError = validazione_integrationFunctionError;
if(integrationFunctionError==null) {
if( ruoloBustaRicevuta!=null && RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
integrationFunctionError = IntegrationFunctionError.INTERNAL_RESPONSE_ERROR;
}
else {
integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
}
}
gestioneErroreProtocollo(configurazionePdDManager,ejbUtils,profiloCollaborazione,repositoryBuste,
bustaRichiesta,identitaPdD,eccezioneDaInviareServizioApplicativo,erroreIntegrazioneDaInviareServizioApplicativo,
new IDSoggetto(bustaRichiesta.getTipoMittente(),bustaRichiesta.getMittente()),
dettaglioEccezione, protocolFactory, protocolManager, pddContext, requestInfo,
integrationFunctionError);
// Commit modifiche
openspcoopstate.commit();
msgDiag.mediumDebug("Rilascio connessione...");
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"RicevutoMsgBustaErrore");
return esito;
}
/* -------------- Validazione: Gestione messaggio di protocollo ----------------- */
else if(isMessaggioErroreProtocollo == false){
if(configurazionePdDManager.getTipoValidazione(implementazionePdDMittente).equals(CostantiConfigurazione.STATO_CON_WARNING_DISABILITATO) == false){
// Redirigo Errori presenti nella Busta
boolean validazioneConErrori = (errors.size() > 0);
if( protocolManager.isIgnoraEccezioniLivelloNonGrave() || (this.propertiesReader.ignoraEccezioniNonGravi_Validazione())){
validazioneConErrori = Busta.containsEccezioniGravi(errors);
}
if(validazioneConErrori){
msgDiag.mediumDebug("Gestione messaggio di protocollo che non ha superato la validazione...");
// Registrazione eccezioni riscontrate dalla validazione della busta
boolean mittenteRegistrato = true;
StringBuilder eccBuffer = new StringBuilder();
java.util.List<Eccezione> errorsClone = new java.util.ArrayList<Eccezione>();
for(int k = 0; k < errors.size() ; k++){
Eccezione er = errors.get(k);
errorsClone.add(er);
if(k>0)
eccBuffer.append("\n");
eccBuffer.append(er.toString(protocolFactory));
if(CodiceErroreCooperazione.isEccezioneMittente(er.getCodiceEccezione())){
mittenteRegistrato = false;
}
}
// Registrazione degli errori effettuata solo in caso la modalita di Validazione
// della busta sia "Warning Only" o "active"
msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, eccBuffer.toString());
msgDiag.addKeyword(CostantiPdD.KEY_NUMERO_ECCEZIONI, errors.size()+"");
msgDiag.logPersonalizzato("validazioneBusta.bustaNonCorretta");
// Spedizione BustaErrore contenente gli errori riscontrati, solo se
// la modalita di validazione della busta e' "active"
// e il Mittente e' comunque conosciuto.
if( configurazionePdDManager.getTipoValidazione(implementazionePdDMittente).equals(CostantiConfigurazione.STATO_CON_WARNING_ABILITATO) == true) {
// bustaOriginale per gestione errore
Busta bustaNonValida = bustaRichiesta.newInstance();
// Spedisco un Errore ad un mittente conosciuto...
ejbUtils.setRollbackRichiestaInCasoErrore(false); // viene effettuato da gestioneErrore
if(mittenteRegistrato){
msgDiag.mediumDebug("Invio segnalazione di errore ...");
IntegrationFunctionError integrationFunctionError = validazione_integrationFunctionError;
if(integrationFunctionError==null) {
if( ruoloBustaRicevuta!=null && RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
integrationFunctionError = IntegrationFunctionError.INVALID_INTEROPERABILITY_PROFILE_RESPONSE;
}
else {
integrationFunctionError = IntegrationFunctionError.INVALID_INTEROPERABILITY_PROFILE_REQUEST;
}
}
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(integrationFunctionError);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,errorsClone,
idCorrelazioneApplicativa,null,servizioApplicativoFruitore);
}
else{
if(sendSbloccoRicezioneBuste){
msgDiag.mediumDebug("Invio messaggio di sblocco a RicezioneBuste...");
// se il mittente non e' conosciuto sblocco solo Ricezione
msgResponse = ejbUtils.sendSbloccoRicezioneBuste(richiestaApplicativa.getIdModuloInAttesa());
}
}
ejbUtils.setRollbackRichiestaInCasoErrore(true); // viene effettuato da gestioneErrore
Eccezione eccezioneDaInviareServizioApplicativo = null;
if(errors.size()>1){
eccezioneDaInviareServizioApplicativo =
Eccezione.getEccezioneValidazione(ErroriCooperazione.ERRORE_GENERICO_PROTOCOLLO_NON_CORRETTO.getErroreCooperazione(), protocolFactory);
StringBuilder bfDescrizione = new StringBuilder();
for(int k=0; k<errors.size();k++){
Eccezione error = errors.get(k);
if(error.getDescrizione(protocolFactory)!=null)
bfDescrizione.append("["+traduttore.toString(error.getCodiceEccezione(),error.getSubCodiceEccezione())+"] "+error.getDescrizione(protocolFactory)+"\n");
}
if(bfDescrizione.length()>0)
eccezioneDaInviareServizioApplicativo.setDescrizione(bfDescrizione.toString());
}else{
eccezioneDaInviareServizioApplicativo = errors.get(0);
}
// GESTIONE ERRORE INTERNO
msgDiag.mediumDebug("Invio eventuale messaggio di errore al servizio applicativo (gestione errore)...");
IntegrationFunctionError integrationFunctionError = validazione_integrationFunctionError;
if(integrationFunctionError==null) {
if( ruoloBustaRicevuta!=null && RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
integrationFunctionError = IntegrationFunctionError.INTERNAL_RESPONSE_ERROR;
}
else {
integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
}
}
if(validazione_integrationFunctionError!=null) {
integrationFunctionError = validazione_integrationFunctionError;
}
gestioneErroreProtocollo(configurazionePdDManager, ejbUtils, profiloCollaborazione, repositoryBuste,
bustaNonValida, identitaPdD, eccezioneDaInviareServizioApplicativo,null,
identitaPdD, null, protocolFactory, protocolManager, pddContext, requestInfo,
integrationFunctionError);
// Commit modifiche
openspcoopstate.commit();
msgDiag.mediumDebug("Rilascio connessione...");
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("validazioneBusta.bustaNonCorretta"));
return esito;
}
}
}
}
/* Stampa dei messaggi di errore non GRAVI (frammento di codice raggiunto SOLO se profilo=LineeGuida1.1) ---------------- */
// Stampa di eventuali eccezioni NON GRAVI presenti nella busta
if( (bustaRichiesta.containsEccezioniGravi()==false) && (bustaRichiesta.sizeListaEccezioni()>0) ){
msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, bustaRichiesta.toStringListaEccezioni(protocolFactory));
msgDiag.logPersonalizzato("ricezioneBusta.eccezioniNonGravi");
}
// Stampa di eventuali eccezioni NON GRAVI venute fuori durante la validazione della busta
if( (Busta.containsEccezioniGravi(errors)==false) && (errors.size()>0) ){
msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, Busta.toStringListaEccezioni(errors, protocolFactory));
msgDiag.addKeyword(CostantiPdD.KEY_NUMERO_ECCEZIONI, errors.size()+"" );
msgDiag.logPersonalizzato("validazioneBusta.eccezioniNonGravi");
}
/* ------ Ricezione riscontri per il NAL (deve essere la prima attivita', poiche' effettua commit JDBC) -------- */
if(ricezioneRiscontri){
if(bustaRichiesta.sizeListaRiscontri() > 0){
for(int i=0;i<bustaRichiesta.sizeListaRiscontri();i++){
Riscontro r = bustaRichiesta.getRiscontro(i);
msgDiag.addKeyword(CostantiPdD.KEY_ID_BUSTA_RISCONTRATA, r.getID());
msgDiag.addKeyword(CostantiPdD.KEY_DATA_RISCONTRO, r.getOraRegistrazione().toString());
msgDiag.logPersonalizzato("ricezioneRiscontro");
try{
GestoreMessaggi msgRiscontrato = new GestoreMessaggi(openspcoopstate,true, r.getID(),Costanti.OUTBOX,msgDiag,pddContext);
msgRiscontrato.validateAndDeleteMsgOneWayRiscontrato();
}catch(Exception e){
msgDiag.logErroreGenerico(e, "msgRiscontrato.validateAndDeleteMsgOneWayRiscontrato("+r.getID()+")");
}
}
}
}
/* -------------- Controllo esistenza soggetto destinatario ------------------ */
msgDiag.mediumDebug("Controllo appartenenza Destinazione Busta (controllo esistenza soggetto)...");
boolean existsSoggetto = false;
try{
existsSoggetto = configurazionePdDManager.existsSoggetto(idServizio.getSoggettoErogatore(), requestInfo);
}catch(Exception e){
if(idServizio!=null && idServizio.getSoggettoErogatore()!=null)
msgDiag.logErroreGenerico(e,"existsSoggetto("+idServizio.getSoggettoErogatore().toString()+")");
else
msgDiag.logErroreGenerico(e,"existsSoggetto()");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
"existsSoggetto()");
return esito;
}
boolean isSoggettoVirtuale = configurazionePdDManager.isSoggettoVirtuale(idServizio.getSoggettoErogatore(), requestInfo);
if(!existsSoggetto && !isSoggettoVirtuale){
msgDiag.logPersonalizzato("soggettoDestinatarioNonGestito");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_451_SOGGETTO_INESISTENTE.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("soggettoDestinatarioNonGestito"));
return esito;
}
/* -------------------
* Controllo se la busta porta Dati in caso ad es. di riscontri ... arrivera' una busta senza dati,
e senza profilo di collaborazione. o comunque non devono essere considerati --------------------- */
if(bustaDiServizio == true) {
msgDiag.logPersonalizzato("ricezioneBustaServizio");
// Send Sblocco a RicezioneBuste
if(sendSbloccoRicezioneBuste){
msgResponse = ejbUtils.sendSbloccoRicezioneBuste(richiestaApplicativa.getIdModuloInAttesa());
}
ejbUtils.releaseInboxMessage(false);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("ricezioneBustaServizio"));
return esito;
}
/* ------------
* Dichiarazione Busta per HTTP Reply, utilizzata SOLO se il profilo e' asincrono o oneway.
* Contiene la dichiarazione di eventuali:
* 1) Riscontri da ritornare
* 2) Ricevute da ritornare
* ------------- */
// Variabile che sara' settata a true se si verifica una situazione in cui nella busta HTTPReply
// vengono impostati parametri di ritorno (ricevute,riscontri.....)
boolean returnProtocolReply = false;
TipoOraRegistrazione tipoOraRegistrazione = this.propertiesReader.getTipoTempoBusta(implementazionePdDMittente);
bustaHTTPReply = bustaRichiesta.invertiBusta(tipoOraRegistrazione,protocolFactory.createTraduttore().toString(tipoOraRegistrazione));
/* ------------ Check funzionalita' richieste nel registro dei servizi che combacino con quelle presente nella busta ------------- */
// Profilo di collaborazione: controllato durante la validazione
// Filtro duplicati: controllato dal blocco di codice seguente, e casomai forzato
// Consegna in ordine: se la busta non la possiede, ma e' richiesta viene sollevata una eccezione
// Conferma ricezione: se la busta non la possiede, ma e' richiesta viene sollevata una eccezione
if( org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione()) ){
// ConfermaRicezione check
if((this.propertiesReader.isCheckFromRegistroConfermaRicezioneAbilitato(implementazionePdDMittente) && sbustamentoMsg.isConfermaRicezioneRichiestoAccordo() &&
(bustaRichiesta.isConfermaRicezione()==false)) && !consegnaAffidabile){
msgDiag.logPersonalizzato("funzionalitaRichiestaAccordo.confermaRicezioneNonPresente");
Eccezione e = Eccezione.getEccezioneValidazione(ErroriCooperazione.PROFILO_TRASMISSIONE_CONFERMA_RICEZIONE_NON_PRESENTE.getErroreCooperazione(),protocolFactory);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,e,
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("funzionalitaRichiestaAccordo.confermaRicezioneNonPresente"));
return esito;
}
if((this.propertiesReader.isCheckFromRegistroConsegnaInOrdineAbilitato(implementazionePdDMittente) && sbustamentoMsg.isConsegnaOrdineRichiestoAccordo()) &&
(bustaRichiesta.getSequenza()<0) ){
msgDiag.logPersonalizzato("funzionalitaRichiestaAccordo.consegnaInOrdineNonPresente");
Eccezione e = Eccezione.getEccezioneValidazione(ErroriCooperazione.CONSEGNA_IN_ORDINE_NON_GESTIBILE.getErroreCooperazione(),protocolFactory);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,e,
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("funzionalitaRichiestaAccordo.consegnaInOrdineNonPresente"));
return esito;
}
}
/* ------------ Gestione Duplicati ------------- */
boolean checkDuplicato = imbustamentoFiltroDuplicatiAbilitato ;
if(checkDuplicato){
/*
* 1) duplicato in caso di oneWay: se confermaRicezione=true e la gestione dei riscontri e' attiva, re-invio un riscontro
* 1b) duplicato in caso di oneWay: se confermaRicezione=false o cmq la gestione dei riscontri non è attiva, genero Errore se indicato da file property, altrimenti ritorno http 202
* 2) duplicati in caso sincrono: genero un msg Errore
* 3) duplicati in caso asincrono: rigenero la ricevuta
*/
try{
// Istanzio gestore filtro duplicati
IFiltroDuplicati gestoreFiltroDuplicati = getGestoreFiltroDuplicati(this.propertiesReader, this.loader,
openspcoopstate, pddContext, historyBuste, repositoryBuste, oneWayVersione11);
boolean oldGestioneConnessione = false;
boolean rinegozia = false;
if(gestoreFiltroDuplicati.releaseRuntimeResourceBeforeCheck() && !openspcoopstate.resourceReleased()) {
rinegozia = true;
// System.out.println("[RICHIESTA] rilascio!!");
msgDiag.mediumDebug("Rilascio connessione al database prima di verificare se la richiesta è duplicata ...");
oldGestioneConnessione = ((OpenSPCoopState)openspcoopstate).isUseConnection();
((OpenSPCoopState)openspcoopstate).setUseConnection(true);
openspcoopstate.commit();
openspcoopstate.releaseResource();
// System.out.println("[RICHIESTA] rilasciata: "+
// (((org.openspcoop2.pdd.core.state.OpenSPCoopState)openspcoopstate).getConnectionDB()==null || ((OpenSPCoopState)openspcoopstate).getConnectionDB().isClosed()));
}
boolean initConnectionForDuplicate = false;
if(!gestoreFiltroDuplicati.releaseRuntimeResourceBeforeCheck() && openspcoopstate.resourceReleased()) {
// il vecchio engine che verifica il filtro duplicati ha bisogno della connessione
// inizializzo
((OpenSPCoopState)openspcoopstate).setUseConnection(true);
openspcoopstate.initResource(identitaPdD, this.idModulo, idTransazione);
historyBuste.updateState(openspcoopstate.getStatoRichiesta());
repositoryBuste.updateState(openspcoopstate.getStatoRichiesta());
profiloCollaborazione.updateState(openspcoopstate.getStatoRichiesta());
ejbUtils.updateOpenSPCoopState(openspcoopstate);
initConnectionForDuplicate = true;
}
boolean bustaDuplicata = gestoreFiltroDuplicati.isDuplicata(protocolFactory, bustaRichiesta.getID());
// BUSTA GIA' PRECEDENTEMENTE RICEVUTA
if (bustaDuplicata){
pddContext.addObject(org.openspcoop2.core.constants.Costanti.RICHIESTA_DUPLICATA, "true");
// Aggiorno duplicati
msgDiag.logPersonalizzato("ricezioneBustaDuplicata.count");
gestoreFiltroDuplicati.incrementaNumeroDuplicati(protocolFactory,bustaRichiesta.getID());
msgDiag.logPersonalizzato("ricezioneBustaDuplicata");
}else {
// REGISTRAZIONE BUSTA RICEVUTA NELL'HISTORY
gestoreFiltroDuplicati.registraBusta(protocolFactory, bustaRichiesta);
msgDiag.logPersonalizzato("ricezioneBusta.registrazionePerFiltroDuplicati");
}
if(gestoreFiltroDuplicati.releaseRuntimeResourceBeforeCheck() && rinegozia) {
// System.out.println("[RICHIESTA] rinegozio!!");
msgDiag.mediumDebug("Rinegozio connessione dopo la verifica di richiesta duplicata ...");
try{
openspcoopstate.updateResource(idTransazione);
((OpenSPCoopState)openspcoopstate).setUseConnection(oldGestioneConnessione);
// // Aggiorno risorse
// ejbUtils.updateOpenSPCoopState(openspcoopstate);
// msgRequest.updateOpenSPCoopState(openspcoopstate);
// System.out.println("[RICHIESTA] rinegoziata: "+
// (((org.openspcoop2.pdd.core.state.OpenSPCoopState)openspcoopstate).getConnectionDB()!=null && !((OpenSPCoopState)openspcoopstate).getConnectionDB().isClosed()));
}catch(Exception e){
throw new Exception("Rinegoziazione connessione dopo la verifica di richiesta duplicata fallita: "+e.getMessage(),e);
}
}
if(!gestoreFiltroDuplicati.releaseRuntimeResourceBeforeCheck() && initConnectionForDuplicate) {
openspcoopstate.commit();
}
if (bustaDuplicata){
// 1)
if( org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione()) && consegnaAffidabile){
//System.out.println("CASO 1");
msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_BUSTE,"generazioneRiscontro");
// Costruisco riscontro da re-inviare
Riscontro r = new Riscontro();
r.setID(bustaRichiesta.getID());
r.setOraRegistrazione(bustaHTTPReply.getOraRegistrazione());
r.setTipoOraRegistrazione(this.propertiesReader.getTipoTempoBusta(implementazionePdDMittente));
bustaHTTPReply.setTipoServizioRichiedenteBustaDiServizio(bustaRichiesta.getTipoServizio());
bustaHTTPReply.setServizioRichiedenteBustaDiServizio(bustaRichiesta.getServizio());
bustaHTTPReply.setVersioneServizioRichiedenteBustaDiServizio(bustaRichiesta.getVersioneServizio());
bustaHTTPReply.setAzioneRichiedenteBustaDiServizio(bustaRichiesta.getAzione());
bustaHTTPReply.addRiscontro(r);
// Re-invio Riscontro
msgResponse = ejbUtils.buildAndSendBustaRisposta(richiestaApplicativa.getIdModuloInAttesa(),bustaHTTPReply,
MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
requestInfo.getProtocolRequestMessageType(),MessageRole.RESPONSE),profiloGestione,
idCorrelazioneApplicativa,servizioApplicativoFruitore);
}
// 1b)
else if( org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione()) &&
( (this.propertiesReader.isGestioneRiscontri(implementazionePdDMittente)==false) || (bustaRichiesta.isConfermaRicezione()==false) ) &&
( protocolManager.isGenerazioneErroreMessaggioOnewayDuplicato() || this.propertiesReader.isGenerazioneErroreProtocolloFiltroDuplicati(implementazionePdDMittente))){
//System.out.println("CASO 1b");
ejbUtils.setRollbackRichiestaInCasoErrore_rollbackHistory(false); // non devo cancellare l'history
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.CONFLICT);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
Eccezione.getEccezioneValidazione(ErroriCooperazione.IDENTIFICATIVO_MESSAGGIO_GIA_PROCESSATO.getErroreCooperazione(),protocolFactory),
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("ricezioneBustaDuplicata"));
return esito;
}
// 2)
else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
//System.out.println("CASO 2");
ejbUtils.setRollbackRichiestaInCasoErrore_rollbackHistory(false); // non devo cancellare l'history
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.CONFLICT);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
Eccezione.getEccezioneValidazione(ErroriCooperazione.IDENTIFICATIVO_MESSAGGIO_GIA_PROCESSATO.getErroreCooperazione(),protocolFactory),
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("ricezioneBustaDuplicata"));
return esito;
}
// 3
else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione()) ||
org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
String ricevuta = null;
if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
//System.out.println("CASO 3 Asincrono Simmetrico");
// Asincrono Simmetrico
boolean ricevutaAbilitata = true; // Default SICA
try{
if( RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
msgDiag.mediumDebug("Lettura Porta Delegata ...");
String idAsincronoCorrelazioneRichiesta = bustaRichiesta.getRiferimentoMessaggio();
if(idAsincronoCorrelazioneRichiesta==null){
idAsincronoCorrelazioneRichiesta = bustaRichiesta.getCollaborazione();
}
Integrazione integrazione = repositoryBuste.getInfoIntegrazioneFromOutBox(idAsincronoCorrelazioneRichiesta);
IDPortaDelegata idPD = new IDPortaDelegata();
idPD.setNome(integrazione.getNomePorta());
PortaDelegata pd = configurazionePdDManager.getPortaDelegataSafeMethod(idPD, requestInfo);
ricevutaAbilitata = configurazionePdDManager.ricevutaAsincronaSimmetricaAbilitata(pd);
}else{
msgDiag.mediumDebug("Lettura Porta Applicativa ...");
PortaApplicativa pa = configurazionePdDManager.getPortaApplicativaSafeMethod(richiestaApplicativa.getIdPortaApplicativa(), requestInfo);
ricevutaAbilitata = configurazionePdDManager.ricevutaAsincronaSimmetricaAbilitata(pa);
}
}catch(Exception e){
this.log.error("Errore durante l'identificazione della Porta (Delegata/Applicativa) associata alla busta: "+e.getMessage(),e);
}
if(ricevutaAbilitata==false){
if(bustaRichiesta.getRiferimentoMessaggio()==null)
ricevuta = "ricevuta di una richiesta asincrona simmetrica";
else if( RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
ricevuta = "ricevuta di una risposta asincrona simmetrica";
}
}else{
//System.out.println("CASO 3 Asincrono Simmetrico con ricevuta sincrona");
ejbUtils.setRollbackRichiestaInCasoErrore_rollbackHistory(false); // non devo cancellare l'history
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.CONFLICT);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
Eccezione.getEccezioneValidazione(ErroriCooperazione.IDENTIFICATIVO_MESSAGGIO_GIA_PROCESSATO.getErroreCooperazione(),protocolFactory),
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("ricezioneBustaDuplicata"));
return esito;
}
}else{
//System.out.println("CASO 3 Asincrono Asimmetrico");
// Asincrono Asimmetrico
msgDiag.mediumDebug("Lettura Porta Applicativa ...");
PortaApplicativa pa = configurazionePdDManager.getPortaApplicativaSafeMethod(richiestaApplicativa.getIdPortaApplicativa(), requestInfo);
if(configurazionePdDManager.ricevutaAsincronaAsimmetricaAbilitata(pa)==false){
if(bustaRichiesta.getRiferimentoMessaggio()==null){
ricevuta = "ricevuta di una richiesta asincrona asimmetrica";
// ServizioCorrelato da impostare nella ricevuta asincrona
}else if( RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString()) ){
ricevuta = "ricevuta di una risposta asincrona asimmetrica";
}
}else{
//System.out.println("CASO 3 Asincrono Asimmetrico con ricevuta sincrona");
ejbUtils.setRollbackRichiestaInCasoErrore_rollbackHistory(false); // non devo cancellare l'history
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.CONFLICT);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
Eccezione.getEccezioneValidazione(ErroriCooperazione.IDENTIFICATIVO_MESSAGGIO_GIA_PROCESSATO.getErroreCooperazione(),protocolFactory),
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("ricezioneBustaDuplicata"));
return esito;
}
}
if(ricevuta!=null){
//System.out.println("CASO 3 creazione ricevuta");
msgDiag.addKeyword(CostantiPdD.KEY_TIPO_RICEVUTA_ASINCRONA, ricevuta);
msgDiag.logPersonalizzato(MsgDiagnosticiProperties.MSG_DIAG_RICEZIONE_BUSTE,"generazioneRicevutaAsincrona");
// Costruisco ricevuta da re-inviare
bustaHTTPReply.setVersioneServizio(bustaRichiesta.getVersioneServizio());
bustaHTTPReply.setServizio(bustaRichiesta.getServizio());
bustaHTTPReply.setTipoServizio(bustaRichiesta.getTipoServizio());
bustaHTTPReply.setAzione(bustaRichiesta.getAzione());
bustaHTTPReply.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
bustaHTTPReply.setRiferimentoMessaggio(bustaRichiesta.getID());
// (per gli asincroni devono sempre essere presenti la collaborazione)
if( this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente))
bustaHTTPReply.setCollaborazione(bustaRichiesta.getCollaborazione());
if(!consegnaAffidabile){
bustaHTTPReply.setConfermaRicezione(false);
}
if(imbustamentoFiltroDuplicatiAbilitato){
bustaHTTPReply.setInoltro(Inoltro.SENZA_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.SENZA_DUPLICATI));
}
// Re-invio Ricevuta
msgResponse = ejbUtils.buildAndSendBustaRisposta(richiestaApplicativa.getIdModuloInAttesa(),bustaHTTPReply,
MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
requestInfo.getProtocolRequestMessageType(),MessageRole.RESPONSE),profiloGestione,
idCorrelazioneApplicativa,servizioApplicativoFruitore);
}
}
// 4
else{
//System.out.println("Caso 4");
if( protocolManager.isGenerazioneErroreMessaggioOnewayDuplicato() || this.propertiesReader.isGenerazioneErroreProtocolloFiltroDuplicati(implementazionePdDMittente)){
//System.out.println("Caso 4, spedizione errore di segnalazione id duplicato");
ejbUtils.setRollbackRichiestaInCasoErrore_rollbackHistory(false); // non devo cancellare l'history
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.CONFLICT);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
Eccezione.getEccezioneValidazione(ErroriCooperazione.IDENTIFICATIVO_MESSAGGIO_GIA_PROCESSATO.getErroreCooperazione(),protocolFactory),
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("ricezioneBustaDuplicata"));
return esito;
}
// Msg di Sblocco per il modulo 'RicezioneBuste'
if(sendSbloccoRicezioneBuste){
//System.out.println("Caso 4, solo segnalazione errore");
msgResponse = ejbUtils.sendSbloccoRicezioneBuste(richiestaApplicativa.getIdModuloInAttesa());
}
}
//System.out.println("RELEASE");
// Devo rilasciare il messaggio, senza cancellarlo dalla history.
ejbUtils.releaseInboxMessage(false,true);
// Aggiornamento cache messaggio risposta
if(msgResponse!=null)
msgResponse.addMessaggiIntoCache_readFromTable(Sbustamento.ID_MODULO, "risposta in seguito a busta duplicata");
// Aggiornamento cache proprietario messaggio risposta
if(msgResponse!=null)
msgResponse.addProprietariIntoCache_readFromTable(Sbustamento.ID_MODULO, "risposta in seguito a busta duplicata",idMessageRequest,false);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.OK,null);
return esito;
}
}catch(Exception e) {
msgDiag.logErroreGenerico(e, "GestioneHistoryBusteRicevute");
ejbUtils.rollbackMessage("Gestione dell'history delle buste ricevute non riuscita", esito);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(false);
esito.setStatoInvocazioneErroreNonGestito(e);
return esito;
}
pddContext.removeObject(org.openspcoop2.core.constants.Costanti.OPENSPCOOP_STATE);
}
/* ------------ Invio Riscontri (solo per profilo OneWay) ------------- */
if(consegnaAffidabile){
msgDiag.mediumDebug("Gestione eventuali riscontri da inviare...");
boolean senza_piggy_backing = true;
if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione()) ) {
if ( (senza_piggy_backing) && (bustaRichiesta.isConfermaRicezione())){
// Riscontro ad hoc
Riscontro r = new Riscontro();
r.setID(bustaRichiesta.getID());
r.setOraRegistrazione(bustaHTTPReply.getOraRegistrazione());
r.setTipoOraRegistrazione(this.propertiesReader.getTipoTempoBusta(implementazionePdDMittente));
bustaHTTPReply.addRiscontro(r);
bustaHTTPReply.setTipoServizioRichiedenteBustaDiServizio(bustaRichiesta.getTipoServizio());
bustaHTTPReply.setServizioRichiedenteBustaDiServizio(bustaRichiesta.getServizio());
bustaHTTPReply.setAzioneRichiedenteBustaDiServizio(bustaRichiesta.getAzione());
returnProtocolReply = true;
}
}
}
/* ------------ Collaborazione e Sequenza ------------- */
// check Funzionalita' fornita solo con OneWay
// Sequenza: deve essere abilitata la consegna affidabile + la collaborazione e infine la consegna in ordine
if( consegnaInOrdine &&
(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione())==false) ){
msgDiag.mediumDebug("Gestione vincoli consegna in ordine...");
msgDiag.logPersonalizzato("consegnaInOrdine.profiloDiversoOneway");
Eccezione e = Eccezione.getEccezioneValidazione(ErroriCooperazione.CONSEGNA_IN_ORDINE_NON_SUPPORTATA.getErroreCooperazione(),protocolFactory);
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,e,
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.profiloDiversoOneway"));
return esito;
}
/* ------------ Profilo di Collaborazione ------------- */
String scenarioCooperazione = null;
boolean generazioneMsgOK = false;
boolean existsPA = true;
PortaApplicativa pa = null;
ServizioApplicativo sa = null;
Integrazione integrazioneAsincrona = null;
if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
msgDiag.mediumDebug("Gestione profilo di collaborazione OneWay...");
scenarioCooperazione = Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO;
// check esistenza porta applicativa
msgDiag.mediumDebug("Gestione profilo di collaborazione OneWay (existsPA)...");
try{
existsPA=configurazionePdDManager.existsPA(richiestaApplicativa, requestInfo);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "existsPA(richiestaApplicativa,oneway)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"existsPA(richiestaApplicativa,oneway)");
return esito;
}
if(!existsPA){
String nomePA = "";
if(richiestaApplicativa.getIdPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome()!=null){
nomePA = " ["+richiestaApplicativa.getIdPortaApplicativa().getNome()+"]";
}
msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, "Porta Applicativa"+nomePA+" non esistente");
msgDiag.logPersonalizzato("portaApplicativaNonEsistente");
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.API_IN_UNKNOWN);
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_450_PA_INESISTENTE.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("portaApplicativaNonEsistente"));
return esito;
}
// Lettura Porta Applicativa
msgDiag.mediumDebug("Lettura Porta Applicativa ...");
pa = configurazionePdDManager.getPortaApplicativaSafeMethod(richiestaApplicativa.getIdPortaApplicativa(), requestInfo);
// Soggetto Virtuale
boolean soggettoVirtuale = false;
try{
if(richiestaApplicativa.getDominio()!=null) {
soggettoVirtuale = configurazionePdDManager.isSoggettoVirtuale( richiestaApplicativa.getDominio(), requestInfo );
}
}catch(Exception e){
msgDiag.logErroreGenerico(e, "isSoggettoVirtuale(richiestaApplicativa,oneway)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"isSoggettoVirtuale(richiestaApplicativa,oneway)");
return esito;
}
// Modalita di trasmissione sincrona/asincrona
if(!soggettoVirtuale) {
if(configurazionePdDManager.isModalitaStateless(pa, bustaRichiesta.getProfiloDiCollaborazione())==false){
generazioneMsgOK = true;
}else{
generazioneMsgOK = false;
}
}
else {
generazioneMsgOK = true;
}
}else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
msgDiag.mediumDebug("Gestione profilo di collaborazione Sincrono...");
if(bustaRichiesta.getRiferimentoMessaggio()!=null &&
(ruoloBustaRicevuta==null || !ruoloBustaRicevuta.equals(RuoloBusta.RICHIESTA))
){
msgDiag.logPersonalizzato("ricezioneRispostaSincrona");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("ricezioneRispostaSincrona"));
return esito;
}
scenarioCooperazione = Costanti.SCENARIO_SINCRONO_INVOCAZIONE_SERVIZIO;
// check esistenza porta applicativa
msgDiag.mediumDebug("Gestione profilo di collaborazione Sincrono (existsPA)...");
try{
existsPA=configurazionePdDManager.existsPA(richiestaApplicativa, requestInfo);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "existsPA(richiestaApplicativa,sincrono)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"existsPA(richiestaApplicativa,sincrono)");
return esito;
}
if(!existsPA){
String nomePA = "";
if(richiestaApplicativa.getIdPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome()!=null){
nomePA = " ["+richiestaApplicativa.getIdPortaApplicativa().getNome()+"]";
}
msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, "Porta Applicativa"+nomePA+" non esistente");
msgDiag.logPersonalizzato("portaApplicativaNonEsistente");
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.API_IN_UNKNOWN);
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_450_PA_INESISTENTE.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("portaApplicativaNonEsistente"));
return esito;
}
// Lettura Porta Applicativa
msgDiag.mediumDebug("Lettura Porta Applicativa ...");
pa = configurazionePdDManager.getPortaApplicativaSafeMethod(richiestaApplicativa.getIdPortaApplicativa(), requestInfo);
msgDiag.mediumDebug("Gestione profilo di collaborazione Sincrono (registra busta ricevuta)...");
try{
profiloCollaborazione.registraBustaRicevuta(bustaRichiesta.getID());
}catch(Exception e){
msgDiag.logErroreGenerico(e, "profiloCollaborazione.registraBustaRicevuta("+bustaRichiesta.getID()+")");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"profiloCollaborazione.registraBustaRicevuta("+bustaRichiesta.getID()+")");
return esito;
}
}else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
if(openspcoopstate.resourceReleased()) {
// il vecchio engine che verifica il filtro duplicati ha bisogno della connessione
// inizializzo
((OpenSPCoopState)openspcoopstate).setUseConnection(true);
openspcoopstate.initResource(identitaPdD, this.idModulo, idTransazione);
profiloCollaborazione.updateState(openspcoopstate.getStatoRichiesta());
repositoryBuste.updateState(openspcoopstate.getStatoRichiesta());
}
// Richiesta Asincrona
if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString())){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico richiesta...");
scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO;
// check esistenza porta applicativa
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico richiesta (existsPA)...");
try{
existsPA=configurazionePdDManager.existsPA(richiestaApplicativa, requestInfo);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "existsPA(richiestaApplicativa,asincronoSimmetricoRichiesta)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"existsPA(richiestaApplicativa,asincronoSimmetricoRichiesta)");
return esito;
}
if(!existsPA){
String nomePA = "";
if(richiestaApplicativa.getIdPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome()!=null){
nomePA = " ["+richiestaApplicativa.getIdPortaApplicativa().getNome()+"]";
}
msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, "Porta Applicativa"+nomePA+" non esistente");
msgDiag.logPersonalizzato("portaApplicativaNonEsistente");
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.API_IN_UNKNOWN);
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_450_PA_INESISTENTE.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("portaApplicativaNonEsistente"));
return esito;
}
// Lettura Porta Applicativa
msgDiag.mediumDebug("Lettura Porta Applicativa ...");
pa = configurazionePdDManager.getPortaApplicativaSafeMethod(richiestaApplicativa.getIdPortaApplicativa(), requestInfo);
// gestione ricevute asincrone
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico richiesta (controllo ricevuta abilitata)...");
try{
richiestaApplicativa.setRicevutaAsincrona(configurazionePdDManager.ricevutaAsincronaSimmetricaAbilitata(pa));
}catch(Exception e){
msgDiag.logErroreGenerico(e, "ricevutaAsincronaSimmetricaAbilitata(pa)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"ricevutaAsincronaSimmetricaAbilitata(pa)");
return esito;
}
// deve essere generato un msg OK se non e' abilitata la funzionalita' di ricevuta asincrona
// Modalita di trasmissione stateless/stateful
if(configurazionePdDManager.isModalitaStateless(pa,bustaRichiesta.getProfiloDiCollaborazione())==false){
generazioneMsgOK = !richiestaApplicativa.isRicevutaAsincrona();
}
else{
generazioneMsgOK = false;
}
// registrazione
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico richiesta (registrazione busta ricevuta)...");
try{
String tipoServizioCorrelato = null;
String servizioCorrelato = null;
Integer versioneServizioCorrelato = null;
if(bustaRichiesta.getTipoServizioCorrelato()!=null &&
bustaRichiesta.getServizioCorrelato() != null){
tipoServizioCorrelato = bustaRichiesta.getTipoServizioCorrelato();
servizioCorrelato = bustaRichiesta.getServizioCorrelato();
if(bustaRichiesta.getVersioneServizioCorrelato()!=null && bustaRichiesta.getVersioneServizioCorrelato().intValue()>0) {
versioneServizioCorrelato = bustaRichiesta.getVersioneServizioCorrelato();
}
else {
versioneServizioCorrelato = 1;
}
}else{
RisultatoValidazione validazione = registroServiziManager.validaServizio(idSoggettoFruitore,idServizio,null);
if( (validazione==null) || (validazione.getServizioRegistrato()==false))
throw new Exception("Servizio ["+idServizio.toString()+"] non esiste nel registro dei servizi");
if( (validazione.getServizioCorrelato()==null) || (validazione.getTipoServizioCorrelato()==null) || (validazione.getVersioneServizioCorrelato()==null) )
throw new Exception("Servizio ["+idServizio.toString()+"] non possiede un servizio correlato associato");
tipoServizioCorrelato = validazione.getTipoServizioCorrelato();
servizioCorrelato = validazione.getServizioCorrelato();
versioneServizioCorrelato = validazione.getVersioneServizioCorrelato();
}
String collaborazione = null;
// (per gli asincroni devono sempre essere presenti)
if(this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente))
collaborazione = bustaRichiesta.getCollaborazione();
profiloCollaborazione.asincronoSimmetrico_registraRichiestaRicevuta(bustaRichiesta.getID(),collaborazione,
tipoServizioCorrelato,servizioCorrelato,versioneServizioCorrelato,richiestaApplicativa.isRicevutaAsincrona(),
this.propertiesReader.getRepositoryIntervalloScadenzaMessaggi());
}catch(Exception e){
msgDiag.logErroreGenerico(e, "SalvataggioInformazioniProfiloAsincronoSimmetrico");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"SalvataggioInformazioniProfiloAsincronoSimmetrico");
return esito;
}
// RicevutaAsincrona immediata
if(generazioneMsgOK){
returnProtocolReply = true;
bustaHTTPReply.setServizio(bustaRichiesta.getServizio());
bustaHTTPReply.setTipoServizio(bustaRichiesta.getTipoServizio());
bustaHTTPReply.setAzione(bustaRichiesta.getAzione());
bustaHTTPReply.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
bustaHTTPReply.setRiferimentoMessaggio(bustaRichiesta.getID());
// (per gli asincroni devono sempre essere presenti)
if(this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente))
bustaHTTPReply.setCollaborazione(bustaRichiesta.getCollaborazione());
if(!consegnaAffidabile){
bustaHTTPReply.setConfermaRicezione(false);
}
if(imbustamentoFiltroDuplicatiAbilitato){
bustaHTTPReply.setInoltro(Inoltro.SENZA_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.SENZA_DUPLICATI));
}
}
}else{
// Risposta Asincrona
if(RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico risposta...");
scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA;
}
// Ricevuta alla richiesta.
else if(RuoloBusta.RICEVUTA_RICHIESTA.equals(ruoloBustaRicevuta.toString())){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico ricevuta richiesta asincrona...");
ricevutaAsincrona = "ricevuta di una richiesta asincrona simmetrica";
}
// Ricevuta alla risposta.
else if(RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString())){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico ricevuta risposta asincrona ...");
ricevutaAsincrona = "ricevuta di una risposta asincrona simmetrica";
}
else{
msgDiag.logPersonalizzato("profiloAsincrono.flussoRicevutaRichiestaRispostaNonCorretto");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("profiloAsincrono.flussoRicevutaRichiestaRispostaNonCorretto"));
return esito;
}
// Raccolgo dati consegna per Risposta o Ricevute
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico risposta (raccolta dati per consegna risposta)...");
try{
if(ricevutaAsincrona==null){
integrazioneAsincrona = profiloCollaborazione.asincronoSimmetrico_getDatiConsegnaRisposta(protocolManager.getIdCorrelazioneAsincrona(bustaRichiesta));
}else{
integrazioneAsincrona = profiloCollaborazione.asincronoSimmetrico_getDatiConsegnaRicevuta(bustaRichiesta.getRiferimentoMessaggio());
}
}catch(Exception e){
msgDiag.logErroreGenerico(e, "RaccoltaDatiIntegrazioneProfiloAsincronoSimmetrico");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"RaccoltaDatiIntegrazioneProfiloAsincronoSimmetrico");
return esito;
}
}
} else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())) {
if(openspcoopstate.resourceReleased()) {
// il vecchio engine che verifica il filtro duplicati ha bisogno della connessione
// inizializzo
((OpenSPCoopState)openspcoopstate).setUseConnection(true);
openspcoopstate.initResource(identitaPdD, this.idModulo, idTransazione);
profiloCollaborazione.updateState(openspcoopstate.getStatoRichiesta());
repositoryBuste.updateState(openspcoopstate.getStatoRichiesta());
}
// Richiesta Asincrona
if(RuoloBusta.RICHIESTA.equals(ruoloBustaRicevuta.toString())){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta...");
scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO;
// check esistenza porta applicativa
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta (existsPA)...");
try{
existsPA=configurazionePdDManager.existsPA(richiestaApplicativa, requestInfo);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "existsPA(richiestaApplicativa,asincronoAsimmetricoRichiesta)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"existsPA(richiestaApplicativa,asincronoAsimmetricoRichiesta)");
return esito;
}
if(!existsPA){
String nomePA = "";
if(richiestaApplicativa.getIdPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome()!=null){
nomePA = " ["+richiestaApplicativa.getIdPortaApplicativa().getNome()+"]";
}
msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, "Porta Applicativa"+nomePA+" non esistente");
msgDiag.logPersonalizzato_prefix("(Richiesta) ", "portaApplicativaNonEsistente");
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.API_IN_UNKNOWN);
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_450_PA_INESISTENTE.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
"(Richiesta) "+msgDiag.getMessaggio_replaceKeywords("portaApplicativaNonEsistente"));
return esito;
}
// Lettura Porta Applicativa
msgDiag.mediumDebug("Lettura Porta Applicativa ...");
pa = configurazionePdDManager.getPortaApplicativaSafeMethod(richiestaApplicativa.getIdPortaApplicativa(), requestInfo);
// assegnamento servizioApplicativo
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta (lettura servizio applicativo)...");
String [] servizioApplicativo = null;
try{
servizioApplicativo = configurazionePdDManager.getServiziApplicativi(pa);
if(servizioApplicativo==null)
throw new Exception("Servizio applicativo non esistente");
if(servizioApplicativo.length>1)
throw new Exception("profilo non utilizzabile con una porta applicativa a cui sono stati associati piu' servizi applicativi");
if(servizioApplicativo.length<=0)
throw new Exception("Non sono stati associati servizi applicativi alla porta applicativa");
}
catch(Exception e){
msgDiag.logErroreGenerico(e, "LetturaServizioApplicatiProfiloAsincronoAsimmetrico");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"LetturaServizioApplicatiProfiloAsincronoAsimmetrico");
return esito;
}
richiestaApplicativa.setServizioApplicativo(servizioApplicativo[0]);
// Lettura Servizio Applicativo
msgDiag.mediumDebug("Lettura Servizio Applicativo ...");
try{
IDServizioApplicativo idSA = new IDServizioApplicativo();
idSA.setNome(servizioApplicativo[0]);
idSA.setIdSoggettoProprietario(richiestaApplicativa.getIDServizio().getSoggettoErogatore());
sa = configurazionePdDManager.getServizioApplicativo(idSA, requestInfo );
}catch(DriverConfigurazioneNotFound e){
msgDiag.logErroreGenerico("Servizio applicativo ["+servizioApplicativo[0]+"] non esistente", "getServizioApplicativoProfiloAsincronoAsimmetrico");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_453_SA_INESISTENTE.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"Servizio applicativo ["+servizioApplicativo[0]+"] non esistente");
return esito;
}
catch(Exception e){
msgDiag.logErroreGenerico(e, "getServizioApplicativoProfiloAsincronoAsimmetrico");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"getServizioApplicativoProfiloAsincronoAsimmetrico");
return esito;
}
// check esistenza ConsegnaRispostaAsincrona
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta (exists ConsegnaRispostAsincrona)...");
boolean existsConsegnaRispostaAsincrona = false;
msgDiag.addKeyword(CostantiPdD.KEY_SA_EROGATORE, sa.getNome());
try{
existsConsegnaRispostaAsincrona = configurazionePdDManager.existsConsegnaRispostaAsincrona(sa);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "existsConsegnaRispostaAsincrona_ProfiloAsincronoAsimmetrico");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"existsConsegnaRispostaAsincrona_ProfiloAsincronoAsimmetrico");
return esito;
}
if (existsConsegnaRispostaAsincrona == false){
msgDiag.logPersonalizzato("profiloAsincronoAsimmetrico.saSenzaRispostaAsincrona");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_411_RICEZIONE_CONTENUTI_ASINCRONA_RICHIESTA.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("profiloAsincronoAsimmetrico.saSenzaRispostaAsincrona"));
return esito;
}
// check esistenza ServizioCorrelato associato al Servizio
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta (servizio correlato)...");
if(sbustamentoMsg.getServizioCorrelato()==null || sbustamentoMsg.getTipoServizioCorrelato()==null){
msgDiag.logPersonalizzato("profiloAsincronoAsimmetrico.servizioCorrelatoNonEsistente");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_408_SERVIZIO_CORRELATO_NON_TROVATO.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("profiloAsincronoAsimmetrico.servizioCorrelatoNonEsistente"));
return esito;
}
// gestione ricevute asincrone
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta (ricevuta abilitata)...");
try{
richiestaApplicativa.setRicevutaAsincrona(configurazionePdDManager.ricevutaAsincronaAsimmetricaAbilitata(pa));
}catch(Exception e){
msgDiag.logErroreGenerico(e, "ricevutaAsincronaAsimmetricaAbilitata(pa)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"ricevutaAsincronaAsimmetricaAbilitata(pa)");
return esito;
}
// deve essere generato un msg OK se non e' abilitata la funzionalita' di ricevuta asincrona
// Modalita di trasmissione stateless/stateful
if(configurazionePdDManager.isModalitaStateless(pa, bustaRichiesta.getProfiloDiCollaborazione())==false){
generazioneMsgOK = !richiestaApplicativa.isRicevutaAsincrona();
}
else{
generazioneMsgOK = false;
}
// registrazione
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta (registrazione busta ricevuta)...");
try{
String collaborazione = null;
// (per gli asincroni devono sempre essere presenti)
if(this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente))
collaborazione = bustaRichiesta.getCollaborazione();
profiloCollaborazione.asincronoAsimmetrico_registraRichiestaRicevuta(bustaRichiesta.getID(),collaborazione,
sbustamentoMsg.getTipoServizioCorrelato(),sbustamentoMsg.getServizioCorrelato(),sbustamentoMsg.getVersioneServizioCorrelato(),
richiestaApplicativa.isRicevutaAsincrona(),
this.propertiesReader.getRepositoryIntervalloScadenzaMessaggi());
}catch(Exception e){
msgDiag.logErroreGenerico(e, "SalvataggioInformazioniProfiloAsincronoAsimmetrico");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"SalvataggioInformazioniProfiloAsincronoAsimmetrico");
return esito;
}
// RicevutaAsincrona immediata
if(generazioneMsgOK){
returnProtocolReply = true;
bustaHTTPReply.setServizio(bustaRichiesta.getServizio());
bustaHTTPReply.setTipoServizio(bustaRichiesta.getTipoServizio());
// PRODUZIONE tipo e nome Servizio Correlato
if( protocolManager.isGenerazioneInformazioniServizioCorrelatoAsincronoAsimmetrico() &&
this.propertiesReader.isGenerazioneAttributiAsincroni(implementazionePdDMittente)){
bustaHTTPReply.setServizioCorrelato(sbustamentoMsg.getServizioCorrelato());
bustaHTTPReply.setTipoServizioCorrelato(sbustamentoMsg.getTipoServizioCorrelato());
}
bustaHTTPReply.setAzione(bustaRichiesta.getAzione());
bustaHTTPReply.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO);
bustaHTTPReply.setRiferimentoMessaggio(bustaRichiesta.getID());
// (per gli asincroni devono sempre essere presenti)
if(this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente))
bustaHTTPReply.setCollaborazione(bustaRichiesta.getCollaborazione());
if(!consegnaAffidabile){
bustaHTTPReply.setConfermaRicezione(false);
}
if(imbustamentoFiltroDuplicatiAbilitato){
bustaHTTPReply.setInoltro(Inoltro.SENZA_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.SENZA_DUPLICATI));
}
}
}else{
// Risposta Asincrona
if(RuoloBusta.RISPOSTA.equals(ruoloBustaRicevuta.toString())){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta Stato...");
scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING;
IDServizio idServizioOriginale = null;
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico richiesta Stato (lettura servizio originale)...");
try{
idServizioOriginale = profiloCollaborazione.asincronoAsimmetrico_getDatiConsegnaRisposta(protocolManager.getIdCorrelazioneAsincrona(bustaRichiesta));
}catch(Exception e){
msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoAsimmetrico_getDatiConsegnaRisposta");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"profiloCollaborazione.asincronoAsimmetrico_getDatiConsegnaRisposta");
return esito;
}
// ripristino richiestaApplicativa con valori del servizio di richiesta (sovrascrivendo i valori del servizio correlato)
IDServizio idServizioRichiesta =
IDServizioFactory.getInstance().getIDServizioFromValues(idServizioOriginale.getTipo(), idServizioOriginale.getNome(),
richiestaApplicativa.getIDServizio().getSoggettoErogatore(), idServizioOriginale.getVersione());
idServizioRichiesta.setAzione(idServizioOriginale.getAzione());
idServizioRichiesta.setTipologia(richiestaApplicativa.getIDServizio().getTipologia());
idServizioRichiesta.setUriAccordoServizioParteComune(richiestaApplicativa.getIDServizio().getUriAccordoServizioParteComune());
richiestaApplicativa.updateIDServizio(idServizioRichiesta);
// check esistenza porta applicativa
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico richiesta Stato (existsPA)...");
try{
existsPA=configurazionePdDManager.existsPA(richiestaApplicativa, requestInfo);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "existsPA(richiestaApplicativa,asincronoAsimmetricoRichiestaStato)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"existsPA(richiestaApplicativa,asincronoAsimmetricoRichiestaStato)");
return esito;
}
if(!existsPA){
String nomePA = "";
if(richiestaApplicativa.getIdPortaApplicativa()!=null && richiestaApplicativa.getIdPortaApplicativa().getNome()!=null){
nomePA = " ["+richiestaApplicativa.getIdPortaApplicativa().getNome()+"]";
}
msgDiag.addKeyword(CostantiPdD.KEY_ERRORE_PROCESSAMENTO, "Porta Applicativa"+nomePA+" non esistente");
msgDiag.logPersonalizzato_prefix("(RichiestaStato) ", "portaApplicativaNonEsistente");
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(IntegrationFunctionError.API_IN_UNKNOWN);
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_450_PA_INESISTENTE.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
"(RichiestaStato) "+msgDiag.getMessaggio_replaceKeywords("portaApplicativaNonEsistente"));
return esito;
}
// Lettura Porta Applicativa
msgDiag.mediumDebug("Lettura Porta Applicativa ...");
pa = configurazionePdDManager.getPortaApplicativaSafeMethod(richiestaApplicativa.getIdPortaApplicativa(), requestInfo);
}
// Ricevuta alla richiesta.
else if(RuoloBusta.RICEVUTA_RICHIESTA.equals(ruoloBustaRicevuta.toString())){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico ricevuta richiesta...");
ricevutaAsincrona = "ricevuta di una richiesta asincrona asimmetrica";
}
// Ricevuta alla risposta.
else if(RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString())){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoSimmetrico ricevuta risposta...");
ricevutaAsincrona = "ricevuta di una risposta asincrona asimmetrica contenente l'esito della richiesta stato";
}
else{
msgDiag.logPersonalizzato("profiloAsincrono.flussoRicevutaRichiestaRispostaNonCorretto");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,null,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("profiloAsincrono.flussoRicevutaRichiestaRispostaNonCorretto"));
return esito;
}
// Raccolgo dati consegna per Ricevute
try{
if(ricevutaAsincrona!=null){
msgDiag.mediumDebug("Gestione profilo di collaborazione AsincronoAsimmetrico ricevuta (raccolta dati consegna per ricevuta)...");
integrazioneAsincrona = profiloCollaborazione.asincronoAsimmetrico_getDatiConsegnaRicevuta(bustaRichiesta.getRiferimentoMessaggio());
}
}catch(Exception e){
msgDiag.logErroreGenerico(e, "RaccoltaDatiIntegrazioneProfiloAsincronoAsimmetrico");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"RaccoltaDatiIntegrazioneProfiloAsincronoAsimmetrico");
return esito;
}
}
}else{
// profilo non conosciuto
Eccezione ecc =
Eccezione.getEccezioneValidazione(ErroriCooperazione.PROFILO_COLLABORAZIONE_SCONOSCIUTO.
getErroreProfiloCollaborazioneSconosciuto(bustaRichiesta.getProfiloDiCollaborazioneValue()),
protocolFactory);
msgDiag.addKeyword(CostantiPdD.KEY_ECCEZIONI, ecc.toString(protocolFactory));
msgDiag.addKeyword(CostantiPdD.KEY_NUMERO_ECCEZIONI, "1");
msgDiag.logPersonalizzato("validazioneBusta.bustaNonCorretta");
ejbUtils.sendAsRispostaBustaErroreValidazione(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,ecc,
idCorrelazioneApplicativa,servizioApplicativoFruitore);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
msgDiag.getMessaggio_replaceKeywords("validazioneBusta.bustaNonCorretta"));
return esito;
}
/* -------------- Creazione dati consegna applicativa per profili asincroni ------------------ */
msgDiag.mediumDebug("Gestione profilo di collaborazione Asincrono, raccolta dati consegna...");
RichiestaDelegata consegnaApplicativaAsincrona = null;
PortaDelegata pdConsegnaApplicativaAsincrona = null;
ServizioApplicativo saConsegnaApplicativaAsincrona = null;
try{
if(integrazioneAsincrona!=null){
IDSoggetto soggettoFruitoreRichiestaAsincrona = new IDSoggetto(bustaRichiesta.getTipoDestinatario(),bustaRichiesta.getDestinatario());
IDSoggetto soggettoErogatoreRichiestaAsincrona = new IDSoggetto(bustaRichiesta.getTipoMittente(),bustaRichiesta.getMittente());
IDServizio servizioRichiestaAsincrona =
IDServizioFactory.getInstance().getIDServizioFromValues(bustaRichiesta.getTipoServizio(),bustaRichiesta.getServizio(),
soggettoErogatoreRichiestaAsincrona, bustaRichiesta.getVersioneServizio());
servizioRichiestaAsincrona.setAzione(bustaRichiesta.getAzione());
ProprietaErroreApplicativo proprietaErroreApplAsincrono = this.propertiesReader.getProprietaGestioneErrorePD(protocolManager);
proprietaErroreApplAsincrono.setDominio(identitaPdD.getCodicePorta());
proprietaErroreApplAsincrono.setIdModulo(Sbustamento.ID_MODULO);
IDPortaDelegata idPD = configurazionePdDManager.getIDPortaDelegata(integrazioneAsincrona.getNomePorta(), requestInfo, protocolFactory);
consegnaApplicativaAsincrona = new RichiestaDelegata(idPD,
integrazioneAsincrona.getServizioApplicativo(),null,proprietaErroreApplAsincrono,identitaPdD);
consegnaApplicativaAsincrona.setScenario(scenarioCooperazione);
consegnaApplicativaAsincrona.setProfiloGestione(profiloGestione);
pdConsegnaApplicativaAsincrona = configurazionePdDManager.getPortaDelegata(consegnaApplicativaAsincrona.getIdPortaDelegata(), requestInfo);
try{
IDServizioApplicativo idSA = new IDServizioApplicativo();
idSA.setNome(consegnaApplicativaAsincrona.getServizioApplicativo());
idSA.setIdSoggettoProprietario(soggettoFruitoreRichiestaAsincrona);
saConsegnaApplicativaAsincrona = configurazionePdDManager.getServizioApplicativo(idSA, requestInfo);
}catch(Exception e){
if( !(e instanceof DriverConfigurazioneNotFound) ||
!(CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO.equals(consegnaApplicativaAsincrona.getServizioApplicativo())) ){
throw e;
}
}
configurazionePdDManager.aggiornaProprietaGestioneErrorePD(proprietaErroreApplAsincrono,saConsegnaApplicativaAsincrona);
// gestione ricevute asincrone
if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
// asincrono simmetrico
consegnaApplicativaAsincrona.setRicevutaAsincrona(configurazionePdDManager.ricevutaAsincronaSimmetricaAbilitata(pdConsegnaApplicativaAsincrona));
} else {
// asincrono asimmetrico, se sono in un contesto di richiestaStato pooling, devo sempre ritornare il contenuto applicativo nella richiesta
if(RuoloBusta.RICEVUTA_RISPOSTA.equals(ruoloBustaRicevuta.toString())){
consegnaApplicativaAsincrona.setRicevutaAsincrona(true);
}else{
consegnaApplicativaAsincrona.setRicevutaAsincrona(configurazionePdDManager.ricevutaAsincronaAsimmetricaAbilitata(pdConsegnaApplicativaAsincrona));
}
}
// Ricevute Asincrone Simmetriche e Asimmetriche
if(ricevutaAsincrona!=null){
// di default la ricezioneAsincrona viene utilizzata.
// Non deve essere utilizzata solo nel caso di richiesta con profilo AsincronoSimmetrico
consegnaApplicativaAsincrona.setUtilizzoConsegnaAsincrona(true);
if(profiloCollaborazione.asincrono_spedizioneRichiestaInCorso(bustaRichiesta.getRiferimentoMessaggio())
&& org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(bustaRichiesta.getProfiloDiCollaborazione())){
consegnaApplicativaAsincrona.setUtilizzoConsegnaAsincrona(false);
}
// Il modulo in attesa e' il servizio di ricezioneContenutiApplicativi
consegnaApplicativaAsincrona.setIdModuloInAttesa(integrazioneAsincrona.getIdModuloInAttesa());
}
// Risposta Asincrona Simmetrica
else{
// Il modulo in attesa e' il servizio di ricezioneBuste
consegnaApplicativaAsincrona.setIdModuloInAttesa(richiestaApplicativa.getIdModuloInAttesa());
// elimino busta per profilo se non devo attendere una risposta applicativa (altrimenti la elimino quando prendo la busta per la ricevuta )
if(consegnaApplicativaAsincrona.isRicevutaAsincrona() == false){
profiloCollaborazione.eliminaBustaInviata(protocolManager.getIdCorrelazioneAsincrona(bustaRichiesta),true);
}
// di default la ricezioneAsincrona viene utilizzata.
// Non deve essere utilizzata solo nel caso di richiesta con profilo AsincronoSimmetrico
// qua siamo nella risposta asincrona
consegnaApplicativaAsincrona.setUtilizzoConsegnaAsincrona(true);
// deve essere generato un msg OK se non e' abilitata la funzionalita' di ricevuta asincrona
if(configurazionePdDManager.isModalitaStateless(pdConsegnaApplicativaAsincrona, bustaRichiesta.getProfiloDiCollaborazione())==false){
generazioneMsgOK = !consegnaApplicativaAsincrona.isRicevutaAsincrona();
}
else{
generazioneMsgOK = false;
}
// RicevutaAsincrona immediata
if(generazioneMsgOK){
returnProtocolReply = true;
bustaHTTPReply.setServizio(bustaRichiesta.getServizio());
bustaHTTPReply.setTipoServizio(bustaRichiesta.getTipoServizio());
bustaHTTPReply.setAzione(bustaRichiesta.getAzione());
bustaHTTPReply.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
bustaHTTPReply.setRiferimentoMessaggio(bustaRichiesta.getID());
// (per gli asincroni devono sempre essere presenti)
if(this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDMittente))
bustaHTTPReply.setCollaborazione(bustaRichiesta.getCollaborazione());
bustaHTTPReply.setRiferimentoMsgBustaRichiedenteServizio(bustaRichiesta.getRiferimentoMessaggio());
if(!consegnaAffidabile){
bustaHTTPReply.setConfermaRicezione(false);
}
if(imbustamentoFiltroDuplicatiAbilitato){
bustaHTTPReply.setInoltro(Inoltro.SENZA_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.SENZA_DUPLICATI));
}
}
}
}
}catch(Exception e){
msgDiag.logErroreGenerico(e, "GestioneConsegnaProfiloAsincrono");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"GestioneConsegnaProfiloAsincrono");
return esito;
}
/* ------------ Scenario di Cooperazione ------------- */
msgDiag.mediumDebug("Impostazione scenario di cooperazione...");
try{
richiestaApplicativa.setScenario(scenarioCooperazione);
repositoryBuste.aggiornaInfoIntegrazioneIntoInBox_Scenario(bustaRichiesta.getID(), scenarioCooperazione);
ejbUtils.setScenarioCooperazione(scenarioCooperazione);
}catch(Exception e){
msgDiag.logErroreGenerico(e, "repository.aggiornaInfoIntegrazioneIntoInBox_Scenario");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"repository.aggiornaInfoIntegrazioneIntoInBox_Scenario");
return esito;
}
/* ---------
* Spedizione contenuto applicativi con
* - ConsegnaContenutiApplicativiMessage al modulo ConsegnaContenutiApplicativi
* - RicezioneContenutiApplicativiMessage al modulo RicezioneContenutiApplicativi
* -------- */
Behaviour behaviour = null;
try{
if(ricevutaAsincrona==null){
if(consegnaApplicativaAsincrona==null){
msgDiag.mediumDebug("Invio messaggio a ConsegnaContenutiApplicativi...");
behaviour = ejbUtils.sendToConsegnaContenutiApplicativi(requestInfo,richiestaApplicativa,bustaRichiesta,msgRequest,pa,repositoryBuste);
if(ejbUtils.isGestioneStatelessConIntegrationManager()){
generazioneMsgOK = true;
sendSbloccoRicezioneBuste = true;
}
}else{
msgDiag.mediumDebug("Invio messaggio a ConsegnaContenutiApplicativi (consegnaAsincrona)...");
ejbUtils.sendToConsegnaContenutiApplicativi_gestioneMessaggio(consegnaApplicativaAsincrona,bustaRichiesta,msgRequest,saConsegnaApplicativaAsincrona);
}
}else{
if(consegnaApplicativaAsincrona.isRicevutaAsincrona()){
// Aggiorno l'id di sessione al riferimento Messaggio, id utilizzato dal servizio
// RicezioneContenutiApplicativi per l'attesa di una risposta
msgDiag.mediumDebug("Invio messaggio asincrono a Ricezione/Consegna ContenutiApplicativi...");
ejbUtils.updateIdSessione(bustaRichiesta.getRiferimentoMessaggio());
// Spedizione contenuto ricevuta applicativa
msgRequest = ejbUtils.sendRispostaApplicativa(consegnaApplicativaAsincrona,pdConsegnaApplicativaAsincrona,saConsegnaApplicativaAsincrona);
// ripristino old id sessione
ejbUtils.updateIdSessione(idMessageRequest);
}
}
// La gestione puo' avvenire per diversi servizi applicativi di una stessa PA.
// Quindi il servizio applicativo non e' identificavile in questo modulo. Lo sara' in Consegna contenuti applicativi.
// Viene effettuato il log di correlazione in EJBUtils
msgDiag.setServizioApplicativo(null);
}catch(EJBUtilsConsegnaException e){
msgDiag.logPersonalizzato_custom(e.getMessaggio(), e.getLivello(), e.getCodice());
if(e.getIntegrationFunctionError()!=null) {
ejbUtils.setIntegrationFunctionErrorPortaApplicativa(e.getIntegrationFunctionError());
}
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,e.getMessaggio());
return esito;
}
catch(Exception e){
//viene loggato dentro ejbUtils. msgDiag.errorOpenSPCoop("Abilitazione modulo ConsegnaMessaggio non riuscita (Busta "+bustaRichiesta.getID()+"): "+e.getMessage());
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"Abilitazione modulo ConsegnaMessaggio non riuscita (Busta "+bustaRichiesta.getID()+"): "+e.getMessage());
return esito;
}
/* ------------ Gestione Risposta verso RicezioneBuste ------------- */
// se il profilo e' oneWay,
// AsincronoSimmetrico o AsincronoAsimmetricoRichiesta senza gestione della ricevuta applicativa
// viene generata una risposta inviata al modulo.
boolean behaviourResponseTo = behaviour!=null && behaviour.isResponseTo();
if( generazioneMsgOK || behaviourResponseTo ) {
try{
pddContext.addObject(org.openspcoop2.core.constants.Costanti.DATA_PRESA_IN_CARICO,
DateUtils.getSimpleDateFormatMs().format(DateManager.getDate()));
if(behaviourResponseTo){
// Invio risposta richiesta dalla configurazione di behaviour
OpenSPCoop2Message msgReplyTo = null;
Busta bustaReplyTo = null;
if(behaviour.getResponseTo()!=null){
msgReplyTo = behaviour.getResponseTo().getMessage();
bustaReplyTo = behaviour.getResponseTo().getBusta();
}
if(msgReplyTo==null){
msgReplyTo = MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
requestInfo.getProtocolRequestMessageType(),MessageRole.RESPONSE);
}
msgDiag.mediumDebug("Invio messaggio a Ricezione/Consegna ContenutiApplicativi (Behaviour)...");
msgResponse = ejbUtils.buildAndSendBustaRisposta(richiestaApplicativa.getIdModuloInAttesa(),
bustaReplyTo,
msgReplyTo,profiloGestione,
idCorrelazioneApplicativa,servizioApplicativoFruitore);
}else if( returnProtocolReply == false){
// Invio sblocco se e' attesa una risposta dal modulo
// Se non e' abilitato la risposta su di una nuova connessione, e l'indirizzo telematico
// non e' abilitato o cmq non presente, allora devo inviare lo sblocco
if(sendSbloccoRicezioneBuste){
msgDiag.mediumDebug("Invio messaggio di sblocco a RicezioneBuste...");
msgResponse = ejbUtils.sendSbloccoRicezioneBuste(richiestaApplicativa.getIdModuloInAttesa());
}
}
else{
// Invio risposta immediata in seguito alla richiesta ricevuta
msgDiag.mediumDebug("Invio messaggio a Ricezione/Consegna ContenutiApplicativi...");
msgResponse = ejbUtils.buildAndSendBustaRisposta(richiestaApplicativa.getIdModuloInAttesa(),bustaHTTPReply,
MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
requestInfo.getProtocolRequestMessageType(),MessageRole.RESPONSE),profiloGestione,
idCorrelazioneApplicativa,servizioApplicativoFruitore);
}
}catch(Exception e){
msgDiag.logErroreGenerico(e, "GenerazioneMsgOK(Riscontro/Ricevuta/Sblocco)");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"GenerazioneMsgOK(Riscontro/Ricevuta/Sblocco)");
return esito;
}
}else if( ricevutaAsincrona !=null ){
try{
pddContext.addObject(org.openspcoop2.core.constants.Costanti.DATA_PRESA_IN_CARICO,
DateUtils.getSimpleDateFormatMs().format(DateManager.getDate()));
// Invio sblocco
// Se non e' abilitato la risposta su di una nuova connessione, e l'indirizzo telematico
// non e' abilitato o cmq non presente, allora devo inviare lo sblocco
if(sendSbloccoRicezioneBuste){
msgDiag.mediumDebug("Invio messaggio di sblocco a RicezioneBuste (ricevuta asincrona)...");
msgResponse = ejbUtils.sendSbloccoRicezioneBuste(richiestaApplicativa.getIdModuloInAttesa());
}
}catch(Exception e){
msgDiag.logErroreGenerico(e, "SendSbloccoDopoRicezione("+ricevutaAsincrona+")");
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
openspcoopstate.releaseResource();
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"SendSbloccoDopoRicezione("+ricevutaAsincrona+")");
return esito;
}
}
/* ---------- Gestione Transazione Modulo ---------------- */
// se non ho gestito una ricevuta asincrona, sono andato verso ConsegnaContenutiApplicativi
msgDiag.mediumDebug("Aggiornamento proprietario messaggio...");
if(ricevutaAsincrona==null){
msgRequest.aggiornaProprietarioMessaggio(org.openspcoop2.pdd.mdb.ConsegnaContenutiApplicativi.ID_MODULO);
}
// se ho gestito una ricevuta asincrona, guardo se e' abilitata la gestione del contenuto applicativo nella risposta
// se non e' abilitato devo cancellare il messaggio.
else if(consegnaApplicativaAsincrona!=null){
if(consegnaApplicativaAsincrona.isRicevutaAsincrona()==false){
repositoryBuste.eliminaUtilizzoPdDFromInBox(idMessageRequest,true);
msgRequest.aggiornaProprietarioMessaggio(org.openspcoop2.pdd.timers.TimerGestoreMessaggi.ID_MODULO);
}
}
// else l'ho gia inviato al modulo di ricezione contenuti applicativi il contenuto della ricevuta asincrona
// Commit JDBC
msgDiag.mediumDebug("Commit delle operazioni per la gestione della busta...");
openspcoopstate.commit();
}catch(Throwable e){
this.log.error("ErroreGenerale",e);
msgDiag.logErroreGenerico(e, "Generale");
if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(bustaRichiesta.getProfiloDiCollaborazione()) == true ) {
try{
ejbUtils.sendAsRispostaBustaErroreProcessamento(richiestaApplicativa.getIdModuloInAttesa(),bustaRichiesta,
ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),
idCorrelazioneApplicativa,servizioApplicativoFruitore,e,
null);
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"ErroreGenerale");
}catch(Exception er){
msgDiag.logErroreGenerico(er,"ejbUtils.sendErroreGenerale(profiloConRisposta)");
ejbUtils.rollbackMessage("Spedizione Errore al Mittente durante una richiesta sincrona non riuscita", esito);
esito.setEsitoInvocazione(false);
esito.setStatoInvocazioneErroreNonGestito(er);
}
}else{
ejbUtils.rollbackMessage("ErroreGenerale:"+e.getMessage(), esito);
esito.setStatoInvocazioneErroreNonGestito(e);
esito.setEsitoInvocazione(false);
}
openspcoopstate.releaseResource();
return esito;
}
// Aggiornamento cache messaggio
if(msgRequest!=null)
msgRequest.addMessaggiIntoCache_readFromTable(Sbustamento.ID_MODULO, "richiesta");
if(msgResponse!=null)
msgResponse.addMessaggiIntoCache_readFromTable(Sbustamento.ID_MODULO, "risposta");
// Aggiornamento cache proprietario messaggio
if(msgRequest!=null)
msgRequest.addProprietariIntoCache_readFromTable(Sbustamento.ID_MODULO, "richiesta",null,false);
if(msgResponse!=null)
msgResponse.addProprietariIntoCache_readFromTable(Sbustamento.ID_MODULO, "risposta",idMessageRequest,false);
// Gestione ricevute
if(ricevutaAsincrona!=null){
msgDiag.mediumDebug("Gestione ricevute asincrone...");
try{
boolean forzaEliminazioneMessaggio = false;
if( (openspcoopstate instanceof OpenSPCoopStateless) &&
("ricevuta di una richiesta asincrona simmetrica".equals(ricevutaAsincrona)) ){
forzaEliminazioneMessaggio = true;
}
GestoreMessaggi msgRiscontrato = new GestoreMessaggi(openspcoopstate, true, bustaRichiesta.getRiferimentoMessaggio(),Costanti.OUTBOX,msgDiag,pddContext);
msgRiscontrato.setReadyForDrop(forzaEliminazioneMessaggio);
msgRiscontrato.validateAndDeleteMsgAsincronoRiscontrato(bustaRichiesta);
msgDiag.addKeyword(CostantiPdD.KEY_TIPO_RICEVUTA_ASINCRONA, ricevutaAsincrona);
msgDiag.logPersonalizzato("validazioneRicevutaAsincrona");
}catch(Exception e){
msgDiag.logErroreGenerico(e,"Validazione("+ricevutaAsincrona+")");
}
}
// Rilascio connessione al DB
msgDiag.mediumDebug("Rilascio connessione al database...");
openspcoopstate.releaseResource();
msgDiag.mediumDebug("Lavoro Terminato.");
esito.setEsitoInvocazione(true);
esito.setStatoInvocazione(EsitoLib.OK, null);
return esito;
}
/**
* Gestione errore.
*
*
*/
private void gestioneErroreProtocollo(ConfigurazionePdDManager configurazionePdDManager, EJBUtils ejbUtils, ProfiloDiCollaborazione profiloCollaborazione, RepositoryBuste repositoryBuste,
Busta busta, IDSoggetto identitaPdD, Eccezione eccezioneProtocollo, ErroreIntegrazione erroreIntegrazione, IDSoggetto soggettoProduttoreEccezione, DettaglioEccezione dettaglioEccezione,
IProtocolFactory<?> protocolFactory, IProtocolManager protocolManager, PdDContext pddContext, RequestInfo requestInfo,
IntegrationFunctionError integrationFunctionError) throws Exception{
// Gestione ERRORE
if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(busta.getProfiloDiCollaborazione()) && busta.getRiferimentoMessaggio()!=null){
// oltre al messaggio in ingresso, viene effettuato il rollback sul riferimento messaggio.
// una risposta al SIL in attesa verra' ritornata quando scadra il timeout sulla connessione JMS della coda 'RicezioneContenutiApplicativi'
ejbUtils.releaseInboxMessage(Costanti.OUTBOX,busta.getRiferimentoMessaggio(), true);
}else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(busta.getProfiloDiCollaborazione()) ||
org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(busta.getProfiloDiCollaborazione()) ){
Integrazione integrazioneRispostaErrore = null;
boolean spedizioneRichiestaInCorso = profiloCollaborazione.asincrono_spedizioneRichiestaInCorso(busta.getRiferimentoMessaggio());
boolean spedizioneRispostaInCorso = profiloCollaborazione.asincrono_spedizioneRispostaInCorso(busta.getRiferimentoMessaggio());
boolean ricevutaApplicativaAbilitata=true;
boolean gestioneEffettuata = false;
if(spedizioneRichiestaInCorso || spedizioneRispostaInCorso){
ricevutaApplicativaAbilitata = profiloCollaborazione.asincrono_ricevutaApplicativaAbilitata(busta.getRiferimentoMessaggio());
if(ricevutaApplicativaAbilitata){
try{
integrazioneRispostaErrore = repositoryBuste.getInfoIntegrazioneFromOutBox(busta.getRiferimentoMessaggio());
}catch(Exception e){
throw new Exception("Riscontrato errore durante l'esamina dei dati di integrazione per la generazione di una risposta applicativa asincrona, in seguito alla ricezione di un Messaggio Errore Protocollo: "+e.getMessage());
}
if(integrazioneRispostaErrore!=null){
// Costruzione Richiesta Delegata
IDSoggetto soggettoFruitoreAsincrono = new IDSoggetto(busta.getTipoDestinatario(),busta.getDestinatario());
IDSoggetto soggettoErogatoreAsincrono = new IDSoggetto(busta.getTipoMittente(),busta.getMittente());
IDServizio servizioAsincrono =
IDServizioFactory.getInstance().getIDServizioFromValues(busta.getTipoServizio(),busta.getServizio(),
soggettoErogatoreAsincrono, busta.getVersioneServizio());
servizioAsincrono.setAzione(busta.getAzione());
ProprietaErroreApplicativo proprietaErroreApplAsincrono = this.propertiesReader.getProprietaGestioneErrorePD(protocolManager);
proprietaErroreApplAsincrono.setDominio(identitaPdD.getCodicePorta());
proprietaErroreApplAsincrono.setIdModulo(Sbustamento.ID_MODULO);
IDPortaDelegata idPD = configurazionePdDManager.getIDPortaDelegata(integrazioneRispostaErrore.getNomePorta(), requestInfo, protocolFactory);
RichiestaDelegata consegnaApplicativaAsincrona = new RichiestaDelegata(idPD,
integrazioneRispostaErrore.getServizioApplicativo(),null,proprietaErroreApplAsincrono,identitaPdD);
PortaDelegata pd = configurazionePdDManager.getPortaDelegata(consegnaApplicativaAsincrona.getIdPortaDelegata(), requestInfo);
ServizioApplicativo sappl = null;
try{
IDServizioApplicativo idSA = new IDServizioApplicativo();
idSA.setNome(consegnaApplicativaAsincrona.getServizioApplicativo());
idSA.setIdSoggettoProprietario(soggettoFruitoreAsincrono);
sappl = configurazionePdDManager.getServizioApplicativo(idSA, requestInfo);
}catch(Exception e){
if( !(e instanceof DriverConfigurazioneNotFound) || !(CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO.equals(consegnaApplicativaAsincrona.getServizioApplicativo())) ){
throw e;
}
}
configurazionePdDManager.aggiornaProprietaGestioneErrorePD(proprietaErroreApplAsincrono,sappl);
// di default la ricezioneAsincrona viene utilizzata.
// Non deve essere utilizzata solo nel caso di richiesta con profilo AsincronoSimmetrico
consegnaApplicativaAsincrona.setUtilizzoConsegnaAsincrona(true);
if(spedizioneRichiestaInCorso && org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(busta.getProfiloDiCollaborazione())){
consegnaApplicativaAsincrona.setUtilizzoConsegnaAsincrona(false);
}
// Il modulo in attesa e' il servizio di ricezioneContenutiApplicativi
consegnaApplicativaAsincrona.setIdModuloInAttesa(integrazioneRispostaErrore.getIdModuloInAttesa());
this.generatoreErrore.updateDominio(consegnaApplicativaAsincrona.getDominio());
this.generatoreErrore.updateProprietaErroreApplicativo(proprietaErroreApplAsincrono);
this.generatoreErrore.updateTipoPdD(TipoPdD.DELEGATA);
this.generatoreErrore.updateInformazioniCooperazione(consegnaApplicativaAsincrona.getServizioApplicativo());
this.generatoreErrore.updateInformazioniCooperazione(consegnaApplicativaAsincrona.getIdSoggettoFruitore(),consegnaApplicativaAsincrona.getIdServizio());
OpenSPCoop2Message responseMessageError = null;
if(eccezioneProtocollo!=null){
responseMessageError = this.generatoreErrore.build(pddContext, integrationFunctionError,
eccezioneProtocollo,soggettoProduttoreEccezione,dettaglioEccezione,
null);
}else{
responseMessageError = this.generatoreErrore.build(pddContext, integrationFunctionError,erroreIntegrazione,null,null);
}
// Aggiorno l'id di sessione al riferimento Messaggio, id utilizzato dal servizio
// RicezioneContenutiApplicativi per l'attesa di una risposta
ejbUtils.updateIdSessione(busta.getRiferimentoMessaggio());
ejbUtils.sendRispostaApplicativaErrore(responseMessageError,consegnaApplicativaAsincrona,spedizioneRichiestaInCorso,pd,sappl);
// ripristino old id sessione
ejbUtils.updateIdSessione(busta.getID());
gestioneEffettuata = true;
}
else{
// una risposta al SIL in attesa verra' ritornata quando scadra il timeout sulla connessione JMS della coda 'RicezioneContenutiApplicativi'
if(spedizioneRichiestaInCorso){
// oltre al messaggio in ingresso, viene effettuato il rollback sul riferimento messaggio.
ejbUtils.releaseInboxMessage(Costanti.OUTBOX,busta.getRiferimentoMessaggio(), true);
gestioneEffettuata = true;
}// else se vi e' una risposta in corso, basta rilasciare la busta di errore.
}
}// else se non e' attiva la gestione della ricevuta applicativa, basta rilasciare la busta di errore.
}// else se non e' in corso ne una richiesta ne una risposta, basta rilasciare la busta di errore.
if(gestioneEffettuata == false){
ejbUtils.releaseInboxMessage(true);
}
}else{
ejbUtils.releaseInboxMessage(true);
}
}
public static IFiltroDuplicati getGestoreFiltroDuplicati(OpenSPCoop2Properties propertiesReader,Loader loader,
IOpenSPCoopState openspcoopstate,PdDContext pddContext, History historyBuste, RepositoryBuste repositoryBuste, boolean oneWayVersione11) throws Exception{
// Istanzio gestore filtro duplicati
String gestoreFiltroDuplicatiType = propertiesReader.getGestoreFiltroDuplicatiRepositoryBuste();
ClassNameProperties prop = ClassNameProperties.getInstance();
String gestoreFiltroDuplicatiClass = prop.getFiltroDuplicati(gestoreFiltroDuplicatiType);
if(gestoreFiltroDuplicatiClass == null){
throw new Exception("GestoreFiltroDuplicati non registrato ("+gestoreFiltroDuplicatiType+")");
}
IFiltroDuplicati gestoreFiltroDuplicati = (IFiltroDuplicati) loader.newInstance(gestoreFiltroDuplicatiClass);
if(pddContext!=null) {
pddContext.addObject(org.openspcoop2.core.constants.Costanti.OPENSPCOOP_STATE, openspcoopstate );
}
gestoreFiltroDuplicati.init(pddContext);
if(gestoreFiltroDuplicati instanceof org.openspcoop2.protocol.engine.driver.FiltroDuplicati){
((org.openspcoop2.protocol.engine.driver.FiltroDuplicati)gestoreFiltroDuplicati).setHistoryBuste(historyBuste);
((org.openspcoop2.protocol.engine.driver.FiltroDuplicati)gestoreFiltroDuplicati).setRepositoryBuste(repositoryBuste);
((org.openspcoop2.protocol.engine.driver.FiltroDuplicati)gestoreFiltroDuplicati).setGestioneStateless((openspcoopstate instanceof OpenSPCoopStateless) && (oneWayVersione11==false));
((org.openspcoop2.protocol.engine.driver.FiltroDuplicati)gestoreFiltroDuplicati).setRepositoryIntervalloScadenzaMessaggi(propertiesReader.getRepositoryIntervalloScadenzaMessaggi());
}
else if(gestoreFiltroDuplicati instanceof org.openspcoop2.pdd.core.transazioni.FiltroDuplicati) {
if(pddContext!=null && pddContext.containsKey(CostantiPdD.FILTRO_DUPLICATI_TEST)) {
((org.openspcoop2.pdd.core.transazioni.FiltroDuplicati)gestoreFiltroDuplicati).setUseTransactionIdForTest(true);
}
}
return gestoreFiltroDuplicati;
}
}