ErroreApplicativoBuilder.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.builder;
- import org.openspcoop2.core.constants.TipoPdD;
- import org.openspcoop2.core.eccezione.details.DettaglioEccezione;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.id.IDSoggetto;
- import org.openspcoop2.message.OpenSPCoop2Message;
- import org.openspcoop2.message.OpenSPCoop2MessageFactory;
- import org.openspcoop2.message.config.ConfigurationRFC7807;
- import org.openspcoop2.message.config.IntegrationErrorReturnConfiguration;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.exception.ParseException;
- import org.openspcoop2.protocol.sdk.AbstractEccezioneBuilderParameter;
- import org.openspcoop2.protocol.sdk.Context;
- import org.openspcoop2.protocol.sdk.Eccezione;
- import org.openspcoop2.protocol.sdk.EccezioneIntegrazioneBuilderParameters;
- import org.openspcoop2.protocol.sdk.EccezioneProtocolloBuilderParameters;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.builder.IErroreApplicativoBuilder;
- import org.openspcoop2.protocol.sdk.builder.ProprietaErroreApplicativo;
- import org.openspcoop2.protocol.sdk.config.IProtocolManager;
- import org.openspcoop2.protocol.sdk.constants.CodiceErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.ErroreIntegrazione;
- import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
- import org.openspcoop2.protocol.sdk.state.RequestInfo;
- import org.openspcoop2.utils.LoggerWrapperFactory;
- import org.slf4j.Logger;
- import org.w3c.dom.Element;
- /**
- * Classe per la gestione degli errori applicativi :
- * <ul>
- * <li> Tracciamento
- * <li> Diagnostica
- * <li> Eccezioni
- * </ul>
- *
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ErroreApplicativoBuilder {
- /** Logger utilizzato per debug. */
- protected Logger log = null;
- protected OpenSPCoop2MessageFactory errorFactory = OpenSPCoop2MessageFactory.getDefaultMessageFactory();
- private IProtocolFactory<?> protocolFactory;
- private IProtocolManager protocolManager;
- private IErroreApplicativoBuilder erroreApplicativoBuilder;
- private org.openspcoop2.message.xml.MessageXMLUtils xmlUtils;
- private IDSoggetto dominio;
- public void setDominio(IDSoggetto dominio) {
- this.dominio = dominio;
- }
- private IDSoggetto mittente;
- public void setMittente(IDSoggetto mittente) {
- this.mittente = mittente;
- }
- private IDServizio servizio;
- public void setServizio(IDServizio servizio) {
- this.servizio = servizio;
- }
- private String idFunzione;
- private ProprietaErroreApplicativo proprietaErroreApplicato;
- public void setProprietaErroreApplicato(
- ProprietaErroreApplicativo proprietaErroreApplicato) {
- this.proprietaErroreApplicato = proprietaErroreApplicato;
- }
- private MessageType messageType;
- public MessageType getMessageType() {
- return this.messageType;
- }
-
- private ConfigurationRFC7807 rfc7807;
- private boolean useProblemRFC7807;
- private IntegrationErrorReturnConfiguration returnConfig;
- private IntegrationFunctionError functionError;
- private String nomePorta;
-
- private DettaglioEccezioneOpenSPCoop2Builder dettaglioEccezioneOpenSPCoop2Builder;
- private String servizioApplicativo;
- public void setServizioApplicativo(String servizioApplicativo) {
- this.servizioApplicativo = servizioApplicativo;
- }
-
- private TipoPdD tipoPdD = null;
- public void setTipoPdD(TipoPdD tipoPdD) {
- this.tipoPdD = tipoPdD;
- }
-
- private String idTransazione;
- private Context context;
- public ErroreApplicativoBuilder(Logger aLog, IProtocolFactory<?> protocolFactory,
- IDSoggetto dominio,IDSoggetto mittente,IDServizio servizio,String idFunzione,
- ProprietaErroreApplicativo proprietaErroreApplicativo,MessageType messageType,
- ConfigurationRFC7807 rfc7807, IntegrationErrorReturnConfiguration returnConfig,
- IntegrationFunctionError functionError, String nomePorta,
- TipoPdD tipoPdD,String servizioApplicativo,
- String idTransazione, Context context) throws ProtocolException{
- if(aLog!=null)
- this.log = aLog;
- else
- this.log = LoggerWrapperFactory.getLogger(ErroreApplicativoBuilder.class);
- this.protocolFactory = protocolFactory;
-
- this.xmlUtils = org.openspcoop2.message.xml.MessageXMLUtils.getInstance(this.errorFactory);
-
- this.protocolManager = this.protocolFactory.createProtocolManager();
- this.erroreApplicativoBuilder = this.protocolFactory.createErroreApplicativoBuilder();
-
- this.dominio = dominio;
- this.mittente = mittente;
- this.servizio = servizio;
-
- this.idFunzione = idFunzione;
-
- this.proprietaErroreApplicato = proprietaErroreApplicativo;
-
- this.messageType = messageType;
- this.rfc7807 = rfc7807;
- this.useProblemRFC7807 = this.rfc7807!=null;
- this.returnConfig = returnConfig;
- this.functionError = functionError;
- this.nomePorta = nomePorta;
-
- this.dettaglioEccezioneOpenSPCoop2Builder = new DettaglioEccezioneOpenSPCoop2Builder(aLog, protocolFactory);
-
- this.tipoPdD = tipoPdD;
- this.servizioApplicativo = servizioApplicativo;
-
- this.idTransazione = idTransazione;
-
- this.context = context;
- }
- public IProtocolFactory<?> getProtocolFactory(){
- return this.protocolFactory;
- }
-
- private void setEccezioneBuilderParameter(AbstractEccezioneBuilderParameter parameters,
- DettaglioEccezione dettaglio, ParseException parseException){
-
- parameters.setDettaglioEccezionePdD(dettaglio);
-
- parameters.setDominioPorta(this.dominio);
- parameters.setMittente(this.mittente);
- parameters.setServizio(this.servizio);
-
- parameters.setIdFunzione(this.idFunzione);
-
- parameters.setProprieta(this.proprietaErroreApplicato);
-
- parameters.setMessageType(this.messageType);
-
- parameters.setRfc7807(this.rfc7807);
- parameters.setReturnConfig(this.returnConfig);
- parameters.setFunctionError(this.functionError);
-
- parameters.setNomePorta(this.nomePorta);
- if(this.nomePorta==null) {
- if(this.context!=null && this.context.containsKey(org.openspcoop2.core.constants.Costanti.REQUEST_INFO)) {
- Object o = this.context.getObject(org.openspcoop2.core.constants.Costanti.REQUEST_INFO);
- if(o!=null && o instanceof RequestInfo) {
- RequestInfo requestInfo = (RequestInfo) o;
- if(requestInfo.getProtocolContext()!=null) {
- this.nomePorta = requestInfo.getProtocolContext().getInterfaceName();
- }
- }
- }
- }
-
- parameters.setTransactionId(this.idTransazione);
- parameters.setContext(this.context);
-
- parameters.setTipoPorta(this.tipoPdD);
-
- parameters.setServizioApplicativo(this.servizioApplicativo);
-
- parameters.setParseException(parseException);
-
- }
-
- private EccezioneProtocolloBuilderParameters getEccezioneProtocolloBuilderParameters(
- Eccezione eccezioneProtocollo,IDSoggetto soggettoProduceEccezione,
- DettaglioEccezione dettaglio, ParseException parseException){
-
- EccezioneProtocolloBuilderParameters parameters = new EccezioneProtocolloBuilderParameters();
-
- this.setEccezioneBuilderParameter(parameters, dettaglio, parseException);
-
- parameters.setEccezioneProtocollo(eccezioneProtocollo);
- parameters.setSoggettoProduceEccezione(soggettoProduceEccezione);
- return parameters;
- }
-
- private EccezioneIntegrazioneBuilderParameters getEccezioneIntegrazioneBuilderParameters(
- ErroreIntegrazione erroreIntegrazione,
- DettaglioEccezione dettaglio, ParseException parseException){
-
- EccezioneIntegrazioneBuilderParameters parameters = new EccezioneIntegrazioneBuilderParameters();
-
- this.setEccezioneBuilderParameter(parameters, dettaglio, parseException);
-
- parameters.setErroreIntegrazione(erroreIntegrazione);
-
- return parameters;
- }
-
-
-
-
-
-
-
-
-
- /* ---------------- MESSAGGI DI ERRORE APPLICATIVO --------------------- */
- public Element toElement(ErroreIntegrazione errore)throws ProtocolException{
- EccezioneIntegrazioneBuilderParameters parameters =
- this.getEccezioneIntegrazioneBuilderParameters(errore, null, null);
- return this.erroreApplicativoBuilder.toElement(parameters);
- }
- public byte[] toByteArray(ErroreIntegrazione errore) throws ProtocolException{
- Element eccezione = this.toElement(errore);
- if(eccezione == null){
- throw new ProtocolException("Elemento non generato");
- }
- try{
- return this.xmlUtils.toByteArray(eccezione,true);
- } catch(Exception e) {
- this.log.error("XMLBuilder.buildBytes_Eccezione error: "+e.getMessage(),e);
- throw new ProtocolException("toByte failed: "+e.getMessage(),e);
- }
- }
-
-
- /* ---------------- UTILITY PER L'INSERIMENTO DEL MSG DI ERRORE APPLICATIVO NEI DETAILS DI UN SOAP FAULT --------------------- */
- public void insertInSOAPFault(ErroreIntegrazione errore,
- OpenSPCoop2Message msg) throws ProtocolException{
- EccezioneIntegrazioneBuilderParameters parameters =
- this.getEccezioneIntegrazioneBuilderParameters(errore, null, null);
- this.erroreApplicativoBuilder.insertInSOAPFault(parameters, msg);
- }
-
- public void insertRoutingErrorInSOAPFault(IDSoggetto identitaRouter,String idFunzione,String msgErrore,OpenSPCoop2Message msg) throws ProtocolException{
- this.erroreApplicativoBuilder.insertRoutingErrorInSOAPFault(identitaRouter, idFunzione,msgErrore,msg);
- }
-
- /* ---------------- UTILITY PER LA COSTRUZIONE DI MESSAGGI DI ERRORE APPLICATIVO --------------------- */
- public OpenSPCoop2Message toMessage(ErroreIntegrazione errore,
- Throwable eProcessamento, ParseException parseException){
- try{
-
- boolean produciDettaglioEccezione = false;
- if(errore.getCodiceErrore().getCodice() < 500 &&
- CodiceErroreIntegrazione.CODICE_5XX_CUSTOM.getCodice()!=errore.getCodiceErrore().getCodice()){ // CODICE_5XX_CUSTOM = 5
- produciDettaglioEccezione = this.protocolManager.isGenerazioneDetailsFaultIntegratione_erroreClient();
- }else{
- produciDettaglioEccezione = this.protocolManager.isGenerazioneDetailsFaultIntegratione_erroreServer();
- }
-
- // uso byte per avere eraser type...
- String msgErroreTrasformato = this.proprietaErroreApplicato.transformFaultMsg(errore,this.protocolFactory);
- String codErroreTrasformato = this.protocolFactory.createTraduttore().
- toCodiceErroreIntegrazioneAsString(errore, this.proprietaErroreApplicato.getFaultPrefixCode(),
- this.proprietaErroreApplicato.isFaultAsGenericCode());
-
- // Creo Dettaglio Eccezione
- DettaglioEccezione dettaglioEccezione = null;
- if(produciDettaglioEccezione){
-
- dettaglioEccezione = this.dettaglioEccezioneOpenSPCoop2Builder.buildDettaglioEccezione(this.dominio, this.tipoPdD, this.idFunzione,
- codErroreTrasformato, msgErroreTrasformato, false,
- this.returnConfig, this.functionError);
- if(eProcessamento!=null){
- // internamente, se l'informazioni sul details di OpenSPCoop non e' definita viene usato come comportamento quello del servizio applicativo
- boolean informazioniGeneriche = this.proprietaErroreApplicato.isInformazioniGenericheDetailsOpenSPCoop();
- this.dettaglioEccezioneOpenSPCoop2Builder.gestioneDettaglioEccezioneIntegrazione(eProcessamento, dettaglioEccezione, informazioniGeneriche);
- }
- }
-
- EccezioneIntegrazioneBuilderParameters parameters =
- this.getEccezioneIntegrazioneBuilderParameters(errore, dettaglioEccezione, parseException);
- OpenSPCoop2Message msg = this.erroreApplicativoBuilder.toMessage(parameters);
-
- return msg;
- }catch(Exception e){
- this.log.error("Errore durante la costruzione del messaggio di eccezione integrazione",e);
- return this.errorFactory.createFaultMessage(this.messageType, this.useProblemRFC7807, "ErroreDiProcessamento");
- }
- }
- public OpenSPCoop2Message toMessage(Eccezione eccezione,IDSoggetto soggettoProduceEccezione, ParseException parseException){
- return toMessage(eccezione, soggettoProduceEccezione, null, parseException);
- }
-
- public OpenSPCoop2Message toMessage(Eccezione eccezione,IDSoggetto soggettoProduceEccezione,DettaglioEccezione dettaglioEccezione, ParseException parseException){
- try{
- EccezioneProtocolloBuilderParameters parameters =
- this.getEccezioneProtocolloBuilderParameters(eccezione, soggettoProduceEccezione, dettaglioEccezione, parseException);
- return this.erroreApplicativoBuilder.toMessage(parameters);
- } catch (Exception e) {
- this.log.error("Errore durante la costruzione del messaggio di eccezione busta",e);
- return this.errorFactory.createFaultMessage(this.messageType, this.useProblemRFC7807, "ErroreDiProcessamento");
- }
- }
-
- }