Imbustamento.java
- /*
- * GovWay - A customizable API Gateway
- * https://govway.org
- *
- * Copyright (c) 2005-2025 Link.it srl (https://link.it).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 3, as published by
- * the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- *
- */
- package org.openspcoop2.pdd.mdb;
- import java.util.Date;
- import org.openspcoop2.core.config.PortaDelegata;
- import org.openspcoop2.core.config.ServizioApplicativo;
- import org.openspcoop2.core.config.driver.DriverConfigurazioneNotFound;
- import org.openspcoop2.core.constants.TipoPdD;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDServizioApplicativo;
- import org.openspcoop2.core.id.IDSoggetto;
- 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.ConfigurazionePdDManager;
- 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.OpenSPCoopState;
- import org.openspcoop2.pdd.core.state.OpenSPCoopStateException;
- import org.openspcoop2.pdd.core.state.OpenSPCoopStateful;
- import org.openspcoop2.pdd.core.state.OpenSPCoopStateless;
- import org.openspcoop2.pdd.logger.MsgDiagnosticiProperties;
- import org.openspcoop2.pdd.logger.MsgDiagnostico;
- import org.openspcoop2.pdd.services.error.RicezioneContenutiApplicativiInternalErrorGenerator;
- import org.openspcoop2.protocol.engine.constants.Costanti;
- import org.openspcoop2.protocol.engine.driver.ConsegnaInOrdine;
- import org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione;
- import org.openspcoop2.protocol.engine.driver.RepositoryBuste;
- import org.openspcoop2.protocol.engine.driver.Riscontri;
- import org.openspcoop2.protocol.registry.RegistroServiziManager;
- import org.openspcoop2.protocol.sdk.Busta;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.Integrazione;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.Servizio;
- import org.openspcoop2.protocol.sdk.builder.ProprietaErroreApplicativo;
- import org.openspcoop2.protocol.sdk.config.IProtocolConfiguration;
- import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
- import org.openspcoop2.protocol.sdk.config.ITraduttore;
- import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroriIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
- import org.openspcoop2.protocol.sdk.constants.InitialIdConversationType;
- import org.openspcoop2.protocol.sdk.constants.Inoltro;
- import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
- import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.protocol.sdk.state.StatelessMessage;
- import org.openspcoop2.utils.Utilities;
- import org.openspcoop2.utils.date.DateManager;
- import org.openspcoop2.utils.date.DateUtils;
- import org.slf4j.Logger;
- /**
- * Contiene la libreria Imbustamento
- *
- * @author Poli Andrea (apoli@link.it)
- * @author Tronci Fabio (tronci@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class Imbustamento extends GenericLib{
- public static final String ID_MODULO = "Imbustamento";
- public Imbustamento(Logger log) throws GenericLibException {
- super(Imbustamento.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 {
- EsitoLib esito = new EsitoLib();
- ImbustamentoMessage imbustamentoMsg = (ImbustamentoMessage) openspcoopstate.getMessageLib();
-
- /* PddContext */
- PdDContext pddContext = imbustamentoMsg.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(imbustamentoMsg.getRichiestaDelegata().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);
-
- /* ID e tipo di implementazione PdD con cui interoperare */
- String idMessageRequest = openspcoopstate.getIDMessaggioSessione();
- String implementazionePdDDestinatario = imbustamentoMsg.getImplementazionePdDSoggettoDestinatario();
-
- RichiestaDelegata richiestaDelegata = imbustamentoMsg.getRichiestaDelegata();
- if(richiestaDelegata==null) {
- msgDiag.logErroreGenerico("RichiestaDelegata is null", "RichiestaDelegata.checkNull");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- return esito;
- }
- IDSoggetto identitaPdD = imbustamentoMsg.getRichiestaDelegata().getDominio();
- TipoPdD tipoPdD = TipoPdD.DELEGATA;
- msgDiag.setDominio(identitaPdD); // imposto anche il dominio nel msgDiag
- // Aggiornamento Informazioni messaggio diagnostico
- msgDiag.setPrefixMsgPersonalizzati(MsgDiagnosticiProperties.MSG_DIAG_IMBUSTAMENTO);
- msgDiag.setIdMessaggioRichiesta(idMessageRequest);
- msgDiag.addKeyword(CostantiPdD.KEY_ID_MESSAGGIO_RICHIESTA, idMessageRequest);
- if(msgDiag.getPorta()==null) {
- if(richiestaDelegata!=null && richiestaDelegata.getIdPortaDelegata()!=null) {
- msgDiag.updatePorta(tipoPdD, richiestaDelegata.getIdPortaDelegata().getNome(), requestInfo);
- }
- }
- msgDiag.setFruitore(richiestaDelegata.getIdSoggettoFruitore());
- msgDiag.addKeywords(richiestaDelegata.getIdSoggettoFruitore());
- msgDiag.setServizio(richiestaDelegata.getIdServizio());
- msgDiag.addKeywords(richiestaDelegata.getIdServizio());
- msgDiag.setServizioApplicativo(richiestaDelegata.getServizioApplicativo());
- msgDiag.addKeyword(CostantiPdD.KEY_SA_FRUITORE, richiestaDelegata.getServizioApplicativo());
- if(richiestaDelegata.getProfiloCollaborazione()!=null)
- msgDiag.addKeyword(CostantiPdD.KEY_PROFILO_COLLABORAZIONE,traduttore.toString(richiestaDelegata.getProfiloCollaborazione()));
- msgDiag.setIdCorrelazioneApplicativa(richiestaDelegata.getIdCorrelazioneApplicativa());
- msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_APPLICATIVA, richiestaDelegata.getIdCorrelazioneApplicativa());
- msgDiag.addKeyword(CostantiPdD.KEY_FUNZIONALITA_COLLABORAZIONE, imbustamentoMsg.getInfoServizio().getCollaborazione()+"");
- msgDiag.addKeyword(CostantiPdD.KEY_FUNZIONALITA_CONFERMA_RICEZIONE, imbustamentoMsg.getInfoServizio().getConfermaRicezione()+"");
- msgDiag.addKeyword(CostantiPdD.KEY_FUNZIONALITA_FILTRO_DUPLICATI, Inoltro.SENZA_DUPLICATI.equals(imbustamentoMsg.getInfoServizio().getInoltro()) + "");
-
-
- // ProprietaErroreApplicativo
- ProprietaErroreApplicativo proprietaErroreAppl = richiestaDelegata.getFault();
- proprietaErroreAppl.setIdModulo(Imbustamento.ID_MODULO);
-
- // GeneratoreErrore
- RicezioneContenutiApplicativiInternalErrorGenerator generatoreErrore = null;
- try{
- generatoreErrore = new RicezioneContenutiApplicativiInternalErrorGenerator(this.log, this.idModulo, requestInfo);
- generatoreErrore.updateInformazioniCooperazione(richiestaDelegata.getIdSoggettoFruitore(), richiestaDelegata.getIdServizio());
- generatoreErrore.updateInformazioniCooperazione(richiestaDelegata.getServizioApplicativo());
- generatoreErrore.updateProprietaErroreApplicativo(proprietaErroreAppl);
- }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, Imbustamento.ID_MODULO,idTransazione);
- registroServiziManager = registroServiziManager.refreshState(openspcoopstate.getStatoRichiesta(),openspcoopstate.getStatoRisposta());
- configurazionePdDManager = configurazionePdDManager.refreshState(registroServiziManager);
- msgDiag.updateState(configurazionePdDManager);
- /* ------------------ Inizializzazione Contesto di gestione --------------- */
- msgDiag.mediumDebug("Inizializzo contesto per la gestione...");
- // EJBUtils (per eventuali errori)
- EJBUtils ejbUtils = null;
- try{
- ejbUtils = new EJBUtils(identitaPdD,tipoPdD,Imbustamento.ID_MODULO,idMessageRequest,
- idMessageRequest,Costanti.OUTBOX,openspcoopstate,msgDiag,false,
- imbustamentoMsg.getImplementazionePdDSoggettoMittente(),
- imbustamentoMsg.getImplementazionePdDSoggettoDestinatario(),
- imbustamentoMsg.getRichiestaDelegata().getProfiloGestione(),pddContext);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "EJBUtils.new");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- return esito;
- }
- // Oneway versione 11
- boolean oneWayVersione11 = imbustamentoMsg.isOneWayVersione11();
- ejbUtils.setOneWayVersione11(oneWayVersione11);
- // Gestori funzionalita'
- RepositoryBuste repositoryBuste = new RepositoryBuste(openspcoopstate.getStatoRichiesta(), true,protocolFactory);
- Riscontri gestoreRiscontri = new Riscontri(openspcoopstate.getStatoRichiesta());
- 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;
- }
- ConsegnaInOrdine ordineConsegna = new ConsegnaInOrdine(openspcoopstate.getStatoRichiesta(),protocolFactory);
- GestoreMessaggi msgRequest = null;
- GestoreMessaggi msgOK = null; // Evenutuale busta OK (rigirata a ID_MODULO o a RICEZIONE_CONTENUTI_APPLICATIVI)
- Servizio infoServizio = imbustamentoMsg.getInfoServizio();
- String riferimentoServizioCorrelato = imbustamentoMsg.getRiferimentoServizioCorrelato();
- boolean isServizioCorrelato = infoServizio.isCorrelato();
- IDServizio idServizio = richiestaDelegata.getIdServizio();
- IDSoggetto soggettoFruitore = richiestaDelegata.getIdSoggettoFruitore();
-
- // Punto di inizio per la transazione.
- PortaDelegata pd = null;
- ServizioApplicativo sa = null;
- try{
-
- /**---- Check Utilizzo Consegna Risposta Asincrona */
- msgDiag.mediumDebug("Check utilizzo consegna risposta asincrona...");
- // Non deve essere utilizzata solo nel caso di richiesta con profilo AsincronoSimmetrico
- if( !(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO) &&
- riferimentoServizioCorrelato==null
- && isServizioCorrelato==false) ){
- // di default la ricezioneAsincrona viene utilizzata.
- // Per i casi di :
- // - profiloOneWay
- // - profiloSincrono
- // - profiloAsincronoSimmetrico solo in consegna risposta
- // - profiloAsincronoAsimmetrico
- richiestaDelegata.setUtilizzoConsegnaAsincrona(true);
- }
- Utilities.printFreeMemory("Imbustamento - Costruzione busta ...");
- /* --- Costruzione/Registrazione Busta ----- */
- msgDiag.mediumDebug("Costruzione busta ...");
- Busta busta = new Busta(protocolFactory.getProtocol());
- // identificatore del servizio richiesto
- busta.setTipoDestinatario(idServizio.getSoggettoErogatore().getTipo());
- busta.setDestinatario(idServizio.getSoggettoErogatore().getNome());
- busta.setIdentificativoPortaDestinatario(idServizio.getSoggettoErogatore().getCodicePorta());
- busta.setIndirizzoDestinatario(imbustamentoMsg.getIndirizzoSoggettoDestinatario());
-
- busta.setVersioneServizio(idServizio.getVersione());
- busta.setServizio(idServizio.getNome());
- busta.setTipoServizio(idServizio.getTipo());
- busta.setAzione(idServizio.getAzione());
- // mittente della richiesta
- busta.setTipoMittente(soggettoFruitore.getTipo());
- busta.setMittente(soggettoFruitore.getNome());
- busta.setIdentificativoPortaMittente(soggettoFruitore.getCodicePorta());
- busta.setIndirizzoMittente(imbustamentoMsg.getIndirizzoSoggettoMittente());
-
- busta.setServizioApplicativoFruitore(richiestaDelegata.getServizioApplicativo());
- // Informazioni protocollo
- msgDiag.highDebug("Costruzione Busta con ID = "+idMessageRequest);
- busta.setID(idMessageRequest);
- Date oraRegistrazione = DateManager.getDate();
- msgDiag.highDebug("Costruzione Busta in data : ["+oraRegistrazione+"]");
- busta.setOraRegistrazione(oraRegistrazione);
- TipoOraRegistrazione tipoOraRegistrazione = this.propertiesReader.getTipoTempoBusta(implementazionePdDDestinatario);
- busta.setTipoOraRegistrazione(tipoOraRegistrazione,protocolFactory.createTraduttore().toString(tipoOraRegistrazione));
- busta.setScadenza(infoServizio.getScadenza());
- long scadenzaBusta = infoServizio.getScadenzaMinuti();
- if(scadenzaBusta<=0){
- scadenzaBusta = this.propertiesReader.getRepositoryIntervalloScadenzaMessaggi();
- }
-
- switch (protocolManager.getFiltroDuplicati(infoServizio)) {
- case ABILITATA:
- busta.setInoltro(Inoltro.SENZA_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.SENZA_DUPLICATI));
- break;
- case DISABILITATA:
- busta.setInoltro(Inoltro.CON_DUPLICATI,protocolFactory.createTraduttore().toString(Inoltro.CON_DUPLICATI));
- break;
- default:
- busta.setInoltro(infoServizio.getInoltro(),protocolFactory.createTraduttore().toString(infoServizio.getInoltro()));
- break;
- }
-
- boolean consegnaAffidabile = false;
- switch (protocolManager.getConsegnaAffidabile(infoServizio)) {
- case ABILITATA:
- consegnaAffidabile = true;
- break;
- case DISABILITATA:
- consegnaAffidabile = false;
- break;
- default:
- consegnaAffidabile = this.propertiesReader.isGestioneRiscontri(implementazionePdDDestinatario) && infoServizio.getConfermaRicezione();
- break;
- }
-
- boolean idCollaborazione = false;
- switch (protocolManager.getCollaborazione(infoServizio)) {
- case ABILITATA:
- idCollaborazione = true;
- break;
- case DISABILITATA:
- idCollaborazione = false;
- break;
- default:
- idCollaborazione = this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDDestinatario) && infoServizio.getCollaborazione();
- break;
- }
- String idCollaborazioneCapostipite = null;
- if(idCollaborazione) {
- InitialIdConversationType initial = protocolFactory.createProtocolConfiguration().isGenerateInitialIdConversation(TipoPdD.DELEGATA, FunzionalitaProtocollo.COLLABORAZIONE);
- if(InitialIdConversationType.ID_TRANSAZIONE.equals(initial)) {
- idCollaborazioneCapostipite = idTransazione;
- }
- else if(InitialIdConversationType.ID_MESSAGGIO.equals(initial)) {
- idCollaborazioneCapostipite = idMessageRequest;
- }
- }
-
- boolean idRiferimentoMessaggioRichiesta = false;
- switch (protocolManager.getIdRiferimentoRichiesta(infoServizio)) {
- case ABILITATA:
- idRiferimentoMessaggioRichiesta = true;
- break;
- case DISABILITATA:
- idRiferimentoMessaggioRichiesta = false;
- break;
- default:
- idRiferimentoMessaggioRichiesta = this.propertiesReader.isGestioneElementoIdRiferimentoRichiesta(implementazionePdDDestinatario) && infoServizio.getIdRiferimentoRichiesta();
- break;
- }
-
- boolean consegnaInOrdine = false;
- switch (protocolManager.getConsegnaInOrdine(infoServizio)) {
- case ABILITATA:
- consegnaInOrdine = true;
- break;
- case DISABILITATA:
- consegnaInOrdine = false;
- break;
- default:
- consegnaInOrdine = this.propertiesReader.isGestioneConsegnaInOrdine(implementazionePdDDestinatario) && infoServizio.getOrdineConsegna();
- break;
- }
-
-
-
-
- /* ----------- ConsegnaAffidabile ------------- */
- if( consegnaAffidabile )
- busta.setConfermaRicezione(true);
- else
- busta.setConfermaRicezione(false);
-
- /* ----------- Lettura PortaDelegata e Servizio Applicativo ------------- */
- pd = configurazionePdDManager.getPortaDelegata(richiestaDelegata.getIdPortaDelegata(), requestInfo);
- try{
- IDServizioApplicativo idSA = new IDServizioApplicativo();
- idSA.setNome(richiestaDelegata.getServizioApplicativo());
- idSA.setIdSoggettoProprietario(richiestaDelegata.getIdSoggettoFruitore());
- sa = configurazionePdDManager.getServizioApplicativo(idSA, requestInfo);
- }catch(DriverConfigurazioneNotFound e){
- if(CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO.equals(richiestaDelegata.getServizioApplicativo())==false)
- throw e;
- }
-
-
- // ------------- 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(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),infoServizio.getProfiloDiCollaborazione())==false){
- throw new Exception("Profilo di Collaborazione ["+infoServizio.getProfiloDiCollaborazione().getEngineValue()+"]");
- }
- if(busta.getInoltro()!=null && Inoltro.SENZA_DUPLICATI.equals(busta.getInoltro())){
- 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(idRiferimentoMessaggioRichiesta){
- if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA)==false){
- throw new Exception(FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA.getEngineValue());
- }
- }
- if(consegnaInOrdine){
- if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.CONSEGNA_IN_ORDINE)==false){
- throw new Exception(FunzionalitaProtocollo.CONSEGNA_IN_ORDINE.getEngineValue());
- }
- }
- if(infoServizio.getScadenza()!=null){
- if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.SCADENZA)==false){
- throw new Exception(FunzionalitaProtocollo.SCADENZA.getEngineValue());
- }
- }
- if(configurazionePdDManager.isGestioneManifestAttachments(pd,protocolFactory)){
- if(protocolConfiguration.isSupportato(requestInfo.getIntegrationServiceBinding(),FunzionalitaProtocollo.MANIFEST_ATTACHMENTS)==false){
- throw new Exception(FunzionalitaProtocollo.MANIFEST_ATTACHMENTS.getEngineValue());
- }
- }
- }catch(Exception e){
- msgDiag.addKeywordErroreProcessamento(e);
- msgDiag.logPersonalizzato("protocolli.funzionalita.unsupported");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_439_FUNZIONALITA_NOT_SUPPORTED_BY_PROTOCOL.
- getErrore439_FunzionalitaNotSupportedByProtocol(e.getMessage(), protocolFactory),e,
- null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("protocolli.funzionalita.unsupported"));
- return esito;
- }
-
-
-
-
-
-
-
- /* ------------ Check Consegna in Ordine che sia con profilo OneWay
- e che rispetti vincoli ------------- */
- // Sequenza: deve essere abilitata la consegna affidabile + la collaborazione e infine la consegna in ordine
-
- if( consegnaInOrdine ){
- msgDiag.mediumDebug("Check vincoli consegna in ordine...");
- if ( infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY)==false) {
- msgDiag.addKeyword(CostantiPdD.KEY_PROFILO_COLLABORAZIONE, traduttore.toString(infoServizio.getProfiloDiCollaborazione()));
- msgDiag.logPersonalizzato("consegnaInOrdine.profiloNonOneway");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_414_CONSEGNA_IN_ORDINE_CON_PROFILO_NO_ONEWAY.getErroreIntegrazione(),null,
- null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.profiloNonOneway"));
- return esito;
- }
- if(this.propertiesReader.isGestioneRiscontri(implementazionePdDDestinatario)==false){
- msgDiag.logPersonalizzato("consegnaInOrdine.confermaRicezioneNonRichiesta");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_415_CONSEGNA_IN_ORDINE_SENZA_VINCOLI_RICHIESTI.getErroreIntegrazione(),null,
- null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.confermaRicezioneNonRichiesta"));
- return esito;
- }
- if(this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDDestinatario)==false){
- msgDiag.logPersonalizzato("consegnaInOrdine.idCollaborazioneNonRichiesto");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_415_CONSEGNA_IN_ORDINE_SENZA_VINCOLI_RICHIESTI.getErroreIntegrazione(),null,
- null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.idCollaborazioneNonRichiesto"));
- return esito;
- }
- if(infoServizio.getCollaborazione()==false || infoServizio.getConfermaRicezione()==false || Inoltro.SENZA_DUPLICATI.equals(infoServizio.getInoltro())==false){
- msgDiag.logPersonalizzato("consegnaInOrdine.funzionalitaMancanti");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.NOT_SUPPORTED_BY_PROTOCOL,
- ErroriIntegrazione.ERRORE_415_CONSEGNA_IN_ORDINE_SENZA_VINCOLI_RICHIESTI.getErroreIntegrazione(),null,
- null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("consegnaInOrdine.funzionalitaMancanti"));
- return esito;
- }
- }
- boolean gestioneConsegnaInOrdineAbilitata = consegnaInOrdine &&
- this.propertiesReader.isGestioneRiscontri(implementazionePdDDestinatario) &&
- this.propertiesReader.isGestioneElementoCollaborazione(implementazionePdDDestinatario) &&
- this.propertiesReader.isGestioneConsegnaInOrdine(implementazionePdDDestinatario);
- /* ----------- Verifica connessione per le funzionalità che la richiedono ------------- */
- if(consegnaAffidabile ||
- gestioneConsegnaInOrdineAbilitata ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione()) ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(infoServizio.getProfiloDiCollaborazione())
- ) {
- if(openspcoopstate.resourceReleased()) {
- // inizializzo
- ((OpenSPCoopState)openspcoopstate).setUseConnection(true);
- openspcoopstate.initResource(identitaPdD, this.idModulo, idTransazione);
- gestoreRiscontri.updateState(openspcoopstate.getStatoRichiesta());
- ordineConsegna.updateState(openspcoopstate.getStatoRichiesta());
- profiloCollaborazione.updateState(openspcoopstate.getStatoRichiesta());
- repositoryBuste.updateState(openspcoopstate.getStatoRichiesta());
- }
- }
-
-
-
-
-
-
-
-
- Utilities.printFreeMemory("Imbustamento - Gestione profilo di Collaborazione...");
- /* ------------ Profilo di Collaborazione ------------- */
- boolean generazioneMsgOK = false;
- String scenarioCooperazione = null;
- if(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY)) {
- msgDiag.mediumDebug("Gestione profilo di Collaborazione OneWay ...");
- // MessaggioSingoloOneWay
- busta.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY);
- scenarioCooperazione = Costanti.SCENARIO_ONEWAY_INVOCAZIONE_SERVIZIO;
- // Collaborazione
- if( idCollaborazione ){
- if(imbustamentoMsg.getIdCollaborazione()!=null)
- busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
- else
- busta.setCollaborazione(idCollaborazioneCapostipite);
- }
-
- // RiferimentoMessaggio
- if( idRiferimentoMessaggioRichiesta ){
- if(imbustamentoMsg.getIdRiferimentoMessaggio()!=null)
- busta.setRiferimentoMessaggio(imbustamentoMsg.getIdRiferimentoMessaggio());
- }
- if(gestioneConsegnaInOrdineAbilitata && infoServizio.getOrdineConsegna()){
- if(oneWayVersione11 || openspcoopstate instanceof OpenSPCoopStateful){
- msgDiag.mediumDebug("Gestione profilo di Collaborazione OneWay (consegna in ordine)...");
- try{
- ordineConsegna.setNextSequenza_daInviare(busta);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "ordineConsegna.setNextSequenza_daInviare");
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "ordineConsegna.setNextSequenza_daInviare");
- return esito;
- }
- }
- }
- // Modalita di trasmissione sincrona/asincrona
- if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())==false){
- generazioneMsgOK = true;
- }
- else{
- generazioneMsgOK = false;
- }
- } else if(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO)) {
- msgDiag.mediumDebug("Gestione profilo di Collaborazione Sincrono ...");
- // Profilo Sincrono
- busta.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO);
- scenarioCooperazione = Costanti.SCENARIO_SINCRONO_INVOCAZIONE_SERVIZIO;
- try {
- msgDiag.mediumDebug("Gestione profilo di Collaborazione Sincrono (Registrazione Busta da inviare)...");
- profiloCollaborazione.registraBustaInviata(idMessageRequest);
- } catch(ProtocolException e){
- msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.registraBustaInviata");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,
- null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO, "profiloDiCollaborazione.registraBustaInviata");
- return esito;
- }
- // Collaborazione
- if( idCollaborazione ){
- if(imbustamentoMsg.getIdCollaborazione()!=null)
- busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
- else
- busta.setCollaborazione(idCollaborazioneCapostipite);
- }
-
- // RiferimentoMessaggio
- if( idRiferimentoMessaggioRichiesta ){
- if(imbustamentoMsg.getIdRiferimentoMessaggio()!=null)
- busta.setRiferimentoMessaggio(imbustamentoMsg.getIdRiferimentoMessaggio());
- }
- }else if(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO)) {
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico ...");
- // Profilo Asincrono Simmetrico
- busta.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO);
- // deve essere generato un msg OK se non e' abilitata la funzionalita' di ricevuta asincrona
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico (check ricevuta abilitata)...");
- richiestaDelegata.setRicevutaAsincrona(configurazionePdDManager.ricevutaAsincronaSimmetricaAbilitata(pd));
-
- // Modalita di trasmissione stateless/stateful
- if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())==false){
- generazioneMsgOK = !richiestaDelegata.isRicevutaAsincrona();
- }
- else{
- generazioneMsgOK = false;
- }
- // Richiesta Asincrona
- if(riferimentoServizioCorrelato==null && isServizioCorrelato==false){
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico richiesta...");
- // check autenticazione richiesta
- if(CostantiPdD.SERVIZIO_APPLICATIVO_ANONIMO.equals(richiestaDelegata.getServizioApplicativo())){
- msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.saAnonimo");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.AUTHENTICATION,
- ErroriIntegrazione.ERRORE_410_AUTENTICAZIONE_RICHIESTA.getErroreIntegrazione(),null,
- null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("profiloAsincronoSimmetrico.saAnonimo"));
- return esito;
- }
- // check esistenza consegna risposta asincrona
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico richiesta (consegna asincrona)...");
- boolean existsConsegnaRispostaAsincrona = false;
- try{
- existsConsegnaRispostaAsincrona = configurazionePdDManager.existsConsegnaRispostaAsincrona(sa);
- }catch(Exception e){
- msgDiag.logErroreGenerico(e, "existsConsegnaRispostaAsincrona("+sa+")");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_536_CONFIGURAZIONE_NON_DISPONIBILE),e,null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "existsConsegnaRispostaAsincrona("+sa+")");
- return esito;
- }
- if (existsConsegnaRispostaAsincrona == false){
- msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.saSenzaRispostaAsincrona");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_411_RICEZIONE_CONTENUTI_ASINCRONA_RICHIESTA.getErroreIntegrazione(),null,null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("profiloAsincronoSimmetrico.saSenzaRispostaAsincrona"));
- return esito;
- }
- scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_SIMMETRICO_INVOCAZIONE_SERVIZIO;
- // impostazione dati servizio correlato
- if(infoServizio.getServizioCorrelato()==null || infoServizio.getTipoServizioCorrelato()==null){
- msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.servizioCorrelatoNonEsistente");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_408_SERVIZIO_CORRELATO_NON_TROVATO.getErroreIntegrazione(),null,null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- msgDiag.getMessaggio_replaceKeywords("profiloAsincronoSimmetrico.servizioCorrelatoNonEsistente"));
- return esito;
- }
- // PRODUZIONE tipo e nome Servizio Correlato
- if( protocolManager.isGenerazioneInformazioniServizioCorrelatoAsincronoSimmetrico() &&
- this.propertiesReader.isGenerazioneAttributiAsincroni(implementazionePdDDestinatario)){
- busta.setServizioCorrelato(infoServizio.getServizioCorrelato());
- busta.setTipoServizioCorrelato(infoServizio.getTipoServizioCorrelato());
- }
- // Collaborazione (per gli asincroni devono sempre essere presenti)
- if( idCollaborazione ){
- if(imbustamentoMsg.getIdCollaborazione()!=null)
- busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
- else
- busta.setCollaborazione(idCollaborazioneCapostipite);
- }
- // registrazione richiesta asincrona simmetrica
- try{
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico richiesta (registrazione busta da inviare)...");
-
- Integrazione infoIntegrazione = null;
- if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())){
- infoIntegrazione = new Integrazione();
- infoIntegrazione.setIdModuloInAttesa(this.idModulo);
- infoIntegrazione.setNomePorta(richiestaDelegata.getIdPortaDelegata().getNome());
- infoIntegrazione.setServizioApplicativo(richiestaDelegata.getServizioApplicativo());
-
- if(busta.getScadenza()==null){
- busta.setScadenza(new Date(DateManager.getTimeMillis()+(scadenzaBusta*60*1000)));
- }
- if(openspcoopstate instanceof OpenSPCoopStateless){
- ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(busta);
- }
- }
- profiloCollaborazione.asincronoSimmetrico_registraRichiestaInviata(idMessageRequest,busta.getCollaborazione(),
- infoServizio.getTipoServizioCorrelato(),
- infoServizio.getServizioCorrelato(),
- infoServizio.getVersioneServizioCorrelato(),
- richiestaDelegata.isRicevutaAsincrona(),infoIntegrazione,scadenzaBusta);
- }catch(ProtocolException e){
- msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.asincronoSimmetrico_registraRichiestaInviata");
- openspcoopstate.releaseResource();
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "profiloDiCollaborazione.asincronoSimmetrico_registraRichiestaInviata");
- return esito;
- }
- // Non deve essere utilizzato la definizione dell'elemento 'ricezioneRispostaAsincrona'
- // per ritornare la ricevuta o l'ok.
- // L'elemento 'ricezioneRispostaAsincrona' sara' utilizzato per ritornare la risposta.
- richiestaDelegata.setUtilizzoConsegnaAsincrona(false);
- }
- // Risposta Asincrona
- else{
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico risposta...");
-
- scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_SIMMETRICO_CONSEGNA_RISPOSTA;
- msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_ASINCRONA, riferimentoServizioCorrelato);
- msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.risposta.correlazioneRichiesta");
-
- if(openspcoopstate instanceof OpenSPCoopStateless){
-
- if(busta.getScadenza()==null){
- busta.setScadenza(new Date(DateManager.getTimeMillis()+(scadenzaBusta*60*1000)));
- }
-
- ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(busta);
- }
-
- // imposto dati risposta
- try{
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico risposta (lettura busta risposta)...");
- Busta rispostaAsincrona = profiloCollaborazione.asincronoSimmetrico_getBustaRisposta(riferimentoServizioCorrelato,idMessageRequest,scadenzaBusta);
- // Check di coerenza
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoSimmetrico risposta (check coerenza)...");
- if( busta.getTipoMittente().equals(rispostaAsincrona.getTipoDestinatario())==false){
- throw new ProtocolException("Il tipo di mittente della risposta non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
- }
- if( busta.getMittente().equals(rispostaAsincrona.getDestinatario())==false){
- throw new ProtocolException("Il mittente della risposta non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
- }
- if( busta.getTipoDestinatario().equals(rispostaAsincrona.getTipoMittente())==false){
- throw new ProtocolException("Il tipo di destinatario della risposta non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
- }
- if( busta.getDestinatario().equals(rispostaAsincrona.getMittente())==false){
- throw new ProtocolException("Il destinatario della risposta non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
- }
- if( busta.getTipoServizio().equals(rispostaAsincrona.getTipoServizioCorrelato())==false){
- throw new ProtocolException("Il tipo del servizio correlato invocato non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
- }
- if( busta.getServizio().equals(rispostaAsincrona.getServizioCorrelato())==false){
- throw new ProtocolException("Il servizio correlato invocato non rispetta quello atteso nella gestione del profilo asincrono simmetrico.");
- }
- /* L'azione della risposta puo' essere diversa da quella della richiesta.
- if( (busta.getAzione()!=null) &&
- (busta.getAzione().equals(rispostaAsincrona.getAzione())==false)){
- throw new ProtocolException("L'azione invocata non rispetta quella attesa nella gestione del profilo asincrono simmetrico.");
- }
- */
- if(protocolManager.isCorrelazioneRichiestaPresenteRispostaAsincronaSimmetrica()){
- busta.setRiferimentoMessaggio(riferimentoServizioCorrelato);
- }
- }catch(ProtocolException e){
- ErroreIntegrazione erroreIntegrazione = null;
- IntegrationFunctionError integrationFunctionError = null;
- this.log.error("Busta per correlazione asincrona simmetrica ("+riferimentoServizioCorrelato+") non trovata",e);
- if(e.getMessage()!=null && (e.getMessage().indexOf("Busta non trovata")!=-1) || (e.getMessage().indexOf("Tipo/Nome servizio correlato non trovato")!=-1)){
- msgDiag.logPersonalizzato("profiloAsincronoSimmetrico.rispostaNonCorrelataRichiesta");
- erroreIntegrazione = ErroriIntegrazione.ERRORE_409_RISPOSTA_ASINCRONA_NON_CORRELATA_ALLA_RICHIESTA.getErroreIntegrazione();
- integrationFunctionError = IntegrationFunctionError.CORRELATION_INFORMATION_NOT_FOUND;
- }else{
- msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.asincronoSimmetrico_getBustaRisposta");
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO);
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,integrationFunctionError, erroreIntegrazione,e,null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "Busta per correlazione asincrona simmetrica ("+riferimentoServizioCorrelato+") non trovata");
- return esito;
- }
- // Collaborazione (per gli asincroni devono sempre essere presenti)
- if( idCollaborazione ){
- if(imbustamentoMsg.getIdCollaborazione()!=null)
- busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
- else
- busta.setCollaborazione(riferimentoServizioCorrelato);
- }
-
- }
- }else if(infoServizio.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)) {
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico ...");
- // Profilo Asincrono Asimmetrico
- busta.setProfiloDiCollaborazione(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO);
- // Richiesta Asincrona
- if(riferimentoServizioCorrelato==null && isServizioCorrelato==false){
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiesta...");
- // deve essere generato un msg OK se non e' abilitata la funzionalita' di ricevuta asincrona
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiesta (ricevuta abilitata)...");
- richiestaDelegata.setRicevutaAsincrona(configurazionePdDManager.ricevutaAsincronaAsimmetricaAbilitata(pd));
-
- // Modalita di trasmissione stateless/stateful
- if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())==false){
- generazioneMsgOK = !richiestaDelegata.isRicevutaAsincrona();
- }
- else{
- generazioneMsgOK = false;
- }
- scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_INVOCAZIONE_SERVIZIO;
- // Collaborazione (per gli asincroni devono sempre essere presenti)
- if( idCollaborazione ){
- if(imbustamentoMsg.getIdCollaborazione()!=null)
- busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
- else
- busta.setCollaborazione(idCollaborazioneCapostipite);
- }
- // registrazione richiesta asincrona asimmetrica
- try{
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiesta (registrazione busta da inviare)...");
-
- if(configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione())){
- if(busta.getScadenza()==null){
- busta.setScadenza(new Date(DateManager.getTimeMillis()+(scadenzaBusta*60*1000)));
- }
- if(openspcoopstate instanceof OpenSPCoopStateless){
- ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(busta);
- }
- }
-
- profiloCollaborazione.asincronoAsimmetrico_registraRichiestaInviata(idMessageRequest,busta.getCollaborazione(),richiestaDelegata.isRicevutaAsincrona(),scadenzaBusta);
- }catch(ProtocolException e){
- msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.asincronoAsimmetrico_registraRichiestaInviata");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e,
- null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "profiloDiCollaborazione.asincronoAsimmetrico_registraRichiestaInviata");
- return esito;
- }
- }
- // Risposta Asincrona
- else{
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiestaStato...");
- scenarioCooperazione = Costanti.SCENARIO_ASINCRONO_ASIMMETRICO_POLLING;
- msgDiag.addKeyword(CostantiPdD.KEY_ID_CORRELAZIONE_ASINCRONA, riferimentoServizioCorrelato);
- msgDiag.logPersonalizzato("profiloAsincronoAsimmetrico.richiestaStato.correlazioneRichiesta");
-
- // il polling e' sempre con gestione della ricevuta
- richiestaDelegata.setRicevutaAsincrona(true);
- if(openspcoopstate instanceof OpenSPCoopStateless){
-
- if(busta.getScadenza()==null){
- busta.setScadenza(new Date(DateManager.getTimeMillis()+(scadenzaBusta*60*1000)));
- }
-
- ((StatelessMessage)openspcoopstate.getStatoRichiesta()).setBusta(busta);
- }
-
- // imposto dati risposta
- try{
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiestaStato (lettura busta)...");
- Busta richiestaStatoAsincrona = profiloCollaborazione.asincronoAsimmetrico_getBustaRisposta(riferimentoServizioCorrelato,idMessageRequest,scadenzaBusta);
- // Check di coerenza
- msgDiag.mediumDebug("Gestione profilo di Collaborazione AsincronoAsimmetrico richiestaStato (check coerenza)...");
- if( busta.getTipoMittente().equals(richiestaStatoAsincrona.getTipoMittente())==false){
- throw new ProtocolException("Il tipo di mittente della risposta non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
- }
- if( busta.getMittente().equals(richiestaStatoAsincrona.getMittente())==false){
- throw new ProtocolException("Il mittente della risposta non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
- }
- if( busta.getTipoDestinatario().equals(richiestaStatoAsincrona.getTipoDestinatario())==false){
- throw new ProtocolException("Il tipo di destinatario della risposta non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
- }
- if( busta.getDestinatario().equals(richiestaStatoAsincrona.getDestinatario())==false){
- throw new ProtocolException("Il destinatario della risposta non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
- }
- if( busta.getTipoServizio().equals(richiestaStatoAsincrona.getTipoServizioCorrelato())==false){
- throw new ProtocolException("Il tipo del servizio correlato invocato non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
- }
- if( busta.getServizio().equals(richiestaStatoAsincrona.getServizioCorrelato())==false){
- throw new ProtocolException("Il servizio correlato invocato non rispetta quello atteso nella gestione del profilo asincrono asimmetrico.");
- }
- /* L'azione della richiestaStato puo' essere diversa da quella della richiesta.
- if( (busta.getAzione()!=null) &&
- (busta.getAzione().equals(richiestaStatoAsincrona.getAzione())==false)){
- throw new ProtocolException("L'azione invocata non rispetta quella attesa nella gestione del profilo asincrono asimmetrico.");
- }
- */
- if(protocolManager.isCorrelazioneRichiestaPresenteRichiestaStatoAsincronaAsimmetrica()){
- busta.setRiferimentoMessaggio(riferimentoServizioCorrelato);
- }
- }catch(ProtocolException e){
- ErroreIntegrazione erroreIntegrazione = null;
- IntegrationFunctionError integrationFunctionError = null;
- this.log.error("Busta per correlazione asincrona asimmetrica ("+riferimentoServizioCorrelato+") non trovata",e);
- if(e.getMessage()!=null && e.getMessage().indexOf("Busta non trovata")!=-1){
- msgDiag.logPersonalizzato("profiloAsincronoAsimmetrico.richiestaStatoNonCorrelataRichiesta");
- erroreIntegrazione = ErroriIntegrazione.ERRORE_409_RISPOSTA_ASINCRONA_NON_CORRELATA_ALLA_RICHIESTA.getErroreIntegrazione();
- integrationFunctionError = IntegrationFunctionError.CORRELATION_INFORMATION_NOT_FOUND;
- }else{
- msgDiag.logErroreGenerico(e, "profiloDiCollaborazione.asincronoAsimmetrico_getBustaRisposta");
- erroreIntegrazione = ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO);
- integrationFunctionError = IntegrationFunctionError.INTERNAL_REQUEST_ERROR;
- }
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,integrationFunctionError,erroreIntegrazione,e,null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "Busta per correlazione asincrona asimmetrica ("+riferimentoServizioCorrelato+") non trovata");
- return esito;
- }
- // Collaborazione (per gli asincroni devono sempre essere presenti)
- if( idCollaborazione ){
- if(imbustamentoMsg.getIdCollaborazione()!=null)
- busta.setCollaborazione(imbustamentoMsg.getIdCollaborazione());
- else
- busta.setCollaborazione(riferimentoServizioCorrelato);
- }
- }
- } else{
- // Profilo non conosciuto??
- msgDiag.logErroreGenerico("Profilo di Collaborazione ["+infoServizio.getProfiloDiCollaborazione()+"] non gestito", "gestioneProfiloCollaborazione");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),null,null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "Profilo di Collaborazione ["+infoServizio.getProfiloDiCollaborazione()+"] non gestito");
- return esito;
- }
- richiestaDelegata.setScenario(scenarioCooperazione);
- ejbUtils.setScenarioCooperazione(scenarioCooperazione);
- richiestaDelegata.setIdCollaborazione(busta.getCollaborazione());
- richiestaDelegata.setProfiloCollaborazione(busta.getProfiloDiCollaborazione(),busta.getProfiloDiCollaborazioneValue());
- boolean stateless = configurazionePdDManager.isModalitaStateless(pd, infoServizio.getProfiloDiCollaborazione());
-
- if (!oneWayVersione11 && !stateless) {
-
- /* ------------ Registro busta nel Repository Buste ------------- */
- msgDiag.mediumDebug("Aggiornamento busta nel RepositoryBuste...");
- try{
- repositoryBuste.aggiornaBustaIntoOutBox(busta,this.propertiesReader.getRepositoryIntervalloScadenzaMessaggi());
- repositoryBuste.aggiornaInfoIntegrazioneIntoOutBox_Scenario(busta.getID(),scenarioCooperazione);
- }catch(ProtocolException e){
- msgDiag.logErroreGenerico(e, "repositoryBuste.aggiornaBusta/InfoIntegrazione_IntoOutBox");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e, null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "repositoryBuste.aggiornaBusta/InfoIntegrazione_IntoOutBox");
- return esito;
- }
- }
- /* ------------ Ricezione riscontri per il NAL
- (vengono gestiti solo se la busta contiene un profilo oneWay) ------------- */
- if( consegnaAffidabile ){
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(infoServizio.getProfiloDiCollaborazione())) {
- msgDiag.logPersonalizzato("consegnaAffidabile.salvataggioInformazioni");
- try{
- gestoreRiscontri.registraRiscontroDaRicevere( busta.getID() , DateManager.getDate());
- }catch(ProtocolException e){
- msgDiag.logErroreGenerico(e, "gestoreRiscontri.registraRiscontroDaRicevere");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_525_GESTIONE_FUNZIONALITA_PROTOCOLLO),e, null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "gestoreRiscontri.registraRiscontroDaRicevere");
- return esito;
- }
- }else{
- msgDiag.logPersonalizzato("consegnaAffidabile.profiloNonOneway");
- }
- }
- Utilities.printFreeMemory("Imbustamento - Invio messaggio al modulo di InoltroBuste...");
- /* ------------ Spedizione InoltroBusteMessage al modulo InoltroBuste ------------- */
- // Creazione InoltroBusteMessage
- // (infoBusta da spedire)
- msgDiag.mediumDebug("Invio messaggio al modulo di InoltroBuste...");
- InoltroBusteMessage inoltroMSG = new InoltroBusteMessage();
- inoltroMSG.setRichiestaDelegata(richiestaDelegata);
- inoltroMSG.setBusta(busta);
- inoltroMSG.setOneWayVersione11(oneWayVersione11);
- inoltroMSG.setImplementazionePdDSoggettoMittente(imbustamentoMsg.getImplementazionePdDSoggettoMittente());
- inoltroMSG.setImplementazionePdDSoggettoDestinatario(imbustamentoMsg.getImplementazionePdDSoggettoDestinatario());
- inoltroMSG.setPddContext(pddContext);
-
- msgRequest = new GestoreMessaggi(openspcoopstate, true, idMessageRequest,Costanti.OUTBOX,msgDiag,pddContext);
- // send. Se la porta applicativa funziona in modalita' stateful v11 il messaggio JMS viene arricchito con
- // un oggetto di tipo OpenSPCoopStateless
- if ( !stateless ) {
- if ( oneWayVersione11 ) {
- OpenSPCoopStateless statelessSerializzabile = ((OpenSPCoopStateless) openspcoopstate).rendiSerializzabile();
- inoltroMSG.setOpenspcoopstate(statelessSerializzabile);
- msgRequest.setOneWayVersione11(true);
- }
-
- try{
- ejbUtils.getNodeSender(this.propertiesReader, this.log).send(inoltroMSG, InoltroBuste.ID_MODULO, msgDiag,
- identitaPdD,Imbustamento.ID_MODULO, idMessageRequest, msgRequest);
- } catch (Exception e) {
- this.log.error("Spedizione->InoltroBuste non riuscita",e);
- msgDiag.logErroreGenerico(e,"GenericLib.nodeSender.send(InoltroBuste)");
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.
- get5XX_ErroreProcessamento(CodiceErroreIntegrazione.CODICE_512_SEND),e, null);
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- openspcoopstate.releaseResource();
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,
- "Spedizione->InoltroBuste non riuscita");
- esito.setEsitoInvocazione(true);
- return esito;
- }
- }
- Utilities.printFreeMemory("Imbustamento - Gestione Risposta");
- /* ------------ Gestione Risposta ------------- */
- // se il profilo e' oneWay, AsincronoSimmetrico o AsincronoAsimmetricoRichiesta viene generata una risposta SOAP 'OK'
- // inizializzo richiesta
- if( generazioneMsgOK ) {
-
- pddContext.addObject(org.openspcoop2.core.constants.Costanti.DATA_PRESA_IN_CARICO,
- DateUtils.getSimpleDateFormatMs().format(DateManager.getDate()));
-
- msgDiag.mediumDebug("Invio messaggio 'OK' al modulo di RicezioneContenutiApplicativi...");
- if(protocolManager.isHttpEmptyResponseOneWay())
- msgOK = ejbUtils.sendRispostaApplicativaOK(MessageUtilities.buildEmptyMessage(OpenSPCoop2MessageFactory.getDefaultMessageFactory(),
- requestInfo.getIntegrationRequestMessageType(), MessageRole.RESPONSE),richiestaDelegata,pd,sa);
- else
- msgOK = ejbUtils.sendRispostaApplicativaOK(ejbUtils.buildOpenSPCoopOK(requestInfo.getIntegrationRequestMessageType(), idMessageRequest),richiestaDelegata,pd,sa);
- }
- /* ---------- Gestione Transazione Modulo ---------------- */
- // Aggiorno proprietario Messaggio e Scenario di cooperazione
- msgDiag.mediumDebug("Aggiorno proprietario messaggio...");
- msgRequest.aggiornaProprietarioMessaggio(org.openspcoop2.pdd.mdb.InoltroBuste.ID_MODULO);
- // Commit JDBC
- msgDiag.mediumDebug("Commit delle operazioni per la gestione della richiesta...");
- openspcoopstate.commit();
- // Aggiornamento cache messaggi
- if(msgRequest!=null)
- msgRequest.addMessaggiIntoCache_readFromTable(Imbustamento.ID_MODULO, "richiesta");
- if(msgOK!=null)
- msgOK.addMessaggiIntoCache_readFromTable(Imbustamento.ID_MODULO, "messaggio OK");
- // Aggiornamento cache proprietario messaggio
- if(msgRequest!=null)
- msgRequest.addProprietariIntoCache_readFromTable(Imbustamento.ID_MODULO, "richiesta",null,false);
- if(msgOK!=null)
- msgOK.addProprietariIntoCache_readFromTable(Imbustamento.ID_MODULO, "messaggio OK",idMessageRequest,false);
- // Rilascio connessione al DB
- msgDiag.mediumDebug("Rilascio connessione al database...");
- openspcoopstate.releaseResource();
- msgDiag.mediumDebug("Lavoro Terminato.");
- esito.setEsitoInvocazione(true);
- esito.setStatoInvocazione(EsitoLib.OK,null);
- if (stateless) ((OpenSPCoopState)openspcoopstate).setMessageLib(inoltroMSG);
- return esito;
- }catch(Throwable e){
- this.log.error("ErroreGenerale",e);
- msgDiag.logErroreGenerico(e, "Generale");
-
- OpenSPCoop2Message responseMessageError =
- generatoreErrore.build(pddContext,IntegrationFunctionError.INTERNAL_REQUEST_ERROR,
- ErroriIntegrazione.ERRORE_5XX_GENERICO_PROCESSAMENTO_MESSAGGIO.getErroreIntegrazione(),e,null);
- try{
- ejbUtils.sendRispostaApplicativaErrore(responseMessageError,richiestaDelegata,pd,sa);
- esito.setStatoInvocazione(EsitoLib.ERRORE_GESTITO,"ErroreGenerale");
- esito.setEsitoInvocazione(true);
- }catch(Exception er){
- msgDiag.logErroreGenerico(er,"ejbUtils.sendErroreGenerale");
- ejbUtils.rollbackMessage("Spedizione Errore al Mittente durante una richiesta non riuscita", esito);
- esito.setEsitoInvocazione(false);
- esito.setStatoInvocazioneErroreNonGestito(e);
- }
- openspcoopstate.releaseResource();
- return esito;
- }
- }
- }