ErroriProperties.java
/*
* GovWay - A customizable API Gateway
* https://govway.org
*
* Copyright (c) 2005-2024 Link.it srl (https://link.it).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 3, as published by
* the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
package org.openspcoop2.protocol.utils;
import java.util.Enumeration;
import java.util.Properties;
import java.util.concurrent.ConcurrentHashMap;
import org.openspcoop2.message.constants.IntegrationError;
import org.openspcoop2.protocol.sdk.ProtocolException;
import org.openspcoop2.protocol.sdk.constants.CostantiProtocollo;
import org.openspcoop2.protocol.sdk.constants.IntegrationFunctionError;
import org.openspcoop2.utils.LoggerWrapperFactory;
import org.openspcoop2.utils.resources.Loader;
import org.slf4j.Logger;
/**
* Classe che gestisce il file di properties 'errori.properties'
*
* @author Poli Andrea (apoli@link.it)
* @author $Author$
* @version $Rev$, $Date$
*/
public class ErroriProperties {
// 400
private static boolean FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST = false;
// 502
private static boolean FORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE = false;
private static boolean FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR = false;
// 503
private static boolean FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR = false;
// 400
public static boolean isFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST() {
return FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST;
}
public static void setFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST(
boolean fORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST,
String confDir,Logger log,Loader loader) throws ProtocolException {
FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST = fORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST;
reInit(confDir, log, loader);
}
public static boolean isFORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE() {
return FORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE;
}
public static void setFORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE(
boolean fORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE,
String confDir,Logger log,Loader loader) throws ProtocolException {
FORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE = fORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE;
reInit(confDir, log, loader);
}
public static boolean isFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR() {
return FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR;
}
public static void setFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR(
boolean fORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR,
String confDir,Logger log,Loader loader) throws ProtocolException {
FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR = fORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR;
reInit(confDir, log, loader);
}
public static boolean isFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR() {
return FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR;
}
public static void setFORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR(
boolean fORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR,
String confDir,Logger log,Loader loader) throws ProtocolException {
FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR = fORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR;
reInit(confDir, log, loader);
}
private static synchronized void reInit(String confDir,Logger log,Loader loader) throws ProtocolException {
ErroriProperties erroriPropertiesNew = new ErroriProperties(confDir, log);
erroriPropertiesNew.validaConfigurazione(loader);
ErroriProperties.erroriProperties = erroriPropertiesNew; // switch
}
/** Logger utilizzato per errori eventuali. */
private Logger log = null;
/** Copia Statica */
private static ErroriProperties erroriProperties = null;
/* ******** F I E L D S P R I V A T I ******** */
/** Reader delle proprieta' impostate nel file 'errori.properties' */
private ErroriInstanceProperties reader;
/* ******** C O S T R U T T O R E ******** */
/**
* Viene chiamato in causa per istanziare il properties reader
*
*
*/
private ErroriProperties(String confDir,Logger log) throws ProtocolException{
if(log != null)
this.log = log;
else
this.log = LoggerWrapperFactory.getLogger(ErroriProperties.class);
/* ---- Lettura del cammino del file di configurazione ---- */
Properties propertiesReader = new Properties();
java.io.InputStream properties = null;
try{
properties = ErroriProperties.class.getResourceAsStream("/org/openspcoop2/protocol/utils/errori.properties");
if(properties==null){
throw new Exception("File '/org/openspcoop2/protocol/utils/errori.properties' not found");
}
propertiesReader.load(properties);
}catch(Exception e) {
this.log.error("Riscontrato errore durante la lettura del file 'org/openspcoop2/protocol/utils/errori.properties': "+e.getMessage());
throw new ProtocolException("ErroriProperties initialize error: "+e.getMessage(),e);
}finally{
try{
if(properties!=null)
properties.close();
}catch(Throwable er){
// close
}
}
try{
this.reader = new ErroriInstanceProperties(confDir, propertiesReader, this.log);
}catch(Exception e){
throw new ProtocolException(e.getMessage(),e);
}
}
/**
* Il Metodo si occupa di inizializzare il propertiesReader
*
*
*/
public static synchronized void initialize(String confDir,Logger log,Loader loader) throws ProtocolException{
if(ErroriProperties.erroriProperties==null){
ErroriProperties.erroriProperties = new ErroriProperties(confDir, log);
erroriProperties.validaConfigurazione(loader);
}
}
/**
* Ritorna l'istanza di questa classe
*
* @return Istanza di OpenSPCoopProperties
* @throws Exception
*
*/
public static ErroriProperties getInstance(Logger log) throws ProtocolException{
if(ErroriProperties.erroriProperties==null) {
// spotbugs warning 'SING_SINGLETON_GETTER_NOT_SYNCHRONIZED': l'istanza viene creata allo startup
synchronized (ErroriProperties.class) {
throw new ProtocolException("ErroriProperties not initialized (use init method in factory)");
}
}
return ErroriProperties.erroriProperties;
}
public void validaConfigurazione(Loader loader) throws ProtocolException {
try{
getPrefixWebSite();
getPrefixWebSiteErrorPage();
initMapWrapped();
IntegrationFunctionError [] lista = IntegrationFunctionError.values();
for (IntegrationFunctionError integrationFunctionError : lista) {
getIntegrationError(integrationFunctionError);
getErrorType(integrationFunctionError);
getGenericDetails(integrationFunctionError);
isForceGenericDetails(integrationFunctionError);
getWebSite(integrationFunctionError);
}
}catch(java.lang.Exception e) {
String msg = "Riscontrato errore durante la validazione della proprieta' degli errori, "+e.getMessage();
this.log.error(msg,e);
throw new ProtocolException(msg,e);
}
}
/* **** CONVERTER **** */
private Boolean typeEnabled = null;
public boolean isTypeEnabled() throws ProtocolException {
if(this.typeEnabled==null) {
this.initTypeEnabled();
}
return this.typeEnabled;
}
private synchronized void initTypeEnabled() throws ProtocolException {
if(this.typeEnabled==null) {
this.typeEnabled = getBooleanProperty("type.enabled");
}
}
private String webSite = null;
public String getPrefixWebSite() throws ProtocolException {
if(this.webSite==null) {
this.initPrefixWebSite();
}
return this.webSite;
}
private synchronized void initPrefixWebSite() throws ProtocolException {
if(this.webSite==null) {
this.webSite = getProperty("webSite");
if(this.webSite.endsWith("/")) {
this.webSite = this.webSite.substring(0, this.webSite.length()-1);
}
}
}
private String webSiteErrorPage = null;
public String getPrefixWebSiteErrorPage() throws ProtocolException {
if(this.webSiteErrorPage==null) {
this.initPrefixWebSiteErrorPage();
}
return this.webSiteErrorPage;
}
private synchronized void initPrefixWebSiteErrorPage() throws ProtocolException {
if(this.webSiteErrorPage==null) {
this.webSiteErrorPage = getProperty("webSite.errorPage");
}
}
private ConcurrentHashMap<IntegrationFunctionError,Boolean> mapWrapped= null;
public Boolean isWrapped(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapWrapped==null){
this.initMapWrapped();
}
return this.mapWrapped.get(functionError);
}
private synchronized void initMapWrapped() throws ProtocolException {
if(this.mapWrapped==null){
this.mapWrapped = new ConcurrentHashMap<IntegrationFunctionError, Boolean>();
IntegrationFunctionError [] lista = IntegrationFunctionError.wrappedValues();
for (IntegrationFunctionError integrationFunctionError : lista) {
String pName = integrationFunctionError.name()+".enabled";
try{
Boolean p = null;
if(IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST.equals(integrationFunctionError)){
if(FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_BAD_REQUEST) {
p = false;
}
else {
p = getBooleanProperty(pName);
}
}
else if(IntegrationFunctionError.WRAP_502_BAD_RESPONSE.equals(integrationFunctionError)){
if(FORCE_SPECIFIC_ERROR_TYPE_FOR_BAD_RESPONSE) {
p = false;
}
else {
p = getBooleanProperty(pName);
}
}
else if(IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR.equals(integrationFunctionError)){
if(FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_RESPONSE_ERROR) {
p = false;
}
else {
p = getBooleanProperty(pName);
}
}
else if(IntegrationFunctionError.WRAP_503_INTERNAL_ERROR.equals(integrationFunctionError)){
if(FORCE_SPECIFIC_ERROR_TYPE_FOR_INTERNAL_ERROR) {
p = false;
}
else {
p = getBooleanProperty(pName);
}
}
else {
// caso non esistente
p = getBooleanProperty(pName);
}
this.mapWrapped.put(integrationFunctionError, p);
}catch(Exception e){
throw new ProtocolException("Errore durante la gestione del codice ["+integrationFunctionError.name()+"]: "+e.getMessage(),e);
}
}
}
}
private ConcurrentHashMap<IntegrationFunctionError,IntegrationError> mapIntegrationError= null;
private ConcurrentHashMap<IntegrationFunctionError,IntegrationError> mapIntegrationError_noWrap= null;
public IntegrationError getIntegrationError(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapIntegrationError==null){
this.initMapIntegrationError();
}
return this.mapIntegrationError.get(functionError);
}
public IntegrationError getIntegrationError_noWrap(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapIntegrationError_noWrap==null){
this.initMapIntegrationError();
}
return this.mapIntegrationError_noWrap.get(functionError);
}
private synchronized void initMapIntegrationError() throws ProtocolException {
if(this.mapIntegrationError==null){
this.mapIntegrationError = new ConcurrentHashMap<IntegrationFunctionError, IntegrationError>();
this.mapIntegrationError_noWrap = new ConcurrentHashMap<IntegrationFunctionError, IntegrationError>();
IntegrationFunctionError [] lista = IntegrationFunctionError.values();
for (IntegrationFunctionError integrationFunctionError : lista) {
String pName = integrationFunctionError.name()+".errorCode";
try{
String p = getProperty(pName);
IntegrationError integrationError = IntegrationError.valueOf(p);
IntegrationError integrationError_noWrap = IntegrationError.valueOf(p);
if(integrationFunctionError.isWrapBadRequest()) {
if(isWrapped(IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST)) {
String pWrappedName = IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST.name()+".errorCode";
p = getProperty(pWrappedName);
integrationError = IntegrationError.valueOf(p);
}
}
else if(integrationFunctionError.isWrapBadResponse(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_BAD_RESPONSE)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_BAD_RESPONSE.name()+".errorCode";
p = getProperty(pWrappedName);
integrationError = IntegrationError.valueOf(p);
}
}
else if(integrationFunctionError.isWrapInternalResponseError(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR.name()+".errorCode";
p = getProperty(pWrappedName);
integrationError = IntegrationError.valueOf(p);
}
}
else if(integrationFunctionError.isWrapInternalError()) {
if(isWrapped(IntegrationFunctionError.WRAP_503_INTERNAL_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_503_INTERNAL_ERROR.name()+".errorCode";
p = getProperty(pWrappedName);
integrationError = IntegrationError.valueOf(p);
}
}
this.mapIntegrationError.put(integrationFunctionError, integrationError);
this.mapIntegrationError_noWrap.put(integrationFunctionError, integrationError_noWrap);
}catch(Exception e){
throw new ProtocolException("Errore durante la gestione del codice ["+integrationFunctionError.name()+"]: "+e.getMessage(),e);
}
}
}
}
private ConcurrentHashMap<IntegrationFunctionError,String> mapErrorType= null;
private ConcurrentHashMap<IntegrationFunctionError,String> mapErrorType_noWrap= null;
public String getErrorType(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapErrorType==null){
this.initMapErrorType();
}
return this.mapErrorType.get(functionError);
}
public String getErrorType_noWrap(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapErrorType_noWrap==null){
this.initMapErrorType();
}
return this.mapErrorType_noWrap.get(functionError);
}
public IntegrationFunctionError convertToIntegrationFunctionError(String errorType) throws ProtocolException {
return this._convertToIntegrationFunctionError(errorType);
}
private IntegrationFunctionError _convertToIntegrationFunctionError(String errorType) throws ProtocolException {
if(this.mapErrorType==null){
this.initMapErrorType();
}
Enumeration<IntegrationFunctionError> en = this.mapErrorType.keys();
while (en.hasMoreElements()) {
IntegrationFunctionError integrationFunctionError = (IntegrationFunctionError) en.nextElement();
String type = this.mapErrorType.get(integrationFunctionError);
if(type.equals(errorType)) {
return integrationFunctionError;
}
}
throw new ProtocolException("GovWayErrorType '"+errorType+"' unknown");
}
public IntegrationFunctionError convertToIntegrationFunctionError_noWrap(String errorType) throws ProtocolException {
return this._convertToIntegrationFunctionError_noWrap(errorType);
}
private IntegrationFunctionError _convertToIntegrationFunctionError_noWrap(String errorType) throws ProtocolException {
if(this.mapErrorType_noWrap==null){
this.initMapErrorType();
}
Enumeration<IntegrationFunctionError> en = this.mapErrorType_noWrap.keys();
while (en.hasMoreElements()) {
IntegrationFunctionError integrationFunctionError = (IntegrationFunctionError) en.nextElement();
String type = this.mapErrorType_noWrap.get(integrationFunctionError);
if(type.equals(errorType)) {
return integrationFunctionError;
}
}
throw new ProtocolException("GovWayErrorType '"+errorType+"' unknown");
}
private synchronized void initMapErrorType() throws ProtocolException {
if(this.mapErrorType==null){
this.mapErrorType = new ConcurrentHashMap<IntegrationFunctionError, String>();
this.mapErrorType_noWrap = new ConcurrentHashMap<IntegrationFunctionError, String>();
IntegrationFunctionError [] lista = IntegrationFunctionError.values();
for (IntegrationFunctionError integrationFunctionError : lista) {
String pName = integrationFunctionError.name()+".errorType";
try{
String p = getProperty(pName);
String p_noWrap = p;
IntegrationError integrationError = this.mapIntegrationError_noWrap.get(integrationFunctionError);
if(integrationFunctionError.isWrapBadRequest()) {
if(isWrapped(IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST)) {
String pWrappedName = IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST.name()+".errorType";
p = getProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapBadResponse(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_BAD_RESPONSE)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_BAD_RESPONSE.name()+".errorType";
p = getProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapInternalResponseError(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR.name()+".errorType";
p = getProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapInternalError()) {
if(isWrapped(IntegrationFunctionError.WRAP_503_INTERNAL_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_503_INTERNAL_ERROR.name()+".errorType";
p = getProperty(pWrappedName);
}
}
this.mapErrorType.put(integrationFunctionError, p);
this.mapErrorType_noWrap.put(integrationFunctionError, p_noWrap);
}catch(Exception e){
throw new ProtocolException("Errore durante la gestione del codice ["+integrationFunctionError.name()+"]: "+e.getMessage(),e);
}
}
}
}
private ConcurrentHashMap<IntegrationFunctionError,String> mapWebSite= null;
private ConcurrentHashMap<IntegrationFunctionError,String> mapWebSite_noWrap= null;
public String getWebSite(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapWebSite==null){
this.initMapWebSite();
}
return this.mapWebSite.get(functionError);
}
public String getWebSite_noWrap(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapWebSite_noWrap==null){
this.initMapWebSite();
}
return this.mapWebSite_noWrap.get(functionError);
}
private synchronized void initMapWebSite() throws ProtocolException {
if(this.mapWebSite==null){
this.mapWebSite = new ConcurrentHashMap<IntegrationFunctionError, String>();
this.mapWebSite_noWrap = new ConcurrentHashMap<IntegrationFunctionError, String>();
IntegrationFunctionError [] lista = IntegrationFunctionError.values();
for (IntegrationFunctionError integrationFunctionError : lista) {
String pName = integrationFunctionError.name()+".webSite";
try{
String p = getOptionalProperty(pName);
String p_noWrap = p;
IntegrationError integrationError = this.mapIntegrationError_noWrap.get(integrationFunctionError);
IntegrationError integrationError_noWrap = integrationError;
String integrationType = this.getErrorType(integrationFunctionError);
String integrationType_noWrap = integrationType;
if(integrationFunctionError.isWrapBadRequest()) {
if(isWrapped(IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST)) {
String pWrappedName = IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST.name()+".webSite";
p = getOptionalProperty(pWrappedName);
integrationError = this.getIntegrationError(IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST);
integrationType = this.getErrorType(IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST);
}
}
else if(integrationFunctionError.isWrapBadResponse(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_BAD_RESPONSE)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_BAD_RESPONSE.name()+".webSite";
p = getOptionalProperty(pWrappedName);
integrationError = this.getIntegrationError(IntegrationFunctionError.WRAP_502_BAD_RESPONSE);
integrationType = this.getErrorType(IntegrationFunctionError.WRAP_502_BAD_RESPONSE);
}
}
else if(integrationFunctionError.isWrapInternalResponseError(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR.name()+".webSite";
p = getOptionalProperty(pWrappedName);
integrationError = this.getIntegrationError(IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR);
integrationType = this.getErrorType(IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR);
}
}
else if(integrationFunctionError.isWrapInternalError()) {
if(isWrapped(IntegrationFunctionError.WRAP_503_INTERNAL_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_503_INTERNAL_ERROR.name()+".webSite";
p = getOptionalProperty(pWrappedName);
integrationError = this.getIntegrationError(IntegrationFunctionError.WRAP_503_INTERNAL_ERROR);
integrationType = this.getErrorType(IntegrationFunctionError.WRAP_503_INTERNAL_ERROR);
}
}
String site = this.getSite(p, integrationError, integrationType);
this.mapWebSite.put(integrationFunctionError, site);
String site_noWrap = this.getSite(p_noWrap, integrationError_noWrap, integrationType_noWrap);
this.mapWebSite_noWrap.put(integrationFunctionError, site_noWrap);
}catch(Exception e){
throw new ProtocolException("Errore durante la gestione del codice ["+integrationFunctionError.name()+"]: "+e.getMessage(),e);
}
}
}
}
private String getSite(String p, IntegrationError integrationError, String integrationType) {
String site = null;
if(p!=null) {
if(p.startsWith("http://") || p.startsWith("https://")) {
return p;
}
else {
if(p.startsWith("/")) {
site = this.webSite + p;
}
else {
site = this.webSite + "/" + p;
}
}
}
else {
if(this.webSiteErrorPage.startsWith("/")) {
site = this.webSite + this.webSiteErrorPage;
}
else {
site = this.webSite + "/" + this.webSiteErrorPage;
}
}
while(site.contains(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE)) {
switch (integrationError) {
case BAD_REQUEST:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "400");
break;
case AUTHENTICATION:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "401");
break;
case AUTHORIZATION:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "403");
break;
case NOT_FOUND:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "404");
break;
case CONFLICT:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "409");
break;
case REQUEST_TOO_LARGE:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "413");
break;
case LIMIT_EXCEEDED:
case TOO_MANY_REQUESTS:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "429");
break;
case BAD_RESPONSE:
case INTERNAL_RESPONSE_ERROR:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "502");
break;
case SERVICE_UNAVAILABLE:
case INTERNAL_REQUEST_ERROR:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "503");
break;
case ENDPOINT_REQUEST_TIMED_OUT:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "504");
break;
case DEFAULT:
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_HTTP_CODE, "503");
break;
}
}
while(site.contains(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_ERROR_CODE)) {
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_ERROR_CODE, integrationError.name());
}
while(site.contains(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_ERROR_TYPE)) {
site = site.replace(CostantiProtocollo.OPENSPCOOP2_ERRORI_TEMPLATE_ERROR_TYPE, integrationType);
}
return site;
}
private ConcurrentHashMap<IntegrationFunctionError,String> mapGenericDetails= null;
private ConcurrentHashMap<IntegrationFunctionError,String> mapGenericDetails_noWrap= null;
public String getGenericDetails(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapGenericDetails==null){
this.initMapGenericDetails();
}
return this.mapGenericDetails.get(functionError);
}
public String getGenericDetails_noWrap(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapGenericDetails_noWrap==null){
this.initMapGenericDetails();
}
return this.mapGenericDetails_noWrap.get(functionError);
}
private synchronized void initMapGenericDetails() throws ProtocolException {
if(this.mapGenericDetails==null){
this.mapGenericDetails = new ConcurrentHashMap<IntegrationFunctionError, String>();
this.mapGenericDetails_noWrap = new ConcurrentHashMap<IntegrationFunctionError, String>();
IntegrationFunctionError [] lista = IntegrationFunctionError.values();
for (IntegrationFunctionError integrationFunctionError : lista) {
String pName = integrationFunctionError.name()+".genericDetails";
try{
String p = getProperty(pName);
String p_noWrap = p;
IntegrationError integrationError = this.mapIntegrationError_noWrap.get(integrationFunctionError);
if(integrationFunctionError.isWrapBadRequest()) {
if(isWrapped(IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST)) {
String pWrappedName = IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST.name()+".genericDetails";
p = getProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapBadResponse(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_BAD_RESPONSE)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_BAD_RESPONSE.name()+".genericDetails";
p = getProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapInternalResponseError(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR.name()+".genericDetails";
p = getProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapInternalError()) {
if(isWrapped(IntegrationFunctionError.WRAP_503_INTERNAL_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_503_INTERNAL_ERROR.name()+".genericDetails";
p = getProperty(pWrappedName);
}
}
this.mapGenericDetails.put(integrationFunctionError, p);
this.mapGenericDetails_noWrap.put(integrationFunctionError, p_noWrap);
}catch(Exception e){
throw new ProtocolException("Errore durante la gestione del codice ["+integrationFunctionError.name()+"]: "+e.getMessage(),e);
}
}
}
}
private ConcurrentHashMap<IntegrationFunctionError,Boolean> mapIsGenericDetails= null;
private ConcurrentHashMap<IntegrationFunctionError,Boolean> mapIsGenericDetails_noWrap= null;
public Boolean isForceGenericDetails(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapIsGenericDetails==null){
this.initMapIsGenericDetails();
}
return this.mapIsGenericDetails.get(functionError);
}
public Boolean isForceGenericDetails_noWrap(IntegrationFunctionError functionError) throws ProtocolException {
if(this.mapIsGenericDetails_noWrap==null){
this.initMapIsGenericDetails();
}
return this.mapIsGenericDetails_noWrap.get(functionError);
}
private synchronized void initMapIsGenericDetails() throws ProtocolException {
if(this.mapIsGenericDetails==null){
this.mapIsGenericDetails = new ConcurrentHashMap<IntegrationFunctionError, Boolean>();
this.mapIsGenericDetails_noWrap = new ConcurrentHashMap<IntegrationFunctionError, Boolean>();
IntegrationFunctionError [] lista = IntegrationFunctionError.values();
for (IntegrationFunctionError integrationFunctionError : lista) {
String pName = integrationFunctionError.name()+".forceGenericDetails";
try{
Boolean p = getBooleanProperty(pName);
Boolean p_noWrap = p;
IntegrationError integrationError = this.mapIntegrationError_noWrap.get(integrationFunctionError);
if(integrationFunctionError.isWrapBadRequest()) {
if(isWrapped(IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST)) {
String pWrappedName = IntegrationFunctionError.WRAP_400_INTERNAL_BAD_REQUEST.name()+".forceGenericDetails";
p = getBooleanProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapBadResponse(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_BAD_RESPONSE)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_BAD_RESPONSE.name()+".forceGenericDetails";
p = getBooleanProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapInternalResponseError(integrationError)) {
if(isWrapped(IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_502_INTERNAL_RESPONSE_ERROR.name()+".forceGenericDetails";
p = getBooleanProperty(pWrappedName);
}
}
else if(integrationFunctionError.isWrapInternalError()) {
if(isWrapped(IntegrationFunctionError.WRAP_503_INTERNAL_ERROR)) {
String pWrappedName = IntegrationFunctionError.WRAP_503_INTERNAL_ERROR.name()+".forceGenericDetails";
p = getBooleanProperty(pWrappedName);
}
}
this.mapIsGenericDetails.put(integrationFunctionError, p);
this.mapIsGenericDetails_noWrap.put(integrationFunctionError, p_noWrap);
}catch(Exception e){
throw new ProtocolException("Errore durante la gestione del codice ["+integrationFunctionError.name()+"]: "+e.getMessage(),e);
}
}
}
}
/* ******* UTILITIES ********* */
public String getProperty(String property) throws ProtocolException {
try{
String name = null;
name = this.reader.getValueConvertEnvProperties(property);
if(name==null)
throw new Exception("proprieta non definita");
return name.trim();
}catch(java.lang.Exception e) {
String msg = "Riscontrato errore durante la lettura della proprieta' '"+property+"': "+e.getMessage();
this.log.error(msg,e);
throw new ProtocolException(msg,e);
}
}
public String getOptionalProperty(String property) throws ProtocolException {
try{
String name = null;
name = this.reader.getValueConvertEnvProperties(property);
if(name==null)
return null;
return name.trim();
}catch(java.lang.Exception e) {
String msg = "Riscontrato errore durante la lettura della proprieta' '"+property+"': "+e.getMessage();
this.log.error(msg,e);
throw new ProtocolException(msg,e);
}
}
public Boolean getBooleanProperty(String property) throws ProtocolException {
try{
String name = null;
name = this.reader.getValueConvertEnvProperties(property);
if(name==null)
throw new Exception("proprieta non definita");
return Boolean.parseBoolean(name.trim());
}catch(java.lang.Exception e) {
String msg = "Riscontrato errore durante la lettura della proprieta' '"+property+"': "+e.getMessage();
this.log.error(msg,e);
throw new ProtocolException(msg,e);
}
}
}