ValidazioneSemantica.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.protocol.engine.validator;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziException;
- import org.openspcoop2.core.registry.driver.DriverRegistroServiziNotFound;
- import org.openspcoop2.core.registry.driver.IDServizioFactory;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.protocol.engine.Configurazione;
- import org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione;
- import org.openspcoop2.protocol.registry.RegistroServiziManager;
- import org.openspcoop2.protocol.sdk.Busta;
- import org.openspcoop2.protocol.sdk.Context;
- import org.openspcoop2.protocol.sdk.Eccezione;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.Servizio;
- import org.openspcoop2.protocol.sdk.config.IProtocolVersionManager;
- import org.openspcoop2.protocol.sdk.constants.ErroriCooperazione;
- import org.openspcoop2.protocol.sdk.constants.FunzionalitaProtocollo;
- import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
- import org.openspcoop2.protocol.sdk.constants.RuoloBusta;
- import org.openspcoop2.protocol.sdk.constants.StatoFunzionalitaProtocollo;
- import org.openspcoop2.protocol.sdk.state.IState;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.protocol.sdk.state.StatefulMessage;
- import org.openspcoop2.protocol.sdk.state.StatelessMessage;
- import org.openspcoop2.protocol.sdk.validator.IValidazioneSemantica;
- import org.openspcoop2.protocol.sdk.validator.ProprietaValidazione;
- import org.openspcoop2.protocol.sdk.validator.ValidazioneSemanticaResult;
- import org.openspcoop2.utils.LoggerWrapperFactory;
- import org.slf4j.Logger;
- /**
- * Classe utilizzata per effettuare un controllo di registrazione dei soggetti di una busta nel registro dei servizi.
- *
- * @author Poli Andrea (apoli@link.it)
- * @author Tronci Fabio (tronci@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- *
- */
- public class ValidazioneSemantica {
- /** Se IState e' un'istanza di StatefulMessage possiede una Connessione SQL in autoCommit mode su cui effettuare query
- * Altrimenti, e' un'istanza di StatelessMessage e nn necessita di connessioni */
- protected IState state;
- /** Context */
- protected Context context;
- /** Errori di validazione riscontrati sulla busta */
- protected java.util.List<Eccezione> erroriValidazione;
- /** Errori di processamento riscontrati sulla busta */
- protected java.util.List<Eccezione> erroriProcessamento;
- /** Dettaglio errore */
- protected IntegrationFunctionError errore_integrationFunctionError;
- /** Busta */
- protected Busta busta;
- /** Validazione ID completa */
- protected boolean validazioneIdentificativiCompleta = false;
- /** ServizioCorrelato */
- protected String servizioCorrelato;
- /** Tipo ServizioCorrelato */
- protected String tipoServizioCorrelato;
- /** Versione ServizioCorrelato */
- protected Integer versioneServizioCorrelato;
- /** Azione Correlata */
- protected String azioneCorrelata;
- /** Reader Registro */
- protected RegistroServiziManager registroServiziReader;
- /** informazioni Servizio */
- protected Servizio infoServizio = null;
- /** Logger utilizzato per debug. */
- protected Logger log = null;
- private IProtocolFactory<?> protocolFactory;
- public IProtocolFactory<?> getProtocolFactory(){
- return this.protocolFactory;
- }
- /**
- * Costruttore.
- *
- * @param aBusta Busta da validare.
- * @param state Oggetto che rappresenta lo stato di una busta
- *
- */
-
- public ValidazioneSemantica(Busta aBusta, Context context, IState state, boolean validazioneIdentificativiCompleta, IProtocolFactory<?> protocolFactory){
- this(aBusta,context, state,validazioneIdentificativiCompleta,Configurazione.getLibraryLog(), protocolFactory);
- }
-
- /**
- * Costruttore.
- *
- * @param aBusta Busta da validare.
- * @param state Oggetto che rappresenta lo stato di una busta
- *
- */
-
- public ValidazioneSemantica(Busta aBusta, Context context, IState state, boolean validazioneIdentificativiCompleta, Logger alog, IProtocolFactory<?> protocolFactory){
- this.busta = aBusta;
- this.context = context;
- this.state = state;
- this.registroServiziReader = RegistroServiziManager.getInstance(state);
- if(alog!=null){
- this.log = alog;
- }else{
- this.log = LoggerWrapperFactory.getLogger(ValidazioneSemantica.class);
- }
- this.validazioneIdentificativiCompleta = validazioneIdentificativiCompleta;
- this.protocolFactory = protocolFactory;
- }
- /**
- * Ritorna un List contenente eventuali eccezioni di validazione riscontrate nella busta.
- *
- * @return Eccezioni riscontrate nella busta.
- *
- */
- public java.util.List<Eccezione> getEccezioniValidazione(){
- return this.erroriValidazione;
- }
- /**
- * Ritorna un List contenente eventuali eccezioni di processamento riscontrate nella busta.
- *
- * @return Eccezioni riscontrate nella busta.
- *
- */
- public java.util.List<Eccezione> getEccezioniProcessamento(){
- return this.erroriProcessamento;
- }
-
- public IntegrationFunctionError getErrore_integrationFunctionError() {
- return this.errore_integrationFunctionError;
- }
-
- /**
- * Metodo che effettua la validazione dei soggetti di una busta, controllando la loro registrazione nel registro dei servizi.
- *
- * Mano mano che sono incontrati errori di validazione, viene creato un oggetto
- * {@link Eccezione}, e viene inserito nel List <var>errors</var>.
- *
- * @param proprietaValidazione tipo di Validazione
- * @throws ProtocolException
- *
- */
- public void valida(OpenSPCoop2Message msg, ProprietaValidazione proprietaValidazione,RuoloBusta tipoBusta,String versioneProtocollo, RequestInfo requestInfo) throws ProtocolException{
- try {
-
- proprietaValidazione.setValidazioneIDCompleta(this.validazioneIdentificativiCompleta);
- proprietaValidazione.setVersioneProtocollo(versioneProtocollo);
- IValidazioneSemantica validazioneSemantica = this.protocolFactory.createValidazioneSemantica(this.state);
- validazioneSemantica.setContext(this.context);
- ValidazioneSemanticaResult result = validazioneSemantica.valida(msg, this.busta, proprietaValidazione, tipoBusta);
- this.infoServizio = result.getInfoServizio();
- this.servizioCorrelato = result.getServizioCorrelato();
- this.tipoServizioCorrelato = result.getTipoServizioCorrelato();
- this.versioneServizioCorrelato = result.getVersioneServizioCorrelato();
- this.erroriProcessamento = result.getErroriProcessamento();
- if(this.erroriProcessamento == null)
- this.erroriProcessamento = new java.util.ArrayList<Eccezione>();
- this.erroriValidazione = result.getErroriValidazione();
- if(this.erroriValidazione == null)
- this.erroriValidazione = new java.util.ArrayList<Eccezione>();
- this.errore_integrationFunctionError = result.getErrore_integrationFunctionError();
-
- // Controllo correlazione alla richiesta per buste contenenti Risposte o ricevute
- //System.out.println("TIPO BUSTA ["+tipoBusta+"]");
- if(this.erroriValidazione.size()==0 && this.erroriProcessamento.size()==0 && this.busta!=null ){
- if( RuoloBusta.BUSTA_DI_SERVIZIO.equals(tipoBusta.toString()) == false &&
- RuoloBusta.RICHIESTA.equals(tipoBusta.toString()) == false){
- //log.info("Validazione correlazione...");
- validazioneCorrelazione(tipoBusta);
- }
- }
-
- // Controllo riferimentoMessaggio
- if(this.erroriValidazione.size()==0 && this.erroriProcessamento.size()==0 && this.busta!=null && this.busta.getRiferimentoMessaggio()!=null){
- validazioneRiferimentoMessaggio(tipoBusta);
- }
-
- // Riconoscimento collaborazione
- if(this.erroriValidazione.size()==0 && this.erroriProcessamento.size()==0 && this.busta!=null && this.busta.getProfiloDiCollaborazione()!=null ){
- // Controllo Collaborazione (validazioneID e Riconoscimento)
- // Controllo che non deve essere effettuato se ho ricevuto un Fault
- if( RuoloBusta.BUSTA_DI_SERVIZIO.equals(tipoBusta.toString()) == false ){
- //log.info("Validazione Collaborazione...");
- IProtocolVersionManager protocolVersioneManager = this.protocolFactory.createProtocolVersionManager(versioneProtocollo);
- StatoFunzionalitaProtocollo modalitaGestioneCollaborazione = protocolVersioneManager.getCollaborazione(this.busta);
- if(StatoFunzionalitaProtocollo.ABILITATA.equals(modalitaGestioneCollaborazione) ||
- (StatoFunzionalitaProtocollo.REGISTRO.equals(modalitaGestioneCollaborazione) && (this.infoServizio!=null) && this.infoServizio.getCollaborazione() ) ){
- riconoscimentoCollaborazione(tipoBusta, requestInfo);
- }
- }
- }
-
- } catch (ProtocolException e) {
- this.log.error("ProtocolException error",e);
- throw e;
- }
- }
- public static String riconoscimentoVersioneProtocolloServizioErogato(Busta busta, org.openspcoop2.protocol.sdk.config.ITraduttore costanti, RuoloBusta tipoBusta, IState state, RequestInfo requestInfo) throws DriverRegistroServiziException,DriverRegistroServiziNotFound{
- // Normalmente prendo il soggetto destinatario come erogatore del servizio.
- // Devono essere gestiti i seguenti casi particolari, in cui devo invece prendere il mittente
- // - risposta sincrona
- // - ricevute asincrone asimmetriche
- //
- // Caso speciale è il profilo asincrono simmetrico
- // - richiesta l'erogatore è il destinatario
- // - ricevuta alla richiesta è il mittente
- // - risposta è il destinatario, però se per il servizio non è definito un profilo, poi devo vedere il fruitore, ancora per il destinatario
- // - ricevuta alla risposta è il mittente, però se per il servizio non è definito un profilo, poi devo vedere il fruitore, ancora per il mittente
- //
- // Inoltre deve essere gestito il caso in cui la busta arrivata non contiene un servizio.
- // In tal caso mi base sul soggetto mittente, se questo ha profilo che supporta i riscontri, può darsi che mi sta inviando una busta di servizio.
- // Altrimenti, questo non puo' succedere e verrà segnalato un errore
- IDSoggetto idSoggettoFruitoreProfiloGestito = null;
- if(busta.getTipoServizio()!=null && busta.getServizio()!=null){
- IDSoggetto idSoggettoErogatoreProfiloGestito = null;
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(busta.getProfiloDiCollaborazione()) && RuoloBusta.RISPOSTA.equals(tipoBusta.toString())){
- idSoggettoErogatoreProfiloGestito = new IDSoggetto(busta.getTipoMittente(), busta.getMittente());
- idSoggettoFruitoreProfiloGestito = new IDSoggetto(busta.getTipoDestinatario(), busta.getDestinatario());
- }else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(busta.getProfiloDiCollaborazione()) && (RuoloBusta.RICHIESTA.equals(tipoBusta.toString())==false) ){
- if(RuoloBusta.RICEVUTA_RICHIESTA.equals(tipoBusta.toString())){
- idSoggettoErogatoreProfiloGestito = new IDSoggetto(busta.getTipoMittente(), busta.getMittente());
- idSoggettoFruitoreProfiloGestito = new IDSoggetto(busta.getTipoDestinatario(), busta.getDestinatario());
- }else if(RuoloBusta.RISPOSTA.equals(tipoBusta.toString())){
- idSoggettoErogatoreProfiloGestito = new IDSoggetto(busta.getTipoDestinatario(), busta.getDestinatario());
- idSoggettoFruitoreProfiloGestito = new IDSoggetto(busta.getTipoDestinatario(), busta.getDestinatario());
- }else { // RICEVUTA_RISPOSTA
- idSoggettoErogatoreProfiloGestito = new IDSoggetto(busta.getTipoMittente(), busta.getMittente());
- idSoggettoFruitoreProfiloGestito = new IDSoggetto(busta.getTipoMittente(), busta.getMittente());
- }
- }else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(busta.getProfiloDiCollaborazione()) &&
- (RuoloBusta.RICEVUTA_RICHIESTA.equals(tipoBusta.toString()) || RuoloBusta.RICEVUTA_RISPOSTA.equals(tipoBusta.toString())) ){
- idSoggettoErogatoreProfiloGestito = new IDSoggetto(busta.getTipoMittente(), busta.getMittente());
- idSoggettoFruitoreProfiloGestito = new IDSoggetto(busta.getTipoDestinatario(), busta.getDestinatario());
- }else{
- idSoggettoErogatoreProfiloGestito = new IDSoggetto(busta.getTipoDestinatario(), busta.getDestinatario());
- idSoggettoFruitoreProfiloGestito = new IDSoggetto(busta.getTipoMittente(), busta.getMittente());
- }
-
- IDServizio idServizioProfiloGestito = IDServizioFactory.getInstance().getIDServizioFromValues(busta.getTipoServizio(), busta.getServizio(),
- idSoggettoErogatoreProfiloGestito,
- busta.getVersioneServizio());
- idServizioProfiloGestito.setAzione(busta.getAzione());
-
- return RegistroServiziManager.getInstance(state).getProfiloGestioneErogazioneServizio(idSoggettoFruitoreProfiloGestito, idServizioProfiloGestito, null, requestInfo);
- }
- else{
- idSoggettoFruitoreProfiloGestito = new IDSoggetto(busta.getTipoMittente(), busta.getMittente());
- return RegistroServiziManager.getInstance(state).getProfiloGestioneSoggetto(idSoggettoFruitoreProfiloGestito, null, requestInfo);
- }
- }
- public static RuoloBusta getTipoBustaDaValidare(ServiceBinding serviceBinding, Busta busta, org.openspcoop2.protocol.sdk.IProtocolFactory<?> protocolFactory,
- boolean rispostaConnectionReply, IState state, Logger log) throws ProtocolException{
- RuoloBusta tipo = RuoloBusta.BUSTA_DI_SERVIZIO;
- if(busta.getProfiloDiCollaborazione()==null ||
- busta.getServizio()==null ||
- busta.getTipoServizio()==null){
- tipo = RuoloBusta.BUSTA_DI_SERVIZIO;
- }
- // OneWay
- else if(busta.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY) &&
- busta.getRiferimentoMessaggio()!=null) {
- // X Interoperabilita' spcoop
- if(protocolFactory.createProtocolConfiguration().isSupportato(serviceBinding, FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA)) {
- tipo = RuoloBusta.RICHIESTA;
- }
- else {
- tipo = RuoloBusta.BUSTA_DI_SERVIZIO;
- }
- }else if(busta.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY))
- tipo = RuoloBusta.RICHIESTA;
- // Sincrono
- else if(busta.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO)){
- if(busta.getRiferimentoMessaggio() == null) {
- tipo = RuoloBusta.RICHIESTA;
- }else {
- if(rispostaConnectionReply) {
- tipo = RuoloBusta.RISPOSTA;
- }
- else {
- if(protocolFactory.createProtocolConfiguration().isSupportato(serviceBinding, FunzionalitaProtocollo.RIFERIMENTO_ID_RICHIESTA)) {
- tipo = RuoloBusta.RICHIESTA;
- }
- else {
- tipo = RuoloBusta.RISPOSTA;
- }
- }
- }
- }
-
- // Asincrono Simmetrico e Asimmetrico
- else if( (busta.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO)) ||
- (busta.getProfiloDiCollaborazione().equals(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO)) ){
- // NOTA:
- // una busta asincrona RISPOSTA puo avere riferimentoMessaggio o collaborazione
-
- if( (busta.getRiferimentoMessaggio() == null) && (busta.getCollaborazione()==null) ){
- tipo = RuoloBusta.RICHIESTA;
- } else {
- ProfiloDiCollaborazione profilo = new ProfiloDiCollaborazione(state, log, protocolFactory);
- if(profilo.asincrono_isRicevutaRichiesta(busta.getRiferimentoMessaggio())){
- tipo = RuoloBusta.RICEVUTA_RICHIESTA;
- }else if(profilo.asincrono_isRicevutaRisposta(busta.getRiferimentoMessaggio())){
- tipo = RuoloBusta.RICEVUTA_RISPOSTA;
- }else if( (rispostaConnectionReply==false) && (profilo.asincrono_isRisposta(busta)) ){
- tipo = RuoloBusta.RISPOSTA;
- }else{
- tipo = RuoloBusta.RICHIESTA;
- }
- }
- }
- return tipo;
- }
-
- /**
- * Metodo che si occupa di validare l'identificativo <var>id</var> secondo la specifica.
- *
- * @param id identificativo da validare
- * @return il valore boolean true se l'identificativo fornito e' conforme alla specifica. Altrimenti false.
- * @throws ProtocolException
- *
- */
- public boolean validazioneID(String id) throws ProtocolException{
- return validazioneID(id,null,null,null);
- }
- /**
- * Metodo che si occupa di validare l'identificativo <var>id</var> secondo la specifica.
- * L'identificativo e' formato da :
- * codAmministrazione_codPortaDominio_num.progressivo_data_ora
- * <p>
- * Il codice Amministrazione e' preso da <var>codAmm</var>.
- * Il codice Amministrazione deve contenere l'identificativo parte del mittente, quando deve essere validato
- * un identificativo del messaggio od una collaborazione di una richiesta
- * (oneWay, richiestaSincrona , richiesta/ricevutaRisposta AsincronaSimmetrica ,
- * richiesta/richiestaStato AsincronaAsimmetrica), poiche' e' lui che lo ha spedito
- * e che ha quindi creato l'identificatore.
- * Deve contenere invece il codice del destinatario, quando deve essere validato un RiferimentoMessaggio, od una
- * collaborazione di una risposta (Sincrona , ricevutaRichiesta/Risposta AsincronaSimmetrica ,
- * ricevutaRichiesta/ricevutaRichiestaStato AsincronaAsimmetrica),
- * poiche' la creazione dell'identificatore venne fatta dal destinatario quando creo' la richiesta.
- * <p>
- * Il codice amministrativo <var>codAmm</var>, sara' utilizzato anche per ottenere dal
- * registro dei servizi di openspcoop la validazione del codice della Porta di Dominio presente nell'identificativo.
- *
- * Prima di invocare questo metodo deve essere stata effettuata l'inizializzazione
- * dell'engine utilizzato per leggere all'interno del registro dei servizi,
- * attraverso il metodo 'initialize' della classe {@link org.openspcoop2.protocol.registry.RegistroServiziReader}
- *
- * @param id identificativo da validare
- * @param codAmm Identificativo Parte mittente o destinatario di una busta.
- * @param codDominio Identificativo del dominio del codice di amministrazione
- * @return il valore boolean true se l'identificativo fornito e' conforme alla specifica. Altrimenti false.
- * @throws ProtocolException
- *
- */
- private boolean validazioneID(String id, String tipoCodAmm, String codAmm, String codDominio) throws ProtocolException{
- ProprietaValidazione proprietaValidazione = new ProprietaValidazione();
- proprietaValidazione.setValidazioneIDCompleta(this.validazioneIdentificativiCompleta);
- IDSoggetto dominio = new IDSoggetto(tipoCodAmm, codAmm, codDominio);
- return this.protocolFactory.createValidazioneSemantica(this.state).validazioneID(id, dominio, proprietaValidazione);
- }
-
- /**
- * Metodo che si occupa di validare il riferimento del messaggio
- *
- * @param tipoBusta tipo di Busta da validare
- *
- */
- private void validazioneRiferimentoMessaggio(RuoloBusta tipoBusta)throws ProtocolException{
- if(this.state==null &&
- RuoloBusta.RICHIESTA.equals(tipoBusta) &&
- this.busta!=null
- &&
- (
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(this.busta.getProfiloDiCollaborazione())
- ||
- org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(this.busta.getProfiloDiCollaborazione())
- )
- ) {
- return; // per supportare il rilascio della connessione
- }
-
- if(this.state instanceof StatefulMessage) {
- StatefulMessage stateful = (StatefulMessage)this.state;
- //OneWay: non importa il riferimentoMessaggio...
- org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione profiloDiCollaborazione =
- new org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione(stateful, this.log, this.protocolFactory);
- boolean error = false;
- // Sincrono
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(this.busta.getProfiloDiCollaborazione())){
- if( RuoloBusta.RISPOSTA.equals(tipoBusta.toString()) ){
- if(profiloDiCollaborazione.sincrono_validazioneRiferimentoMessaggio(this.busta.getRiferimentoMessaggio())==false){
- error = true;
- }
- }
- }
- // Asincrono Simmetrico
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())){
- if(profiloDiCollaborazione.asincronoSimmetrico_validazioneRiferimentoMessaggio(this.busta.getRiferimentoMessaggio())==false){
- error = true;
- }
- }
- // Asincrono Asimmetrico
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())){
- if(RuoloBusta.RISPOSTA.equals(tipoBusta.toString())){
- // richiestaStato
- if(profiloDiCollaborazione.asincronoAsimmetrico_validazioneRiferimentoMessaggio_richiestaStato(this.busta.getRiferimentoMessaggio())==false){
- error = true;
- }
- }else {
- // ricevuta
- if(profiloDiCollaborazione.asincronoAsimmetrico_validazioneRiferimentoMessaggio_ricevuta(this.busta.getRiferimentoMessaggio())==false){
- error = true;
- }
- }
- }
- if(error){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.RIFERIMENTO_MESSAGGIO_NON_VALIDO.getErroreCooperazione(), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- }
- }else if (this.state instanceof StatelessMessage){
- // Lo stateless gestisce solo i profili oneway e sincrono
- // Il oneway non ha una busta correlata
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(this.busta.getProfiloDiCollaborazione())){
- StatelessMessage stateless = (StatelessMessage)this.state;
- Busta bustaCorrelata = stateless.getBustaCorrelata();
- if(bustaCorrelata!=null){
- if(this.busta.getRiferimentoMessaggio()!=null && !(this.busta.getRiferimentoMessaggio().equals(bustaCorrelata.getID())) ){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.RIFERIMENTO_MESSAGGIO_NON_VALIDO.getErroreCooperazione(), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- }
- }
- }
- }else{
- throw new ProtocolException("Metodo invocato con IState non valido");
- }
- }
-
- private void riconoscimentoCollaborazione(RuoloBusta tipoBusta, RequestInfo requestInfo) throws ProtocolException{
-
- //log.info("Validazione mittente...");
- // Mittente: check registrazione nel Registro dei Servizi
- IDSoggetto soggMitt = new IDSoggetto(this.busta.getTipoMittente(),this.busta.getMittente());
- String dominioMittente = null;
- try{
- dominioMittente = this.registroServiziReader.getDominio(soggMitt,null,this.protocolFactory, requestInfo); //null=allRegistri
- if(dominioMittente==null)
- throw new Exception("Dominio non definito");
- }catch(DriverRegistroServiziNotFound es){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.MITTENTE_SCONOSCIUTO.getErroreCooperazione(), this.protocolFactory);
- this.log.debug("Identificazione mittente fallita:"+es.getMessage());
- this.erroriValidazione.add(ecc);
- return;
- }catch(Exception es){
- Eccezione ecc = Eccezione.getEccezioneProcessamento(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.
- getErroreProcessamento("Identificazione mittente non riuscita: errore di processamento"), this.protocolFactory);
- this.log.error("Identificazione mittente non riuscita",es);
- this.erroriProcessamento.add(ecc);
- return;
- }
- //log.info("Validazione destinatario...");
- // Destinatario: check registrazione nel Registro dei Servizi
- IDSoggetto soggDest = new IDSoggetto(this.busta.getTipoDestinatario(),this.busta.getDestinatario());
- String dominioDestinatario = null;
- try{
- dominioDestinatario = this.registroServiziReader.getDominio(soggDest,null,this.protocolFactory, requestInfo); // null=allRegistri
- if(dominioDestinatario==null)
- throw new Exception("Dominio non definito");
- }catch(DriverRegistroServiziNotFound es){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.DESTINATARIO_SCONOSCIUTO.getErroreCooperazione(), this.protocolFactory);
- this.log.debug("Identificazione destinatario fallita: "+es.getMessage());
- this.erroriValidazione.add(ecc);
- return;
- }catch(Exception es){
- Eccezione ecc = Eccezione.getEccezioneProcessamento(ErroriCooperazione.ERRORE_GENERICO_PROCESSAMENTO_MESSAGGIO.
- getErroreProcessamento("Identificazione destinatario non riuscita: errore di processamento"), this.protocolFactory);
- this.log.error("Identificazione destinatario non riuscita",es);
- this.erroriProcessamento.add(ecc);
- return;
- }
-
-
- // La collaborazione deve appartenere o al mittente, o al destinatario della busta.
- if(this.busta.getCollaborazione()!=null){
- if( (validazioneID(this.busta.getCollaborazione(),this.busta.getTipoMittente(),this.busta.getMittente(),dominioMittente) == false) &&
- (validazioneID(this.busta.getCollaborazione(),this.busta.getTipoDestinatario(),this.busta.getDestinatario(),dominioDestinatario) == false) ){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.COLLABORAZIONE_NON_VALIDA.getErroreCooperazione(), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- }
-
- boolean validaIdCollaborazioneProfiliNonOneway = false;
- boolean validaIdCollaborazioneConsegnaInOrdine = false;
- if(!org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(this.busta.getProfiloDiCollaborazione())){
- validaIdCollaborazioneProfiliNonOneway = (tipoBusta.equals(RuoloBusta.RICHIESTA) == false);
- }
- else {
- if(this.busta.getSequenza()!=-1 && this.busta.getCollaborazione()!=null) {
- validaIdCollaborazioneConsegnaInOrdine = true;
- }
- }
-
- if(!validaIdCollaborazioneProfiliNonOneway && !validaIdCollaborazioneConsegnaInOrdine) {
- return;
- }
-
- if(this.state instanceof StatefulMessage) {
- StatefulMessage stateful = (StatefulMessage)this.state;
- if(this.busta.getCollaborazione()!=null){
- org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione profiloDiCollaborazione =
- new org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione(stateful, this.log, this.protocolFactory);
-
- // Validazione Collaborazione.
- boolean error = false;
- // Check per profili non oneway
- if(!org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(this.busta.getProfiloDiCollaborazione())){
- // Sulla busta di richiesta non posso effettuare alcun controllo.
- if(tipoBusta.equals(RuoloBusta.RICHIESTA) == false){
- // buste di risposta/ricevuta
- // Sincrono
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(this.busta.getProfiloDiCollaborazione())){
- if(RuoloBusta.RISPOSTA.equals(tipoBusta.toString())){
- if(profiloDiCollaborazione.sincrono_validazioneCollaborazione(this.busta.getRiferimentoMessaggio(),this.busta.getCollaborazione())==false){
- error = true;
- }
- }
- }
- // Asincrono Simmetrico
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())){
- // Risposta
- if(RuoloBusta.RISPOSTA.equals(tipoBusta.toString())){
- if(profiloDiCollaborazione.asincronoSimmetrico_validazioneCollaborazione_risposta(this.busta.getRiferimentoMessaggio(),this.busta.getCollaborazione())==false){
- error = true;
- }
- }else if(RuoloBusta.RICEVUTA_RICHIESTA.equals(tipoBusta.toString()) || RuoloBusta.RICEVUTA_RISPOSTA.equals(tipoBusta.toString())){
- if(profiloDiCollaborazione.asincronoSimmetrico_validazioneCollaborazione_ricevuta(this.busta.getRiferimentoMessaggio(),this.busta.getCollaborazione())==false){
- error = true;
- }
- }
- }
- // Asincrono Asimmetrico
- else if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione())){
- // richiestaStato
- if(RuoloBusta.RISPOSTA.equals(tipoBusta.toString())){
- if(profiloDiCollaborazione.asincronoAsimmetrico_validazioneCollaborazione_richiestaStato(this.busta.getRiferimentoMessaggio(),this.busta.getCollaborazione())==false){
- error = true;
- }
- }else if(RuoloBusta.RICEVUTA_RICHIESTA.equals(tipoBusta.toString()) || RuoloBusta.RICEVUTA_RISPOSTA.equals(tipoBusta.toString())){
- if(profiloDiCollaborazione.asincronoAsimmetrico_validazioneCollaborazione_ricevuta(this.busta.getRiferimentoMessaggio(),this.busta.getCollaborazione())==false){
- error = true;
- }
- }
- }
- }
- }
- // check per profilo oneway
- else{
-
- if(validaIdCollaborazioneConsegnaInOrdine) {
- org.openspcoop2.protocol.engine.driver.ConsegnaInOrdine consegna = new org.openspcoop2.protocol.engine.driver.ConsegnaInOrdine(stateful,this.log,this.protocolFactory);
- Eccezione ecc = consegna.validazioneDatiConsegnaInOrdine(this.busta, this.protocolFactory);
- if(ecc!=null){
- this.erroriValidazione.add(ecc);
- return;
- }
- }
- }
- // se errori sono stati riscontrati in un profilo non oneWay
- if(error){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.COLLABORAZIONE_SCONOSCIUTA.getErroreCooperazione(), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- }
- return;
- }else if (this.state instanceof StatelessMessage){
- // Lo stateless gestisce solo i profili oneway e sincrono
-
- StatelessMessage stateless = (StatelessMessage)this.state;
-
- // Check per profili oneway
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ONEWAY.equals(this.busta.getProfiloDiCollaborazione())){
-
- if(validaIdCollaborazioneConsegnaInOrdine) {
- org.openspcoop2.protocol.engine.driver.ConsegnaInOrdine consegna = new org.openspcoop2.protocol.engine.driver.ConsegnaInOrdine(stateless,this.log,this.protocolFactory);
- Eccezione ecc = consegna.validazioneDatiConsegnaInOrdine(this.busta, this.protocolFactory);
- if(ecc!=null){
- this.erroriValidazione.add(ecc);
- return;
- }
- }
-
- }
-
- return;
- }else{
- throw new ProtocolException("Metodo invocato con IState non valido");
- }
- }
-
- /**
- * Effettua la validazione della correlazione con la precedente richiesta
- *
- * @param tipoBusta tipo di Busta da validare
- *
- */
- private void validazioneCorrelazione(RuoloBusta tipoBusta) throws ProtocolException{
- if(this.state instanceof StatefulMessage) {
- StatefulMessage stateful = (StatefulMessage)this.state;
- org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione profiloDiCollaborazione =
- new org.openspcoop2.protocol.engine.driver.ProfiloDiCollaborazione(stateful, this.log, this.protocolFactory);
- Eccezione ecc = null;
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(this.busta.getProfiloDiCollaborazione())){
- if( RuoloBusta.RISPOSTA.equals(tipoBusta.toString()) ){
- ecc = profiloDiCollaborazione.sincrono_validazioneCorrelazione(this.busta, this.protocolFactory);
- }
- }
- else if( org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_SIMMETRICO.equals(this.busta.getProfiloDiCollaborazione()) ){
- if( RuoloBusta.RICEVUTA_RICHIESTA.equals(tipoBusta.toString()) ){
- ecc = profiloDiCollaborazione.asincronoSimmetrico_validazioneCorrelazione_ricevutaRichiesta(this.busta, this.protocolFactory);
- }else if( RuoloBusta.RISPOSTA.equals(tipoBusta.toString()) ){
- ecc = profiloDiCollaborazione.asincronoSimmetrico_validazioneCorrelazione_risposta(this.busta, this.protocolFactory);
- }else if( RuoloBusta.RICEVUTA_RISPOSTA.equals(tipoBusta.toString()) ){
- ecc = profiloDiCollaborazione.asincronoSimmetrico_validazioneCorrelazione_ricevutaRisposta(this.busta, this.protocolFactory);
- }
- }
- else if( org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.ASINCRONO_ASIMMETRICO.equals(this.busta.getProfiloDiCollaborazione()) ){
- if( RuoloBusta.RICEVUTA_RICHIESTA.equals(tipoBusta.toString()) ){
- ecc = profiloDiCollaborazione.asincronoAsimmetrico_validazioneCorrelazione_ricevutaRichiesta(this.busta, this.protocolFactory);
- }else if( RuoloBusta.RISPOSTA.equals(tipoBusta.toString()) ){
- ecc = profiloDiCollaborazione.asincronoAsimmetrico_validazioneCorrelazione_richiestaStato(this.busta, this.protocolFactory);
- }else if( RuoloBusta.RICEVUTA_RISPOSTA.equals(tipoBusta.toString()) ){
- ecc = profiloDiCollaborazione.asincronoAsimmetrico_validazioneCorrelazione_ricevutaRichiestaStato(this.busta, this.protocolFactory);
- }
- }
- if(ecc!=null){
- this.erroriValidazione.add(ecc);
- return;
- }
- }else if (this.state instanceof StatelessMessage){
- // Lo stateless gestisce solo i profili oneway e sincrono
- // Il oneway non ha una busta correlata
- if(org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione.SINCRONO.equals(this.busta.getProfiloDiCollaborazione())){
- StatelessMessage stateless = (StatelessMessage)this.state;
- Busta bustaCorrelata = stateless.getBustaCorrelata();
- if(bustaCorrelata!=null){
-
- if (this.busta.getTipoDestinatario().equals(bustaCorrelata.getTipoMittente())==false){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.TIPO_MITTENTE_NON_VALIDO.
- getErroreCooperazione("Tipo del mittente diverso da quello atteso nella gestione del profilo di collaborazione Sincrono"), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- if (this.busta.getDestinatario().equals(bustaCorrelata.getMittente())==false){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.MITTENTE_NON_VALIDO.
- getErroreCooperazione("Mittente diverso da quello atteso nella gestione del profilo di collaborazione Sincrono"), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- if (this.busta.getTipoMittente().equals(bustaCorrelata.getTipoDestinatario())==false){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.TIPO_DESTINATARIO_NON_VALIDO.
- getErroreCooperazione("Tipo del destinatario diverso da quello atteso nella gestione del profilo di collaborazione Sincrono"), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- if (this.busta.getMittente().equals(bustaCorrelata.getDestinatario())==false){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.DESTINATARIO_NON_VALIDO.
- getErroreCooperazione("Destinatario diverso da quello atteso nella gestione del profilo di collaborazione Sincrono"), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- if(this.busta.getServizio()!=null && bustaCorrelata.getTipoServizio()!=null){
- if (this.busta.getTipoServizio().equals(bustaCorrelata.getTipoServizio())==false){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.TIPO_SERVIZIO_NON_VALIDO.
- getErroreCooperazione("Tipo di servizio diverso da quello atteso nella gestione del profilo di collaborazione Sincrono"), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- if (this.busta.getServizio().equals(bustaCorrelata.getServizio())==false){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.SERVIZIO_NON_VALIDO.
- getErroreCooperazione("Servizio diverso da quello atteso nella gestione del profilo di collaborazione Sincrono"), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- if(this.busta.getAzione()!=null){
- if (this.busta.getAzione().equals(bustaCorrelata.getAzione()) == false){
- Eccezione ecc = Eccezione.getEccezioneValidazione(ErroriCooperazione.AZIONE_NON_VALIDA.
- getErroreCooperazione("Azione diversa da quella atteso nella gestione del profilo di collaborazione Sincrono"), this.protocolFactory);
- this.erroriValidazione.add(ecc);
- return;
- }
- }
- }
- }
- }
- }else{
- throw new ProtocolException("Metodo invocato con IState non valido");
- }
- }
-
- /**
- * Metodo che si occupa di validare il riferimento del messaggio
- *
- * @param tipoBusta tipo di Busta da validare
- *
- */
-
- /**
- * Eventuale servizio correlato associato al servizio presente nella busta.
- *
- * @return Eventuale servizio correlato associato al servizio presente nella busta.
- *
- */
- public String getServizioCorrelato() {
- return this.servizioCorrelato;
- }
- /**
- * Eventuale tipo di servizio correlato associato al servizio presente nella busta.
- *
- * @return Eventuale tipo di servizio correlato associato al servizio presente nella busta.
- *
- */
- public String getTipoServizioCorrelato() {
- return this.tipoServizioCorrelato;
- }
- public Integer getVersioneServizioCorrelato() {
- return this.versioneServizioCorrelato;
- }
- public Servizio getInfoServizio() {
- return this.infoServizio;
- }
- public String getAzioneCorrelata() {
- return this.azioneCorrelata;
- }
- public void setAzioneCorrelata(String azioneCorrelata) {
- this.azioneCorrelata = azioneCorrelata;
- }
- public void setValidazioneIdentificativiCompleta(boolean v) {
- this.validazioneIdentificativiCompleta = v;
- }
- }