ImbustamentoRisposte.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.pdd.mdb;
- import org.slf4j.Logger;
- import org.openspcoop2.core.constants.TipoPdD;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.exception.ParseException;
- import org.openspcoop2.pdd.config.ConfigurazionePdDManager;
- 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.GestoreMessaggi;
- import org.openspcoop2.pdd.core.PdDContext;
- import org.openspcoop2.pdd.core.state.IOpenSPCoopState;
- 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.DirectVMProtocolInfo;
- import org.openspcoop2.pdd.services.error.RicezioneBusteExternalErrorGenerator;
- import org.openspcoop2.protocol.engine.constants.Costanti;
- import org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione;
- import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
- import org.openspcoop2.protocol.registry.RegistroServiziManager;
- import org.openspcoop2.protocol.sdk.Busta;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
- import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.Inoltro;
- import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
- import org.openspcoop2.protocol.sdk.state.IState;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- /**
- * Contiene la libreria ImbustamentoRisposte
- *
- * @author Poli Andrea (apoli@link.it)
- * @author Tronci Fabio (tronci@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ImbustamentoRisposte extends GenericLib {
- public static final String ID_MODULO = "ImbustamentoRisposte";
- public ImbustamentoRisposte(Logger log) throws GenericLibException {
- super(ImbustamentoRisposte.ID_MODULO, log);
- inizializza();
- }
- @Override
- public EsitoLib _onMessage(IOpenSPCoopState openspcoopstate,
- RegistroServiziManager registroServiziManager,ConfigurazionePdDManager configurazionePdDManager,
- MsgDiagnostico msgDiag) throws OpenSPCoopStateException {
- EsitoLib esito = new EsitoLib();
- ImbustamentoRisposteMessage imbustamentoRisposteMsg = (ImbustamentoRisposteMessage) openspcoopstate.getMessageLib();
-
- /* Regupero eventuali errori di parsing. */
- ParseException parseException = null;
- if(openspcoopstate instanceof OpenSPCoopStateless) {
- OpenSPCoop2Message msgRisposta = ((OpenSPCoopStateless) openspcoopstate).getRispostaMsg();
- if(msgRisposta!=null){
- parseException = msgRisposta.getParseException();
- }
- }
-
- /* PddContext */
- PdDContext pddContext = imbustamentoRisposteMsg.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;
- try{
- protocolFactory = this.protocolFactoryManager.getProtocolFactoryByName((String) pddContext.getObject(org.openspcoop2.core.constants.Costanti.PROTOCOL_NAME));
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "ProtocolFactory.instanziazione");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- msgDiag.setPddContext(pddContext, protocolFactory);
-
- /* ID e tipo di implementazione PdD con cui interoperare */
- String idMessageRequest = openspcoopstate.getIDMessaggioSessione();
- String implementazionePdDMittente = imbustamentoRisposteMsg.getImplementazionePdDSoggettoMittente();
-
- // Busta che ha causato l'invocazione di servizio (utile per costruire eventuali messaggi Errore)
- Busta bustaRichiesta = imbustamentoRisposteMsg.getBusta();
- // Identificatore Porta Applicativa
- RichiestaApplicativa richiestaApplicativa = imbustamentoRisposteMsg.getRichiestaApplicativa();
- // Identificatore Porta Delegata
- RichiestaDelegata richiestaDelegata = imbustamentoRisposteMsg.getRichiestaDelegata();
-
- TipoPdD tipoPdD = TipoPdD.APPLICATIVA;
- if(msgDiag.getPorta()==null) {
- if(richiestaApplicativa!=null && richiestaApplicativa.getIdPortaApplicativa()!=null) {
- msgDiag.updatePorta(tipoPdD, richiestaApplicativa.getIdPortaApplicativa().getNome(), requestInfo);
- }
- else if(richiestaDelegata!=null && richiestaDelegata.getIdPortaDelegata()!=null) {
- msgDiag.updatePorta(TipoPdD.DELEGATA, richiestaDelegata.getIdPortaDelegata().getNome(), requestInfo);
- }
- }
-
- // ID della risposta
- String idMessageResponse = imbustamentoRisposteMsg.getIDMessageResponse(); // ID associato a questa risposta
- // Altri parametri:
- String idModuloInAttesa = null;
- IDSoggetto identitaPdD = null;
- String scenarioCooperazione = null;
- IDSoggetto soggettoFruitore = null;
- IDServizio idServizio = null;
- String servizioApplicativo = null;
- String profiloGestione = null;
- String servizioApplicativoFruitore = null;
- String servizioApplicativoErogatore = null;
- String idCorrelazioneApplicativa = null;
- String idCorrelazioneApplicativaRisposta = null;
- IDSoggetto soggettoErogatoreServizioHeaderIntegrazione = null;
-
- if(richiestaApplicativa!=null){
- identitaPdD = richiestaApplicativa.getDominio();
- idModuloInAttesa = richiestaApplicativa.getIdModuloInAttesa();
- scenarioCooperazione = richiestaApplicativa.getScenario();
- soggettoFruitore = richiestaApplicativa.getSoggettoFruitore();
- idServizio = richiestaApplicativa.getIDServizio();
- servizioApplicativo = richiestaApplicativa.getServizioApplicativo();
- soggettoErogatoreServizioHeaderIntegrazione = idServizio.getSoggettoErogatore();
- profiloGestione = richiestaApplicativa.getProfiloGestione();
- servizioApplicativoFruitore = richiestaApplicativa.getIdentitaServizioApplicativoFruitore();
- servizioApplicativoErogatore = richiestaApplicativa.getServizioApplicativo();
- idCorrelazioneApplicativa = richiestaApplicativa.getIdCorrelazioneApplicativa();
- idCorrelazioneApplicativaRisposta = richiestaApplicativa.getIdCorrelazioneApplicativaRisposta();
- }else{
- identitaPdD = richiestaDelegata.getDominio();
- idModuloInAttesa = richiestaDelegata.getIdModuloInAttesa();
- scenarioCooperazione = richiestaDelegata.getScenario();
- soggettoFruitore = richiestaDelegata.getIdSoggettoFruitore();
- idServizio = richiestaDelegata.getIdServizio();
- servizioApplicativo = richiestaDelegata.getServizioApplicativo();
- soggettoErogatoreServizioHeaderIntegrazione = idServizio.getSoggettoErogatore();
- profiloGestione = richiestaDelegata.getProfiloGestione();
- servizioApplicativoFruitore = richiestaDelegata.getServizioApplicativo();
- idCorrelazioneApplicativa = richiestaDelegata.getIdCorrelazioneApplicativa();
- idCorrelazioneApplicativaRisposta = richiestaDelegata.getIdCorrelazioneApplicativaRisposta();
- }
-
- IDServizio servizioHeaderIntegrazione = null;
- if(bustaRichiesta!=null){
- try{
- servizioHeaderIntegrazione = IDServizioFactory.getInstance().getIDServizioFromValues(bustaRichiesta.getTipoServizio(), bustaRichiesta.getServizio(),
- soggettoErogatoreServizioHeaderIntegrazione, bustaRichiesta.getVersioneServizio());
- // Per ricambiare il servizio in correlato per AsincronoAsimmetrico, richiestaStato
- servizioHeaderIntegrazione.setAzione(bustaRichiesta.getAzione());
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "IDServizioFactory.getIDServizioFromValues");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- }
-
- msgDiag.mediumDebug("Profilo di gestione ["+ImbustamentoRisposte.ID_MODULO+"] della busta: "+profiloGestione);
- msgDiag.setDominio(identitaPdD); // imposto anche il dominio nel msgDiag
- // Aggiornamento Informazioni
- msgDiag.setIdMessaggioRichiesta(idMessageRequest);
- msgDiag.setIdMessaggioRisposta(idMessageResponse);
- msgDiag.setFruitore(soggettoFruitore);
- if(servizioHeaderIntegrazione!=null){
- msgDiag.setServizio(servizioHeaderIntegrazione);
- }else{
- msgDiag.setServizio(idServizio);
- }
- msgDiag.setServizioApplicativo(servizioApplicativo);
- msgDiag.setIdCorrelazioneApplicativa(idCorrelazioneApplicativa);
- msgDiag.setIdCorrelazioneRisposta(idCorrelazioneApplicativaRisposta);
- msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO_RISPOSTE);
- msgDiag.addKeywords(bustaRichiesta, true);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RICHIESTA, idMessageRequest);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RISPOSTA, idMessageResponse);
- msgDiag.addKeyword(CostantiPdD.KEY_SA_EROGATORE, servizioApplicativo);
- if(servizioApplicativoFruitore!=null){
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, servizioApplicativoFruitore);
- }
- msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, idCorrelazioneApplicativa);
-
-
- /* ------------------ Inizializzo stato OpenSPCoop --------------- */
- msgDiag.mediumDebug("Inizializzo stato per la gestione della richiesta...");
- openspcoopstate.initResource(identitaPdD, ImbustamentoRisposte.ID_MODULO,idTransazione);
- registroServiziManager = registroServiziManager.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
- configurazionePdDManager = configurazionePdDManager.refreshState(registroServiziManager);
- msgDiag.updateState(configurazionePdDManager);
- /* ------------------ Inizializzazione Contesto di gestione della Richiesta --------------- */
- msgDiag.mediumDebug("Inizializzo contesto per la gestione...");
- // EJBUtils (per eventuali errori)
- EJBUtils ejbUtils = null;
- try{
- ejbUtils = new EJBUtils(identitaPdD,tipoPdD,ImbustamentoRisposte.ID_MODULO,idMessageRequest,
- idMessageResponse,Costanti.OUTBOX, openspcoopstate ,msgDiag,false,
- imbustamentoRisposteMsg.getImplementazionePdDSoggettoMittente(),
- imbustamentoRisposteMsg.getImplementazionePdDSoggettoDestinatario(),
- profiloGestione,pddContext);
- ejbUtils.setSpedizioneMsgIngresso(imbustamentoRisposteMsg.getSpedizioneMsgIngresso());
- ejbUtils.setRicezioneMsgRisposta(imbustamentoRisposteMsg.getRicezioneMsgRisposta());
- ejbUtils.setServizioApplicativoErogatore(servizioApplicativo);
- }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(soggettoFruitore, idServizio);
- generatoreErrorePA.updateInformazioniCooperazione(servizioApplicativoFruitore);
- generatoreErrorePA.updateTipoPdD(TipoPdD.APPLICATIVA);
- ejbUtils.setGeneratoreErrorePortaApplicativa(generatoreErrorePA);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "RicezioneBusteExternalErrorGenerator.instanziazione");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
-
- // Oneway versione 11
- boolean oneWayVersione11 = imbustamentoRisposteMsg.isOneWayVersione11();
- ejbUtils.setOneWayVersione11(oneWayVersione11);
- // Gestori funzionalita'
- IState statoRichiesta = openspcoopstate.getStatoRichiesta();
- ProfiloDiCollaborazione profiloCollaborazione = null;
- try{
- profiloCollaborazione = new ProfiloDiCollaborazione(statoRichiesta,protocolFactory);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "ProfiloDiCollaborazione.new");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- RepositoryBuste repositoryBuste = new RepositoryBuste(statoRichiesta, true, protocolFactory);
- // Gestore Messaggi
- GestoreMessaggi msgResponse = null; // Risposta inviata
- // 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) &&
- (imbustamentoRisposteMsg.isStateless()==false) ) {
- newConnectionForResponse = configurazionePdDManager.newConnectionForResponse();
- }
- ejbUtils.setReplyOnNewConnection(newConnectionForResponse);
-
-
- // Gestione indirizzo telematico
- boolean gestioneIndirizzoTelematico = false;
- if(imbustamentoRisposteMsg.isStateless()==false){
- gestioneIndirizzoTelematico = configurazionePdDManager.isUtilizzoIndirizzoTelematico();
- }
- ejbUtils.setUtilizzoIndirizzoTelematico(gestioneIndirizzoTelematico);
- // Punto di inizio per la transazione.
- try {
- IProtocolVersionManager protocolManager = protocolFactory.createProtocolVersionManager(profiloGestione);
- Busta bustaRisposta = null;
- TipoOraRegistrazione tipoTempo = this.propertiesReader.getTipoTempoBusta(implementazionePdDMittente);
- boolean asincronoStateless = false;
-
- /* ------------ Risposta Profilo Sincrono ------------- */
- if(Costanti.SCENARIO_SINCRONO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione)){
- try{
- msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Sincrono...");
- bustaRisposta = profiloCollaborazione.sincrono_generaBustaRisposta(idMessageRequest,tipoTempo);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "profiloCollaborazione.sincrono_generaBustaRisposta");
- ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
- parseException);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "profiloCollaborazione.sincrono_generaBustaRisposta");
- return esito;
- }
- }
- /* ------------ Invocazione Asincrono Simmetrico ------------- */
- else if(Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ){
- try{
- msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Asincrono Simmetrico (richiesta)...");
- bustaRisposta = profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(idMessageRequest,idMessageRequest,true,tipoTempo);
- asincronoStateless = imbustamentoRisposteMsg.isStateless();
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(Richiesta)");
- ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
- parseException);
- openspcoopstate.releaseResource();
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(Richiesta)");
- esito.setEsitoInvocazione(true); return esito;
- }
- }
- /* ------------ Risposta Asincrono Simmetrico ------------- */
- else if(Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA.equals(scenarioCooperazione) ){
- try{
- msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Asincrono Simmetrico (risposta)...");
- bustaRisposta = profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(protocolManager.getIdCorrelazioneAsincrona(bustaRichiesta),idMessageRequest,false,tipoTempo);
- if(bustaRisposta!=null){
- bustaRisposta.setRiferimentoMsgBustaRichiedenteServizio(bustaRichiesta.getRiferimentoMessaggio());
- // La ricevuta deve avere l'azione della risposta
- bustaRisposta.setAzione(bustaRichiesta.getAzione());
- }
- asincronoStateless = imbustamentoRisposteMsg.isStateless();
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(Risposta)");
- ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
- parseException);
- openspcoopstate.releaseResource();
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "profiloCollaborazione.asincronoSimmetrico_getBustaRicevuta(Risposta)");
- esito.setEsitoInvocazione(true); return esito;
- }
- }
- /* ------------ Invocazione Asincrono Asimmetrico ------------- */
- else if(Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO.equals(scenarioCooperazione) ){
- try{
- boolean generazionAttributiAsincroni = protocolManager.isGenerazioneInformazioniServizioCorrelatoAsincronoAsimmetrico() &&
- this.propertiesReader.isGenerazioneAttributiAsincroni(implementazionePdDMittente);
- msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Asincrono Asimmetrico (richiesta)...");
- bustaRisposta = profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(idMessageRequest,idMessageRequest,true,generazionAttributiAsincroni,tipoTempo);
- asincronoStateless = imbustamentoRisposteMsg.isStateless();
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(Richiesta)");
- ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
- parseException);
- openspcoopstate.releaseResource();
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(Richiesta)");
- esito.setEsitoInvocazione(true); return esito;
- }
- }
- /* ------------ Risposta Asincrono Asimmetrico ------------- */
- else if(Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING.equals(scenarioCooperazione) ){
- try{
- msgDiag.mediumDebug("Generazione busta per il profilo di Collaborazione Asincrono Asimmetrico (richiestaStato)...");
- boolean generazionAttributiAsincroni = protocolManager.isGenerazioneInformazioniServizioCorrelatoAsincronoAsimmetrico() &&
- this.propertiesReader.isGenerazioneAttributiAsincroni(implementazionePdDMittente);
- bustaRisposta = profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(protocolManager.getIdCorrelazioneAsincrona(bustaRichiesta),idMessageRequest,false,generazionAttributiAsincroni,tipoTempo);
- if(bustaRisposta!=null){
- bustaRisposta.setRiferimentoMsgBustaRichiedenteServizio(bustaRichiesta.getRiferimentoMessaggio());
- // La ricevuta deve avere l'azione della richiesta-stato
- bustaRisposta.setAzione(bustaRichiesta.getAzione());
- }
- asincronoStateless = imbustamentoRisposteMsg.isStateless();
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(Risposta)");
- ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
- parseException);
- openspcoopstate.releaseResource();
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "profiloCollaborazione.asincronoAsimmetrico_getBustaRicevuta(Risposta)");
- esito.setEsitoInvocazione(true); return esito;
- }
- }
- /* ------ Check Busta di Risposta ------- */
- msgDiag.mediumDebug("Check busta...");
- if(bustaRisposta==null){
- throw new Exception("Busta di risposta ["+scenarioCooperazione+"] non generata.");
- }
- switch (protocolManager.getConsegnaAffidabile(bustaRisposta)) {
- case ABILITATA:
- bustaRisposta.setConfermaRicezione(true);
- break;
- case DISABILITATA:
- bustaRisposta.setConfermaRicezione(false);
- break;
- default:
- // valore della busta di risposta
- break;
- }
-
- switch (protocolManager.getFiltroDuplicati(bustaRisposta)) {
- case ABILITATA:
- bustaRisposta.setInoltro(Inoltro.SENZA_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.SENZA_DUPLICATI));
- break;
- case DISABILITATA:
- bustaRisposta.setInoltro(Inoltro.CON_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.CON_DUPLICATI));
- break;
- default:
- // valore della busta di risposta
- }
-
- /* -------------- Aggiungo ID Risposta ------------------- */
- bustaRisposta.setID(idMessageResponse);
- msgDiag.addKeywords(bustaRisposta, false);
-
-
- /* -------------- Aggiungo SA Applicativo Erogatore ------------------- */
- bustaRisposta.setServizioApplicativoErogatore(servizioApplicativoErogatore);
- /* -------------- Imposto eventuali informazioni DirectVM ------------------- */
- DirectVMProtocolInfo.setInfoFromContext(pddContext, bustaRisposta);
-
-
- /* ------------ Spedizione Risposta ------------- */
- msgDiag.mediumDebug("Spedizione busta di risposta al modulo in uscita (RicezioneBuste/InoltroRisposte)...");
- msgResponse =
- ejbUtils.sendBustaRisposta(idModuloInAttesa,bustaRisposta,profiloGestione,
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore);
- // elimino utilizzo PdD della richiesta
- msgDiag.mediumDebug("Elimino utilizzo busta dalla PdD...");
- repositoryBuste.eliminaUtilizzoPdDFromInBox(idMessageRequest,asincronoStateless);
- // Commit JDBC
- openspcoopstate.commit();
- // Aggiornamento cache messaggio
- if(msgResponse!=null)
- msgResponse.addMessaggiIntoCache_readFromTable(ImbustamentoRisposte.ID_MODULO, "risposta");
- // Aggiornamento cache proprietario messaggio
- if(msgResponse!=null)
- msgResponse.addProprietariIntoCache_readFromTable(ImbustamentoRisposte.ID_MODULO, "risposta",idMessageRequest,false);
- // Rilascio connessione
- msgDiag.mediumDebug("Rilascio connessione al database...");
- openspcoopstate.releaseResource();
- msgDiag.mediumDebug("Lavoro Terminato.");
- esito.setStatoInvocazione(EsitoLib.OK, null);
- esito.setEsitoInvocazione(true); return esito;
- }catch(Throwable e){
- this.log.error("ErroreGenerale",e);
- msgDiag.logErroreGenerico(e, "Generale");
-
- try{
- ejbUtils.sendAsRispostaBustaErroreProcessamento(idModuloInAttesa,bustaRichiesta,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),
- idCorrelazioneApplicativa,idCorrelazioneApplicativaRisposta,servizioApplicativoFruitore,e,
- parseException);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"ErroreGenerale");
- esito.setEsitoInvocazione(true);
- }catch(Exception er){
- msgDiag.logErroreGenerico(er,"ejbUtils.sendErroreGenerale(profiloConRisposta)");
- ejbUtils.rollbackMessage("Spedizione Errore al Mittente durante una richiesta con gestione della risposta non riuscita", esito);
- esito.setStatoInvocazioneErroreNonGestito(er);
- esito.setEsitoInvocazione(false);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }
- }