ProtocolFactoryManager.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;
- import java.io.InputStream;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.Enumeration;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import javax.servlet.http.HttpServletRequest;
- import org.openspcoop2.message.OpenSPCoop2MessageFactory;
- import org.openspcoop2.protocol.basic.BasicFactory;
- import org.openspcoop2.protocol.engine.mapping.InformazioniServizioURLMapping;
- import org.openspcoop2.protocol.manifest.DefaultIntegrationError;
- import org.openspcoop2.protocol.manifest.Integration;
- import org.openspcoop2.protocol.manifest.IntegrationConfiguration;
- import org.openspcoop2.protocol.manifest.IntegrationConfigurationElementName;
- import org.openspcoop2.protocol.manifest.IntegrationConfigurationResourceIdentificationMode;
- import org.openspcoop2.protocol.manifest.IntegrationError;
- import org.openspcoop2.protocol.manifest.Openspcoop2;
- import org.openspcoop2.protocol.manifest.RestConfiguration;
- import org.openspcoop2.protocol.manifest.SoapConfiguration;
- import org.openspcoop2.protocol.manifest.SubContextMapping;
- import org.openspcoop2.protocol.manifest.Web;
- import org.openspcoop2.protocol.manifest.constants.ActorType;
- import org.openspcoop2.protocol.manifest.constants.Costanti;
- import org.openspcoop2.protocol.manifest.constants.FunctionType;
- import org.openspcoop2.protocol.manifest.constants.MessageType;
- import org.openspcoop2.protocol.manifest.constants.ResourceIdentificationType;
- import org.openspcoop2.protocol.manifest.constants.ServiceBinding;
- import org.openspcoop2.protocol.manifest.utils.XMLUtils;
- import org.openspcoop2.protocol.sdk.ConfigurazionePdD;
- import org.openspcoop2.protocol.sdk.IProtocolFactory;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.config.ITraduttore;
- import org.openspcoop2.protocol.sdk.constants.CodiceErroreCooperazione;
- import org.openspcoop2.protocol.sdk.constants.ContestoCodificaEccezione;
- import org.openspcoop2.protocol.sdk.constants.IDService;
- import org.openspcoop2.protocol.sdk.constants.Inoltro;
- import org.openspcoop2.protocol.sdk.constants.LivelloRilevanza;
- import org.openspcoop2.protocol.sdk.constants.ProfiloDiCollaborazione;
- import org.openspcoop2.protocol.sdk.constants.TipoOraRegistrazione;
- import org.openspcoop2.protocol.sdk.state.FunctionContextsCustom;
- import org.openspcoop2.protocol.sdk.state.URLProtocolContext;
- import org.openspcoop2.protocol.utils.EsitiProperties;
- import org.openspcoop2.utils.Utilities;
- import org.openspcoop2.utils.resources.ClassLoaderUtilities;
- import org.openspcoop2.utils.resources.MapReader;
- import org.slf4j.Logger;
- /**
- * Protocol Factory Manager
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ProtocolFactoryManager {
- private static ProtocolFactoryManager protocolFactoryManager = null;
- public static synchronized void initialize(Logger log,ConfigurazionePdD configPdD,String protocolDefault) throws ProtocolException {
- if(ProtocolFactoryManager.protocolFactoryManager==null){
- ProtocolFactoryManager.protocolFactoryManager = new ProtocolFactoryManager(log,configPdD,protocolDefault,false);
- // Inizializzo anche Esiti.properties
- EsitiProperties.initialize(configPdD.getConfigurationDir(), log, configPdD.getLoader(), protocolFactoryManager.getProtocolFactories());
- // Inizializzo risorse statiche che avevano bisogno di altre informazioni (es. esiti properties)
- protocolFactoryManager.initStaticInstance();
- }
- }
- public static synchronized void initializeSingleProtocol(Logger log,ConfigurazionePdD configPdD,String protocol) throws ProtocolException {
- if(ProtocolFactoryManager.protocolFactoryManager==null){
- ProtocolFactoryManager.protocolFactoryManager = new ProtocolFactoryManager(log,configPdD,protocol,true);
- // Inizializzo anche Esiti.properties
- EsitiProperties.initialize(configPdD.getConfigurationDir(), log, configPdD.getLoader(), protocolFactoryManager.getProtocolFactories());
- // Inizializzo risorse statiche che avevano bisogno di altre informazioni (es. esiti properties)
- protocolFactoryManager.initStaticInstance();
- }
- }
- public static ProtocolFactoryManager getInstance() throws ProtocolException {
- if(ProtocolFactoryManager.protocolFactoryManager==null){
- // spotbugs warning 'SING_SINGLETON_GETTER_NOT_SYNCHRONIZED': l'istanza viene creata allo startup
- synchronized (ProtocolFactoryManager.class) {
- throw new ProtocolException("ProtocolFactoryManager not initialized");
- }
- }
- return ProtocolFactoryManager.protocolFactoryManager;
- }
- public static void updateLogger(Logger log){
- if(ProtocolFactoryManager.protocolFactoryManager!=null){
- ProtocolFactoryManager.protocolFactoryManager.log = log;
- }
- }
-
- public boolean isSupportedProtocolLogger(String protocol) throws ProtocolException {
- IProtocolFactory<?> p = this.getProtocolFactoryByName(protocol);
- return p.getManifest().getProtocol().isLogger();
- }
-
- public void initializeAllProtocols() throws ProtocolException{
- /**System.out.println("Init All Factories ["+this.factories.size()+"] ...");*/
- if(this.factories!=null){
- Enumeration<IProtocolFactory<?>> factories = this.factories.elements();
- while (factories.hasMoreElements()) {
- IProtocolFactory<?> iProtocolFactory = (IProtocolFactory<?>) factories.nextElement();
- /**System.out.println("Init ["+iProtocolFactory.getProtocol()+"] ...");*/
-
- // INFO SERVIZIO
- iProtocolFactory.getProtocol();
- iProtocolFactory.getInformazioniProtocol();
- Openspcoop2 manifest = iProtocolFactory.getManifest();
- iProtocolFactory.getConfigurazionePdD();
-
- // LOGGER
- iProtocolFactory.getLogger();
- if(manifest.getProtocol().isLogger()) {
- iProtocolFactory.getProtocolLogger();
- }
-
- // PROTOCOL BUILDER
- iProtocolFactory.createBustaBuilder(null);
- iProtocolFactory.createErroreApplicativoBuilder();
- iProtocolFactory.createEsitoBuilder();
-
- // PROTOCOL VALIDATOR
- iProtocolFactory.createValidatoreErrori(null);
- iProtocolFactory.createValidazioneSintattica(null);
- iProtocolFactory.createValidazioneSemantica(null);
- iProtocolFactory.createValidazioneConSchema(null);
- iProtocolFactory.createValidazioneDocumenti();
- iProtocolFactory.createValidazioneAccordi();
-
- // DIAGNOSTICI
- iProtocolFactory.createDiagnosticDriver();
- iProtocolFactory.createDiagnosticProducer();
- iProtocolFactory.createDiagnosticSerializer();
-
- // TRACCE
- iProtocolFactory.createTracciaDriver();
- iProtocolFactory.createTracciaProducer();
- iProtocolFactory.createTracciaSerializer();
-
- // ARCHIVE
- iProtocolFactory.createArchive();
-
- // CONFIG
- List<String> versioni = iProtocolFactory.createProtocolConfiguration().getVersioni();
- for (String version : versioni) {
- iProtocolFactory.createProtocolVersionManager(version);
- }
- iProtocolFactory.createProtocolManager();
- ITraduttore traduttore = iProtocolFactory.createTraduttore();
- traduttore.toString(CodiceErroreCooperazione.AZIONE);
- traduttore.toString(ContestoCodificaEccezione.INTESTAZIONE);
- traduttore.toString(Inoltro.CON_DUPLICATI);
- traduttore.toString(LivelloRilevanza.INFO);
- traduttore.toString(ProfiloDiCollaborazione.SINCRONO);
- traduttore.toString(TipoOraRegistrazione.LOCALE);
-
- // CONSOLE
- iProtocolFactory.createDynamicConfigurationConsole();
-
- //System.out.println("Init ["+iProtocolFactory.getProtocol()+"] ok");
- }
- }
- }
-
-
- private MapReader<String, Openspcoop2> manifests = null;
- @SuppressWarnings("unused")
- private MapReader<String, URL> manifestURLs = null;
- private MapReader<String, IProtocolFactory<?>> factories = null;
- private StringBuilder protocolLoaded = new StringBuilder();
- private String protocolDefault = null;
- private MapReader<String, List<String>> tipiSoggettiValidi = null;
- private MapReader<String, String> tipiSoggettiDefault = null;
- private MapReader<String, List<String>> tipiServiziValidi_soap = null;
- private MapReader<String, String> tipiServiziDefault_soap = null;
- private MapReader<String, List<String>> tipiServiziValidi_rest = null;
- private MapReader<String, String> tipiServiziDefault_rest = null;
- private MapReader<String, List<String>> versioniValide = null;
- private MapReader<String, String> versioniDefault = null;
- private Logger log = null;
- private ProtocolFactoryManager(Logger log,ConfigurazionePdD configPdD,String protocolDefault, boolean searchSingleManifest) throws ProtocolException {
- try {
- Map<String, Openspcoop2> tmp_manifests = new HashMap<>();
- Map<String, URL> tmp_manifestURLs = new HashMap<>();
- Map<String, IProtocolFactory<?>> tmp_factories = new HashMap<>();
-
- Map<String, List<String>> tmp_tipiSoggettiValidi = new HashMap<>();
- Map<String, String> tmp_tipiSoggettiDefault = new HashMap<>();
-
- Map<String, List<String>> tmp_tipiServiziValidi_soap = new HashMap<>();
- Map<String, String> tmp_tipiServiziDefault_soap = new HashMap<>();
- Map<String, List<String>> tmp_tipiServiziValidi_rest = new HashMap<>();
- Map<String, String> tmp_tipiServiziDefault_rest = new HashMap<>();
-
- Map<String, List<String>> tmp_versioniValide = new HashMap<>();
- Map<String, String> tmp_versioniDefault = new HashMap<>();
-
- this.log = configPdD.getLog();
- this.protocolDefault = protocolDefault;
-
- configPdD.getLog().debug("Init ProtocolFactoryManager ...");
-
- // Loaded Manifest
- if(searchSingleManifest){
- // Quando si recuper il getClassLoader, nei command line, non viene tornato lo stesso loader delle classi per motivi di sicurezza.
- // Vedi API del metodo getClassLoader()
- URL pluginURL = ProtocolFactoryManager.class.getResource("/"+Costanti.MANIFEST_OPENSPCOOP2); // utile nei command line.
- loadManifest(configPdD, pluginURL, false, tmp_manifests, tmp_manifestURLs);
- }
- else{
- // 1. Cerco nel classloader (funziona per jboss5.x)
- Enumeration<URL> en = ProtocolFactoryManager.class.getClassLoader().getResources("/"+Costanti.MANIFEST_OPENSPCOOP2);
- while(en.hasMoreElements()){
- URL pluginURL = en.nextElement();
- loadManifest(configPdD, pluginURL, false, tmp_manifests, tmp_manifestURLs);
- }
-
- if(tmp_manifests.size()<=0){
- // 2. (funziona per jboss4.x) ma vengono forniti jar duplicati, quelli dentro ear e quelli dentro tmp.
- en = ProtocolFactoryManager.class.getClassLoader().getResources(Costanti.MANIFEST_OPENSPCOOP2);
- while(en.hasMoreElements()){
- URL pluginURL = en.nextElement();
- loadManifest(configPdD, pluginURL, true, tmp_manifests, tmp_manifestURLs);
- }
- }
- }
-
- if(tmp_manifests.size()<=0){
- throw new Exception("Protocol plugins not found");
- }
-
- // Validate Manifest Loaded
- configPdD.getLog().debug("Validate Manifests ...");
- validateProtocolFactoryLoaded(tmp_manifests,
- tmp_tipiSoggettiValidi,tmp_tipiSoggettiDefault,
- tmp_tipiServiziValidi_soap, tmp_tipiServiziDefault_soap,
- tmp_tipiServiziValidi_rest, tmp_tipiServiziDefault_rest,
- tmp_versioniValide, tmp_versioniDefault);
- configPdD.getLog().debug("Validate Manifests ok");
-
- // Init protocol factory
- for (String protocolManifest : tmp_manifests.keySet()) {
- configPdD.getLog().debug("Init ProtocolFactory for protocol ["+protocolManifest+"] ...");
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
-
- // Factory
- IProtocolFactory<?> p = this.getProtocolFactoryEngine(manifestOpenspcoop2);
- p.init(configPdD.getLog(), protocolManifest, configPdD,manifestOpenspcoop2);
- if(!p.createValidazioneConSchema(null).initialize(OpenSPCoop2MessageFactory.getDefaultMessageFactory())){
- throw new Exception("[protocol:"+protocolManifest+"] Inizialize with error for ValidazioneConSchema");
- }
- tmp_factories.put(protocolManifest, p);
-
- // Lista di protocolli caricati
- if(this.protocolLoaded.length()>0){
- this.protocolLoaded.append(",");
- }
- this.protocolLoaded.append(protocolManifest);
-
- // Carico url-mapping
- InformazioniServizioURLMapping.initMappingProperties(p);
-
- // Info di debug
- StringBuilder context = new StringBuilder();
- if(manifestOpenspcoop2.getWeb().getEmptyContext()!=null && manifestOpenspcoop2.getWeb().getEmptyContext().getEnabled()){
- context.append("@EMPTY-CONTEXT@");
- }
- for (int i = 0; i < manifestOpenspcoop2.getWeb().sizeContextList(); i++) {
- if(context.length()>0){
- context.append(",");
- }
- context.append(manifestOpenspcoop2.getWeb().getContext(i).getName());
- }
- log.info("Protocol loaded with id["+protocolManifest+"] factory["+manifestOpenspcoop2.getProtocol().getFactory()+"] contexts["+context.toString()+"]");
-
- configPdD.getLog().debug("Init ProtocolFactory for protocol ["+protocolManifest+"] ok");
- }
-
- // init
- this.manifests = new MapReader<>(tmp_manifests,true);
- this.manifestURLs = new MapReader<>(tmp_manifestURLs,true);
- this.factories = new MapReader<>(tmp_factories,true);
-
- this.tipiSoggettiValidi = new MapReader<>(tmp_tipiSoggettiValidi,true);
- this.tipiSoggettiDefault = new MapReader<>(tmp_tipiSoggettiDefault,true);
-
- this.tipiServiziValidi_soap = new MapReader<>(tmp_tipiServiziValidi_soap,true);
- this.tipiServiziDefault_soap = new MapReader<>(tmp_tipiServiziDefault_soap,true);
-
- this.tipiServiziValidi_rest = new MapReader<>(tmp_tipiServiziValidi_rest,true);
- this.tipiServiziDefault_rest = new MapReader<>(tmp_tipiServiziDefault_rest,true);
-
- this.versioniValide = new MapReader<>(tmp_versioniValide,true);
- this.versioniDefault = new MapReader<>(tmp_versioniDefault,true);
-
- } catch (Exception e) {
- configPdD.getLog().error("Init ProtocolFactoryManager failed: "+e.getMessage(),e);
- throw new ProtocolException("Inizializzazione ProtocolFactoryManager fallita: " + e, e);
- }
- }
-
- private void loadManifest(ConfigurazionePdD configPdD,URL pluginURL,boolean filtraSenzaErroreProtocolloGiaCaricato,
- Map<String, Openspcoop2> tmp_manifests, Map<String, URL> tmp_manifestURLs) throws Exception{
- // Manifest
- configPdD.getLog().debug("Analyze manifest ["+pluginURL.toString()+"] ...");
-
- InputStream openStream = null;
- byte[] manifest = null;
- try{
- openStream = pluginURL.openStream();
- manifest = Utilities.getAsByteArray(openStream);
- }finally{
- try{
- if(openStream!=null) {
- openStream.close();
- }
- }catch(Exception e){
- // close
- }
- }
- //System.out.println("CARICATO ["+new String(manifest)+"]");
- configPdD.getLog().debug("Analyze manifest ["+pluginURL.toString()+"] convertToOpenSPCoop2Manifest...");
- Openspcoop2 manifestOpenspcoop2 = XMLUtils.getOpenspcoop2Manifest(configPdD.getLog(),manifest);
- String protocollo = manifestOpenspcoop2.getProtocol().getName();
- configPdD.getLog().debug("Analyze manifest ["+pluginURL.toString()+"] with protocolName: ["+protocollo+"]");
- if(tmp_manifests.containsKey(protocollo)){
-
- URL urlGiaPresente = tmp_manifestURLs.get(protocollo);
- if(filtraSenzaErroreProtocolloGiaCaricato){
- configPdD.getLog().warn("ProtocolName ["+protocollo+"] is same for more plugin ["+pluginURL.toString()+"] and ["+urlGiaPresente.toURI()+"]");
- }
- else{
- throw new Exception("ProtocolName ["+protocollo+"] is same for more plugin ["+pluginURL.toString()+"] and ["+urlGiaPresente.toURI()+"]");
- }
-
- }
- tmp_manifests.put(protocollo, manifestOpenspcoop2);
- tmp_manifestURLs.put(protocollo, pluginURL);
- configPdD.getLog().debug("Analyze manifest ["+pluginURL.toString()+"] with success");
- }
-
- private void validateProtocolFactoryLoaded(Map<String, Openspcoop2> tmp_manifests,
- Map<String, List<String>> tmp_tipiSoggettiValidi,Map<String, String> tmp_tipiSoggettiDefault,
- Map<String, List<String>> tmp_tipiServiziValidi_soap, Map<String, String> tmp_tipiServiziDefault_soap,
- Map<String, List<String>> tmp_tipiServiziValidi_rest, Map<String, String> tmp_tipiServiziDefault_rest,
- Map<String, List<String>> tmp_versioniValide,Map<String, String> tmp_versioniDefault) throws Exception{
-
- // 1. controllare che solo uno possieda il contesto vuoto
- String protocolContextEmpty = null;
- for (String protocolManifest : tmp_manifests.keySet()) {
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
- if(manifestOpenspcoop2.getWeb().getEmptyContext()!=null && manifestOpenspcoop2.getWeb().getEmptyContext().getEnabled()){
- if(protocolContextEmpty==null){
- protocolContextEmpty = protocolManifest;
- }
- else{
- throw new Exception("Protocol ["+protocolContextEmpty+"] and ["+protocolManifest+"] with empty context. Only one is permitted");
- }
- }
-
- }
-
- // 2. controllare che i contesti siano tutti diversi
- Map<String, String> mappingContextToProtocol = new HashMap<>();
- for (String protocolManifest : tmp_manifests.keySet()) {
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
-
- for (int i = 0; i < manifestOpenspcoop2.getWeb().sizeContextList(); i++) {
- String context = manifestOpenspcoop2.getWeb().getContext(i).getName();
- if(!mappingContextToProtocol.containsKey(context)){
- mappingContextToProtocol.put(context, protocolManifest);
- }
- else{
- throw new Exception("Protocol ["+mappingContextToProtocol.get(context)+"] and ["+protocolManifest+"] with same context ["+context+"]");
- }
- }
-
- }
-
- // 2.b. controllare che le label siano tutti diversi
- Map<String, String> mappinLabelToProtocol = new HashMap<>();
- for (String protocolManifest : tmp_manifests.keySet()) {
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
-
- String label = manifestOpenspcoop2.getProtocol().getLabel();
- if(!mappinLabelToProtocol.containsKey(label)){
- mappinLabelToProtocol.put(label, protocolManifest);
- }
- else{
- throw new Exception("Protocol ["+mappinLabelToProtocol.get(label)+"] and ["+protocolManifest+"] with same label ["+label+"]");
- }
-
- }
-
- // 3. controllare e inizializzare i tipi di soggetti in modo che siano tutti diversi
- Map<String, String> mappingTipiSoggettiToProtocol = new HashMap<>();
- for (String protocolManifest : tmp_manifests.keySet()) {
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
-
- int size = manifestOpenspcoop2.getRegistry().getOrganization().getTypes().sizeTypeList();
- if(size<=0){
- throw new Exception("Organization type not defined for protocol ["+protocolManifest+"]");
- }
-
- for (int i = 0; i < size; i++) {
- String tipo = manifestOpenspcoop2.getRegistry().getOrganization().getTypes().getType(i).getName();
- if(!mappingTipiSoggettiToProtocol.containsKey(tipo)){
- mappingTipiSoggettiToProtocol.put(tipo, protocolManifest);
-
- List<String> tipiSoggettiPerProtocollo = null;
- if(tmp_tipiSoggettiValidi.containsKey(protocolManifest)){
- tipiSoggettiPerProtocollo = tmp_tipiSoggettiValidi.remove(protocolManifest);
- }
- else{
- tipiSoggettiPerProtocollo = new ArrayList<>();
- }
- tipiSoggettiPerProtocollo.add(tipo);
- tmp_tipiSoggettiValidi.put(protocolManifest, tipiSoggettiPerProtocollo);
- }
- else{
- throw new Exception("Protocol ["+mappingTipiSoggettiToProtocol.get(tipo)+"] and ["+protocolManifest+"] with same subject type ["+tipo+"]");
- }
- }
-
- for (int i = 0; i < size; i++) {
- String protocolType = manifestOpenspcoop2.getRegistry().getOrganization().getTypes().getType(i).getProtocol();
- if(protocolType!=null) {
- int count = 0;
- for (int j = 0; j < size; j++) {
- String protocolTypeCheck = manifestOpenspcoop2.getRegistry().getOrganization().getTypes().getType(j).getProtocol();
- if(protocolTypeCheck!=null) {
- if(protocolTypeCheck.equals(protocolType)) {
- count++;
- }
- }
- }
- if(count>1) {
- throw new Exception("Protocol ["+protocolManifest+"] with same subject 'protocol conversion type' ["+protocolType+"]");
- }
- }
- }
-
- String tipoDefault = manifestOpenspcoop2.getRegistry().getOrganization().getTypes().getType(0).getName();
- if(tmp_tipiSoggettiValidi.get(protocolManifest).contains(tipoDefault)==false){
- throw new Exception("Unknown default subject type ["+tipoDefault+"] defined in protocol ["+protocolManifest+"]");
- }
- tmp_tipiSoggettiDefault.put(protocolManifest, tipoDefault);
-
- }
-
-
- // 4. controllare e inizializzare i tipi di servizi in modo che siano tutti diversi
- String tipoServizioDefaultSoap = null;
- String tipoServizioDefaultRest = null;
- Map<String, String> mappingTipiServiziToProtocol = new HashMap<>();
- for (String protocolManifest : tmp_manifests.keySet()) {
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
-
- int size = manifestOpenspcoop2.getRegistry().getService().getTypes().sizeTypeList();
- if(size<=0){
- throw new Exception("Service type not defined for protocol ["+protocolManifest+"]");
- }
-
- for (int i = 0; i < size; i++) {
- String tipo = manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getName();
- ServiceBinding serviceBinding = manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getBinding();
- if(!mappingTipiServiziToProtocol.containsKey(tipo)){
- mappingTipiServiziToProtocol.put(tipo, protocolManifest);
-
- List<String> tipiServiziPerProtocollo_soap = null;
- if(tmp_tipiServiziValidi_soap.containsKey(protocolManifest)){
- tipiServiziPerProtocollo_soap = tmp_tipiServiziValidi_soap.get(protocolManifest);
- }
- else{
- tipiServiziPerProtocollo_soap = new ArrayList<>();
- tmp_tipiServiziValidi_soap.put(protocolManifest, tipiServiziPerProtocollo_soap);
- }
-
- List<String> tipiServiziPerProtocollo_rest = null;
- if(tmp_tipiServiziValidi_rest.containsKey(protocolManifest)){
- tipiServiziPerProtocollo_rest = tmp_tipiServiziValidi_rest.get(protocolManifest);
- }
- else{
- tipiServiziPerProtocollo_rest = new ArrayList<>();
- tmp_tipiServiziValidi_rest.put(protocolManifest, tipiServiziPerProtocollo_rest);
- }
-
- if(serviceBinding==null || ServiceBinding.SOAP.equals(serviceBinding)){
- tipiServiziPerProtocollo_soap.add(tipo);
- if(tipoServizioDefaultSoap==null){
- tipoServizioDefaultSoap = tipo;
- }
- }
-
- if(serviceBinding==null || ServiceBinding.REST.equals(serviceBinding)){
- tipiServiziPerProtocollo_rest.add(tipo);
- if(tipoServizioDefaultRest==null){
- tipoServizioDefaultRest = tipo;
- }
- }
- }
- else{
- throw new Exception("Protocol ["+mappingTipiServiziToProtocol.get(tipo)+"] and ["+protocolManifest+"] with same service type ["+tipo+"]");
- }
- }
-
- for (int i = 0; i < size; i++) {
- String protocolType = manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getProtocol();
- if(protocolType!=null) {
- int count = 0;
- for (int j = 0; j < size; j++) {
- String protocolTypeCheck = manifestOpenspcoop2.getRegistry().getService().getTypes().getType(j).getProtocol();
- if(protocolTypeCheck!=null) {
- if(protocolTypeCheck.equals(protocolType)) {
- count++;
- }
- }
- }
- if(count>1) {
- throw new Exception("Protocol ["+protocolManifest+"] with same service 'protocol conversion type' ["+protocolType+"]");
- }
- }
- }
-
- if(tipoServizioDefaultSoap!=null){
- tmp_tipiServiziDefault_soap.put(protocolManifest, tipoServizioDefaultSoap);
- }
- if(tipoServizioDefaultRest!=null){
- tmp_tipiServiziDefault_rest.put(protocolManifest, tipoServizioDefaultRest);
- }
-
- }
-
-
-
- // 5. controllare e inizializzare le versioni dei protocolli
- for (String protocolManifest : tmp_manifests.keySet()) {
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
-
- int size = manifestOpenspcoop2.getRegistry().getVersions().sizeVersionList();
- if(size<=0){
- throw new Exception("Version not defined for protocol ["+protocolManifest+"]");
- }
-
- for (int i = 0; i < size; i++) {
- String version = manifestOpenspcoop2.getRegistry().getVersions().getVersion(i).getName();
-
- List<String> versioniPerProtocollo = null;
- if(tmp_versioniValide.containsKey(protocolManifest)){
- versioniPerProtocollo = tmp_versioniValide.remove(protocolManifest);
- }
- else{
- versioniPerProtocollo = new ArrayList<>();
- }
- versioniPerProtocollo.add(version);
- tmp_versioniValide.put(protocolManifest, versioniPerProtocollo);
- }
-
- String versioneDefault = manifestOpenspcoop2.getRegistry().getVersions().getVersion(0).getName();
- if(tmp_versioniValide.get(protocolManifest).contains(versioneDefault)==false){
- throw new Exception("Unknown default version ["+versioneDefault+"] defined in protocol ["+protocolManifest+"]");
- }
- tmp_versioniDefault.put(protocolManifest, versioneDefault);
- }
-
-
-
- // 6. controllare e inizializzare i service binding di default
- for (String protocolManifest : tmp_manifests.keySet()) {
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
-
- if(manifestOpenspcoop2.getBinding()==null){
- throw new Exception("Binding not defined for protocol ["+protocolManifest+"]");
- }
- if(manifestOpenspcoop2.getBinding().getSoap()==null && manifestOpenspcoop2.getBinding().getRest()==null){
- throw new Exception("Binding (soap/rest) not defined for protocol ["+protocolManifest+"]");
- }
- if(manifestOpenspcoop2.getBinding().getSoap()!=null && manifestOpenspcoop2.getBinding().getRest()!=null){
- if(manifestOpenspcoop2.getBinding().getDefault()==null)
- throw new Exception("Unknown default binding for protocol ["+protocolManifest+"]");
- }
-
- boolean soapEnabled = false;
- if(manifestOpenspcoop2.getBinding().getSoap()!=null){
- if(!manifestOpenspcoop2.getBinding().getSoap().isSoap11() && !manifestOpenspcoop2.getBinding().getSoap().isSoap12()){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: none of the soap versions is enabled");
- }
- if(manifestOpenspcoop2.getBinding().getSoap().isSoap11Mtom() && !manifestOpenspcoop2.getBinding().getSoap().isSoap11()){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: if soap 1.1 is not enabled you can not enable MTOM");
- }
- if(manifestOpenspcoop2.getBinding().getSoap().isSoap11WithAttachments() && !manifestOpenspcoop2.getBinding().getSoap().isSoap11()){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: if soap 1.1 is not enabled you can not enable attachments");
- }
- if(manifestOpenspcoop2.getBinding().getSoap().isSoap12Mtom() && !manifestOpenspcoop2.getBinding().getSoap().isSoap12()){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: if soap 1.2 is not enabled you can not enable MTOM");
- }
- if(manifestOpenspcoop2.getBinding().getSoap().isSoap12WithAttachments() && !manifestOpenspcoop2.getBinding().getSoap().isSoap12()){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: if soap 1.2 is not enabled you can not enable attachments");
- }
-
- if(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError()==null){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: it has not defined the configuration for error handling");
- }
- if(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal()==null){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: it has not defined the configuration for internal error handling");
- }
- if(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getDefault()==null){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: it has not defined the default configuration for internal error handling");
- }
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getDefault(),"default");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getAuthentication(),"authentication");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getAuthorization(),"authorization");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getNotFound(),"notFound");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getBadRequest(),"badRequest");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getConflict(),"conflict");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getLimitExceeded(),"limitExceeded");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getTooManyRequests(),"tooManyRequests");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getServiceUnavailable(),"serviceUnavailable");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getEndpointRequestTimedOut(),"endpointRequestTimedOut");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getBadResponse(),"badResponse");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getInternalRequestError(),"internalRequestError");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getInternal().getInternalResponseError(),"internalResponseError");
- if(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal()==null){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: it has not defined the configuration for external error handling");
- }
- if(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getDefault()==null){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: it has not defined the default configuration for external error handling");
- }
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getDefault(),"default");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getAuthentication(),"authentication");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getAuthorization(),"authorization");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getNotFound(),"notFound");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getBadRequest(),"badRequest");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getConflict(),"conflict");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getLimitExceeded(),"limitExceeded");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getTooManyRequests(),"tooManyRequests");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getServiceUnavailable(),"serviceUnavailable");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getEndpointRequestTimedOut(),"endpointRequestTimedOut");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getBadResponse(),"badResponse");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getInternalRequestError(),"internalRequestError");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getSoap().getIntegrationError().getExternal().getInternalResponseError(),"internalResponseError");
-
- if(manifestOpenspcoop2.getBinding().getSoap().getMediaTypeCollection()==null){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: media type collection undefined");
- }
- if(manifestOpenspcoop2.getBinding().getSoap().getMediaTypeCollection().sizeMediaTypeList()<=0 &&
- manifestOpenspcoop2.getBinding().getSoap().getMediaTypeCollection().getDefault()==null &&
- manifestOpenspcoop2.getBinding().getSoap().getMediaTypeCollection().getUndefined()==null){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"]: media type collection undefined");
- }
-
- soapEnabled = true;
- }
-
- boolean restEnabled = false;
- if(manifestOpenspcoop2.getBinding().getRest()!=null){
- if(!manifestOpenspcoop2.getBinding().getRest().isBinary() &&
- !manifestOpenspcoop2.getBinding().getRest().isJson() &&
- !manifestOpenspcoop2.getBinding().getRest().isXml() &&
- !manifestOpenspcoop2.getBinding().getRest().isMimeMultipart()){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"]: none of the message types is enabled");
- }
-
- if(manifestOpenspcoop2.getBinding().getRest().getIntegrationError()==null){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"]: it has not defined the configuration for error handling");
- }
- if(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal()==null){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"]: it has not defined the configuration for internal error handling");
- }
- if(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getDefault()==null){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"]: it has not defined the default configuration for internal error handling");
- }
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getDefault(),"default");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getAuthentication(),"authentication");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getAuthorization(),"authorization");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getNotFound(),"notFound");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getBadRequest(),"badRequest");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getConflict(),"conflict");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getLimitExceeded(),"limitExceeded");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getTooManyRequests(),"tooManyRequests");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getServiceUnavailable(),"serviceUnavailable");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getEndpointRequestTimedOut(),"endpointRequestTimedOut");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getBadResponse(),"badResponse");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getInternalRequestError(),"internalRequestError");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getInternal().getInternalResponseError(),"internalResponseError");
- if(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal()==null){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"]: it has not defined the configuration for external error handling");
- }
- if(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getDefault()==null){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"]: it has not defined the default configuration for external error handling");
- }
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getDefault(),"default");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getAuthentication(),"authentication");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getAuthorization(),"authorization");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getNotFound(),"notFound");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getBadRequest(),"badRequest");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getConflict(),"conflict");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getLimitExceeded(),"limitExceeded");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getTooManyRequests(),"tooManyRequests");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getServiceUnavailable(),"serviceUnavailable");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getEndpointRequestTimedOut(),"endpointRequestTimedOut");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getBadResponse(),"badResponse");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getInternalRequestError(),"internalRequestError");
- checkHttpReturnCode(manifestOpenspcoop2.getBinding().getRest().getIntegrationError().getExternal().getInternalResponseError(),"internalResponseError");
-
- if(manifestOpenspcoop2.getBinding().getRest().getMediaTypeCollection()==null){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"]: media type collection undefined");
- }
- if(manifestOpenspcoop2.getBinding().getRest().getMediaTypeCollection().sizeMediaTypeList()<=0 &&
- manifestOpenspcoop2.getBinding().getRest().getMediaTypeCollection().getDefault()==null &&
- manifestOpenspcoop2.getBinding().getRest().getMediaTypeCollection().getUndefined()==null){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"]: media type collection undefined");
- }
-
- restEnabled = true;
- }
-
- for (int i = 0; i < manifestOpenspcoop2.getWeb().sizeContextList(); i++) {
- String context = manifestOpenspcoop2.getWeb().getContext(i).getName();
- ServiceBinding serviceBinding = manifestOpenspcoop2.getWeb().getContext(i).getBinding();
- if(serviceBinding!=null){
- if(ServiceBinding.REST.equals(serviceBinding)){
- if(!restEnabled){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"] is disabled: cannot define restriction for web context "+context);
- }
- }
- else{
- if(!soapEnabled){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"] is disabled: cannot define restriction for web context "+context);
- }
- }
- }
- for (int j = 0; j < manifestOpenspcoop2.getWeb().getContext(i).sizeSubContextList(); j++) {
- SubContextMapping subContext = manifestOpenspcoop2.getWeb().getContext(i).getSubContext(j);
- checkMessageType(context,subContext.getBase(),subContext.getMessageType(),
- manifestOpenspcoop2.getBinding().getSoap(),
- manifestOpenspcoop2.getBinding().getRest());
- }
- if(manifestOpenspcoop2.getWeb().getContext(i).getEmptySubContext()!=null){
- checkMessageType(context,Costanti.CONTEXT_EMPTY,manifestOpenspcoop2.getWeb().getContext(i).getEmptySubContext().getMessageType(),
- manifestOpenspcoop2.getBinding().getSoap(),
- manifestOpenspcoop2.getBinding().getRest());
- }
-
- if(manifestOpenspcoop2.getWeb().getContext(i).getSoapMediaTypeCollection()!=null){
- if(manifestOpenspcoop2.getWeb().getContext(i).getSoapMediaTypeCollection().sizeMediaTypeList()>0 ||
- manifestOpenspcoop2.getWeb().getContext(i).getSoapMediaTypeCollection().getDefault()!=null ||
- manifestOpenspcoop2.getWeb().getContext(i).getSoapMediaTypeCollection().getUndefined()!=null){
- if(soapEnabled==false){
- throw new ProtocolException("(Context:"+context+") SoapMediaType not supported; Soap disabled");
- }
- }
- }
- if(manifestOpenspcoop2.getWeb().getContext(i).getRestMediaTypeCollection()!=null){
- if(manifestOpenspcoop2.getWeb().getContext(i).getRestMediaTypeCollection().sizeMediaTypeList()>0 ||
- manifestOpenspcoop2.getWeb().getContext(i).getRestMediaTypeCollection().getDefault()!=null ||
- manifestOpenspcoop2.getWeb().getContext(i).getRestMediaTypeCollection().getUndefined()!=null){
- if(restEnabled==false){
- throw new ProtocolException("(Context:"+context+") RestMediaType not supported; Rest disabled");
- }
- }
- }
- }
-
- if(manifestOpenspcoop2.getWeb().getEmptyContext()!=null){
- ServiceBinding serviceBinding = manifestOpenspcoop2.getWeb().getEmptyContext().getBinding();
- if(serviceBinding!=null){
- if(ServiceBinding.REST.equals(serviceBinding)){
- if(!restEnabled){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"] is disabled: cannot define restriction for empty web context");
- }
- }
- else{
- if(!soapEnabled){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"] is disabled: cannot define restriction for empty web context");
- }
- }
- }
- for (int j = 0; j < manifestOpenspcoop2.getWeb().getEmptyContext().sizeSubContextList(); j++) {
- SubContextMapping subContext = manifestOpenspcoop2.getWeb().getEmptyContext().getSubContext(j);
- checkMessageType(Costanti.CONTEXT_EMPTY,subContext.getBase(),subContext.getMessageType(),
- manifestOpenspcoop2.getBinding().getSoap(),
- manifestOpenspcoop2.getBinding().getRest());
- }
- if(manifestOpenspcoop2.getWeb().getEmptyContext().getEmptySubContext()!=null){
- checkMessageType(Costanti.CONTEXT_EMPTY,Costanti.CONTEXT_EMPTY,manifestOpenspcoop2.getWeb().getEmptyContext().getEmptySubContext().getMessageType(),
- manifestOpenspcoop2.getBinding().getSoap(),
- manifestOpenspcoop2.getBinding().getRest());
- }
-
- if(manifestOpenspcoop2.getWeb().getEmptyContext().getSoapMediaTypeCollection()!=null){
- if(manifestOpenspcoop2.getWeb().getEmptyContext().getSoapMediaTypeCollection().sizeMediaTypeList()>0 ||
- manifestOpenspcoop2.getWeb().getEmptyContext().getSoapMediaTypeCollection().getDefault()!=null ||
- manifestOpenspcoop2.getWeb().getEmptyContext().getSoapMediaTypeCollection().getUndefined()!=null){
- if(soapEnabled==false){
- throw new ProtocolException("(Context:"+Costanti.CONTEXT_EMPTY+") SoapMediaType not supported; Soap disabled");
- }
- }
- }
- if(manifestOpenspcoop2.getWeb().getEmptyContext().getRestMediaTypeCollection()!=null){
- if(manifestOpenspcoop2.getWeb().getEmptyContext().getRestMediaTypeCollection().sizeMediaTypeList()>0 ||
- manifestOpenspcoop2.getWeb().getEmptyContext().getRestMediaTypeCollection().getDefault()!=null ||
- manifestOpenspcoop2.getWeb().getEmptyContext().getRestMediaTypeCollection().getUndefined()!=null){
- if(restEnabled==false){
- throw new ProtocolException("(Context:"+Costanti.CONTEXT_EMPTY+") RestMediaType not supported; Rest disabled");
- }
- }
- }
- }
-
- for (int i = 0; i < manifestOpenspcoop2.getRegistry().getService().getTypes().sizeTypeList(); i++) {
- String serviceType = manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getName();
- ServiceBinding serviceBinding = manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getBinding();
- if(serviceBinding!=null){
- if(ServiceBinding.REST.equals(serviceBinding)){
- if(!restEnabled){
- throw new Exception("Binding Rest for protocol ["+protocolManifest+"] is disabled: cannot define restriction for service type "+serviceType);
- }
- }
- else{
- if(!soapEnabled){
- throw new Exception("Binding Soap for protocol ["+protocolManifest+"] is disabled: cannot define restriction for service type "+serviceType);
- }
- }
- }
-
- if( manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getSoapMediaTypeCollection()!=null){
- if( manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getSoapMediaTypeCollection().sizeMediaTypeList()>0 ||
- manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getSoapMediaTypeCollection().getDefault()!=null ||
- manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getSoapMediaTypeCollection().getUndefined()!=null){
- if(soapEnabled==false){
- throw new ProtocolException("(ServiceType:"+serviceType+") SoapMediaType not supported; Soap disabled");
- }
- }
- }
- if( manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getRestMediaTypeCollection()!=null){
- if( manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getRestMediaTypeCollection().sizeMediaTypeList()>0 ||
- manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getRestMediaTypeCollection().getDefault()!=null ||
- manifestOpenspcoop2.getRegistry().getService().getTypes().getType(i).getRestMediaTypeCollection().getUndefined()!=null){
- if(restEnabled==false){
- throw new ProtocolException("(ServiceType:"+serviceType+") RestMediaType not supported; Rest disabled");
- }
- }
- }
- }
-
- if(soapEnabled){
- if(tipoServizioDefaultSoap==null){
- throw new Exception("Service type not defined for protocol ["+protocolManifest+"] compatible with soap");
- }
- }
- if(restEnabled){
- if(tipoServizioDefaultRest==null){
- throw new Exception("Service type not defined for protocol ["+protocolManifest+"] compatible with rest");
- }
- }
- }
-
- // 7. controllo configurazione dei parametri di integrazione
- for (String protocolManifest : tmp_manifests.keySet()) {
- Openspcoop2 manifestOpenspcoop2 = tmp_manifests.get(protocolManifest);
-
- if(manifestOpenspcoop2.getBinding().getRest()!=null) {
- if(manifestOpenspcoop2.getBinding().getRest().getIntegration()==null){
- throw new Exception("BindingIntegrationRest not defined for protocol ["+protocolManifest+"]");
- }
- Integration integrationRestConfig = manifestOpenspcoop2.getBinding().getRest().getIntegration();
- checkIntegration(integrationRestConfig, false, protocolManifest);
- }
-
- if(manifestOpenspcoop2.getBinding().getSoap()!=null) {
- if(manifestOpenspcoop2.getBinding().getSoap().getIntegration()==null){
- throw new Exception("BindingIntegrationSoap not defined for protocol ["+protocolManifest+"]");
- }
- Integration integrationSoapConfig = manifestOpenspcoop2.getBinding().getSoap().getIntegration();
- checkIntegration(integrationSoapConfig, true, protocolManifest);
- }
- }
- }
- private void checkIntegration(Integration integrationConfig, boolean soap, String protocolManifest) throws Exception {
- String prefix = soap?"Soap":"Rest";
-
- if(integrationConfig.getImplementation()==null){
- throw new Exception("BindingIntegration"+prefix+", implementation not defined for protocol ["+protocolManifest+"]");
- }
- IntegrationConfiguration integrationConfigImpl = integrationConfig.getImplementation();
- checkIntegration(integrationConfigImpl, soap, true, protocolManifest);
-
- if(integrationConfig.getSubscription()==null){
- throw new Exception("BindingIntegration"+prefix+", subscription not defined for protocol ["+protocolManifest+"]");
- }
- IntegrationConfiguration integrationConfigSub = integrationConfig.getSubscription();
- checkIntegration(integrationConfigSub, soap, false, protocolManifest);
- }
- private void checkIntegration(IntegrationConfiguration integrationConfig, boolean soap, boolean impl, String protocolManifest) throws Exception {
-
- String prefix = soap?"Soap":"Rest";
- prefix = prefix + (impl?"Implementation":"Subscription");
-
- if(integrationConfig.getName()==null || integrationConfig.getName().sizeParamList()<=0){
- throw new Exception("BindingIntegration"+prefix+", name not defined for protocol ["+protocolManifest+"]");
- }
- this.checkIntegrationName(integrationConfig.getName().getParamList(), protocolManifest, prefix, "name", false, false);
- if(integrationConfig.getResourceIdentification()==null) {
- throw new Exception("BindingIntegration"+prefix+", resource identification not defined for protocol ["+protocolManifest+"]");
- }
- if(integrationConfig.getResourceIdentification().getIdentificationModes()==null || integrationConfig.getResourceIdentification().getIdentificationModes().sizeModeList()<=0) {
- throw new Exception("BindingIntegration"+prefix+", resource identification modes not defined for protocol ["+protocolManifest+"]");
- }
- ResourceIdentificationType defaultR = integrationConfig.getResourceIdentification().getIdentificationModes().getDefault();
- if(defaultR==null) {
- if(integrationConfig.getResourceIdentification().getIdentificationModes().sizeModeList()>1) {
- throw new Exception("BindingIntegration"+prefix+", resource identification default mode undefined for protocol ["+protocolManifest+"]");
- }
- else {
- defaultR = integrationConfig.getResourceIdentification().getIdentificationModes().getMode(0).getName();
- }
- }
- boolean defaultFound = false;
- for (IntegrationConfigurationResourceIdentificationMode mode : integrationConfig.getResourceIdentification().getIdentificationModes().getModeList()) {
- if(!soap) {
- if(ResourceIdentificationType.SOAP_ACTION.equals(mode.getName())) {
- throw new Exception("BindingIntegration"+prefix+", resource identification mode '"+mode.getName()+"' not permit in rest binding, founded in protocol ["+protocolManifest+"]");
- }
- }
- if(!impl) {
- if(ResourceIdentificationType.PROTOCOL.equals(mode.getName())) {
- throw new Exception("BindingIntegration"+prefix+", resource identification mode '"+mode.getName()+"' not permit in subscription binding, founded in protocol ["+protocolManifest+"]");
- }
- }
- if(defaultR!=null) {
- if(mode.getName().equals(defaultR)) {
- defaultFound = true;
- }
- }
- }
- if(!defaultFound) {
- throw new Exception("BindingIntegration"+prefix+", resource identification default mode '"+defaultR+"' not found in supported modes for protocol ["+protocolManifest+"]");
- }
- if(ResourceIdentificationType.CONTENT.equals(defaultR) ||
- ResourceIdentificationType.HEADER.equals(defaultR) ||
- ResourceIdentificationType.URL.equals(defaultR)) {
- if(integrationConfig.getResourceIdentification().getIdentificationParameter()==null ||
- integrationConfig.getResourceIdentification().getIdentificationParameter().sizeParamList()<=0) {
- throw new Exception("BindingIntegration"+prefix+", resource identification default mode '"+defaultR+"' require identification parameter for protocol ["+protocolManifest+"]");
- }
- this.checkIntegrationName(integrationConfig.getResourceIdentification().getIdentificationParameter().getParamList(),
- protocolManifest, prefix, "identificationParameter", true, false);
- }
-
- if(integrationConfig.getResourceIdentification().getSpecificResource()==null) {
- throw new Exception("BindingIntegration"+prefix+", specific resource config not defined for protocol ["+protocolManifest+"]");
- }
- if(integrationConfig.getResourceIdentification().getSpecificResource().getName()==null ||
- integrationConfig.getResourceIdentification().getSpecificResource().getName().sizeParamList()<=0) {
- throw new Exception("BindingIntegration"+prefix+", specific resource name undefined for protocol ["+protocolManifest+"]");
- }
- this.checkIntegrationName(integrationConfig.getResourceIdentification().getSpecificResource().getName().getParamList(),
- protocolManifest, prefix, "specific resource name", true, true);
- }
- private void checkIntegrationName(List<IntegrationConfigurationElementName> list, String protocolManifest, String prefix, String object,
- boolean namePermit, boolean ruleNamePermit) throws Exception {
- for (IntegrationConfigurationElementName name : list) {
- if(name==null) {
- throw new Exception("BindingIntegration"+prefix+", "+object+" not defined for protocol ["+protocolManifest+"]");
- }
- if( (name.getPrefix()==null || "".equals(name.getPrefix())) &&
- (name.getActor()==null) &&
- (name.getSuffix()==null || "".equals(name.getSuffix()))) {
- throw new Exception("BindingIntegration"+prefix+", "+object+" with wrong param (prefix, actor and suffix undefined) for protocol ["+protocolManifest+"]");
- }
- if(ActorType.NAME.equals(name.getActor()) && !namePermit) {
- throw new Exception("BindingIntegration"+prefix+", "+object+" with wrong param (actor '"+name.getActor()+"' not permit in this context) for protocol ["+protocolManifest+"]");
- }
- if(ActorType.RULE_NAME.equals(name.getActor()) && !ruleNamePermit) {
- throw new Exception("BindingIntegration"+prefix+", "+object+" with wrong param (actor '"+name.getActor()+"' not permit in this context) for protocol ["+protocolManifest+"]");
- }
-
- }
- }
-
- private void checkHttpReturnCode(DefaultIntegrationError ir,String function) throws ProtocolException {
- if(ir!=null){
- int httpReturnCode = ir.getErrorCode().getHttp();
- this.checkHttpReturnCode(httpReturnCode, function+".http");
-
- int govwayReturnCode = ir.getErrorCode().getGovway();
- this.checkHttpReturnCode(govwayReturnCode, function+".govway");
- }
- }
- private void checkHttpReturnCode(IntegrationError ir,String function) throws ProtocolException {
- if(ir!=null){
- int httpReturnCode = ir.getErrorCode().getHttp();
- this.checkHttpReturnCode(httpReturnCode, function+".http");
-
- int govwayReturnCode = ir.getErrorCode().getGovway();
- this.checkHttpReturnCode(govwayReturnCode, function+".rfc7807");
- }
- }
- private void checkHttpReturnCode(int httpReturnCode,String function) throws ProtocolException {
- String msgError = "The value provided ("+httpReturnCode+") is not used as http return code (use [200,299],[400-599])";
- if(httpReturnCode<200){
- throw new ProtocolException(msgError);
- }
- if(httpReturnCode>=300 && httpReturnCode<400){
- throw new ProtocolException(msgError);
- }
- if(httpReturnCode>=600){
- throw new ProtocolException(msgError);
- }
- }
- private void checkMessageType(String context, String subContext, MessageType messageType,SoapConfiguration soapBinding, RestConfiguration restBinding) throws ProtocolException {
- if(MessageType.XML.equals(messageType)){
- if(restBinding==null){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported; Rest disabled");
- }
- if(!restBinding.isXml()){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported in RestBinding; Xml disabled");
- }
- }
- else if(MessageType.JSON.equals(messageType)){
- if(restBinding==null){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported; Rest disabled");
- }
- if(!restBinding.isJson()){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported in RestBinding; Json disabled");
- }
- }
- else if(MessageType.BINARY.equals(messageType)){
- if(restBinding==null){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported; Rest disabled");
- }
- if(!restBinding.isBinary()){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported in RestBinding; Binary disabled");
- }
- }
- else if(MessageType.MIME_MULTIPART.equals(messageType)){
- if(restBinding==null){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported; Rest disabled");
- }
- if(!restBinding.isMimeMultipart()){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported in RestBinding; MimeMultipart disabled");
- }
- }
- else if(MessageType.SOAP_11.equals(messageType)){
- if(soapBinding==null){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported; Soap disabled");
- }
- if(!soapBinding.isSoap11()){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported in SoapBinding; Soap11 disabled");
- }
- }
- else if(MessageType.SOAP_12.equals(messageType)){
- if(soapBinding==null){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported; Soap disabled");
- }
- if(!soapBinding.isSoap12()){
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported in SoapBinding; Soap12 disabled");
- }
- }
- else{
- throw new ProtocolException("(Context:"+context+" SubContext:"+subContext+") MessageType ["+messageType+"] not supported in Binding");
- }
- }
-
- private IProtocolFactory<?> getProtocolFactoryEngine(Openspcoop2 openspcoop2Manifest) throws ProtocolException {
-
- String factoryClass = null;
- try{
- factoryClass = openspcoop2Manifest.getProtocol().getFactory();
- IProtocolFactory<?> p = (IProtocolFactory<?>) ClassLoaderUtilities.newInstance(factoryClass);
- return p;
- } catch (Exception e) {
- throw new ProtocolException("Impossibile caricare la factory indicata ["+factoryClass+"] " + e, e);
- }
- }
-
-
- public Openspcoop2 getProtocolManifest(HttpServletRequest request, FunctionContextsCustom customContexts) throws ProtocolException {
-
- URLProtocolContext urlProtocolContext = null;
- try {
- urlProtocolContext = new URLProtocolContextImpl(request, this.log, true, customContexts);
- } catch (Exception e) {
- throw new ProtocolException("Impossibile recuperare il nome del contesto dalla request: ServletContext["+request.getContextPath()+"] RequestURI["+request.getRequestURI()+"]",e);
- }
- return getProtocolManifest(urlProtocolContext.getProtocolWebContext());
- }
-
-
- public Openspcoop2 getProtocolManifest(String servletContextName) throws ProtocolException {
- try {
-
- Iterator<Openspcoop2> itProtocols = this.manifests.values().iterator();
- while (itProtocols.hasNext()) {
- Openspcoop2 openspcoop2Manifest = itProtocols.next();
- Web webContext = openspcoop2Manifest.getWeb();
-
- if(Costanti.CONTEXT_EMPTY.equals(servletContextName)){
- if(webContext.getEmptyContext()!=null && webContext.getEmptyContext().getEnabled()){
- return openspcoop2Manifest;
- }
- }else{
- for (int i = 0; i < webContext.sizeContextList(); i++) {
- if(webContext.getContext(i).getName().equals(servletContextName)){
- return openspcoop2Manifest;
- }
- }
- }
-
- }
-
- throw new ProtocolException("Contesto [" + servletContextName + "] non assegnato a nessun protocollo");
- } catch (Exception e) {
- throw new ProtocolException("Impossibile individuare il protocollo assegnato al contesto [" + servletContextName + "]: " + e, e);
- }
- }
-
- public IProtocolFactory<?> getProtocolFactoryByServletContext(HttpServletRequest request, FunctionContextsCustom customContexts) throws ProtocolException {
- Openspcoop2 m = this.getProtocolManifest(request,customContexts);
- if(this.factories.containsKey(m.getProtocol().getName())){
- return this.factories.get(m.getProtocol().getName());
- }
- else{
- throw new ProtocolException("ProtocolPlugin with name ["+m.getProtocol().getName()+"] not found");
- }
- }
-
- public IProtocolFactory<?> getProtocolFactoryByServletContext(String servletContext) throws ProtocolException {
- Openspcoop2 m = this.getProtocolManifest(servletContext);
- if(this.factories.containsKey(m.getProtocol().getName())){
- return this.factories.get(m.getProtocol().getName());
- }
- else{
- throw new ProtocolException("ProtocolPlugin with name ["+m.getProtocol().getName()+"] not found");
- }
- }
-
- public IProtocolFactory<?> getProtocolFactoryByName(String protocol) throws ProtocolException {
- if(this.factories.containsKey(protocol)){
- return this.factories.get(protocol);
- }
- else{
- throw new ProtocolException("ProtocolPlugin with name ["+protocol+"] not found");
- }
- }
-
- public boolean existsProtocolFactory(String protocol) {
- return this.factories.containsKey(protocol);
- }
-
- public IProtocolFactory<?> getProtocolFactoryByOrganizationType(String organizationType) throws ProtocolException {
- String protocol = this.getProtocolByOrganizationType(organizationType);
- return this.getProtocolFactoryByName(protocol);
- }
-
- public IProtocolFactory<?> getProtocolFactoryByServiceType(String serviceType) throws ProtocolException {
- String protocol = this.getProtocolByServiceType(serviceType);
- return this.getProtocolFactoryByName(protocol);
- }
-
- public IProtocolFactory<?> getProtocolFactoryWithEmptyContext() throws ProtocolException {
- Openspcoop2 m = this.getProtocolManifest(Costanti.CONTEXT_EMPTY);
- if(this.factories.containsKey(m.getProtocol().getName())){
- return this.factories.get(m.getProtocol().getName());
- }
- return null;
- }
- public IDService getDefaultServiceForWebContext(String context) throws ProtocolException {
- IProtocolFactory<?> pf = this.getProtocolFactoryByServletContext(context);
- if(pf==null) {
- return null;
- }
- if(pf.getManifest().getWeb().sizeContextList()<=0) {
- return null;
- }
- FunctionType fType = null;
- for (int i = 0; i < pf.getManifest().getWeb().sizeContextList(); i++) {
- if(pf.getManifest().getWeb().getContext(i).getName().equals(context)){
- fType = pf.getManifest().getWeb().getContext(i).getEmptyFunction();
- break;
- }
- }
- if(fType==null) {
- return null;
- }
- switch (fType) {
- case PD:
- return IDService.PORTA_DELEGATA;
- case PA:
- return IDService.PORTA_APPLICATIVA;
- case PDTO_SOAP:
- return IDService.PORTA_DELEGATA_XML_TO_SOAP;
- default:
- return null;
- }
- }
- public IDService getDefaultServiceForEmptyContext() throws ProtocolException {
- IProtocolFactory<?> pf = this.getProtocolFactoryWithEmptyContext();
- if(pf==null) {
- return null;
- }
- if(pf.getManifest().getWeb().getEmptyContext()==null) {
- return null;
- }
- FunctionType fType = pf.getManifest().getWeb().getEmptyContext().getEmptyFunction();
- if(fType==null) {
- return null;
- }
- switch (fType) {
- case PD:
- return IDService.PORTA_DELEGATA;
- case PA:
- return IDService.PORTA_APPLICATIVA;
- case PDTO_SOAP:
- return IDService.PORTA_DELEGATA_XML_TO_SOAP;
- default:
- return null;
- }
- }
-
- public IProtocolFactory<?> getDefaultProtocolFactory() throws ProtocolException {
- try {
- if(this.factories.size()==1){
- return this.factories.get((String)this.factories.keys().nextElement());
- }
- else{
- if(this.protocolDefault==null){
- throw new Exception("Non e' stato definito un protocollo di default e sono stati riscontrati piu' protocolli disponibili (size:"+this.factories.size()+")");
- }
- else{
- if(this.factories.containsKey(this.protocolDefault)){
- return this.factories.get(this.protocolDefault);
- }else{
- throw new Exception("Il protocollo di default ["+this.protocolDefault+"] indicato non corrisponde a nessuno di quelli caricati");
- }
- }
- }
- } catch (Exception e) {
- throw new ProtocolException("Impossibile individuare il protocollo assegnato al contesto: " + e, e);
- }
- }
-
-
- public MapReader<String, List<String>> getOrganizationTypes() {
- return this.tipiSoggettiValidi;
- }
- public String[] getOrganizationTypesAsArray() {
- Enumeration<List<String>> listeTipiSoggettiValidi = this.tipiSoggettiValidi.elements();
- List<String> listaTipiSoggetti = new ArrayList<>();
- while(listeTipiSoggettiValidi.hasMoreElements()){
- listaTipiSoggetti.addAll(listeTipiSoggettiValidi.nextElement());
- }
- return listaTipiSoggetti.toArray(new String[1]);
- }
- public List<String> getOrganizationTypesAsList() {
- Enumeration<List<String>> listeTipiSoggettiValidi = this.tipiSoggettiValidi.elements();
- List<String> listaTipiSoggetti = new ArrayList<>();
- while(listeTipiSoggettiValidi.hasMoreElements()){
- listaTipiSoggetti.addAll(listeTipiSoggettiValidi.nextElement());
- }
- return listaTipiSoggetti;
- }
- public MapReader<String, String> getDefaultOrganizationTypes() {
- return this.tipiSoggettiDefault;
- }
-
-
- public HashMap<String, List<String>> _getServiceTypes() {
- HashMap<String, List<String>> map = new HashMap<>();
-
- MapReader<String, List<String>> rest = this.getServiceTypes(ServiceBinding.REST);
- if(rest!=null && rest.size()>0) {
- Enumeration<String> en = rest.keys();
- while (en.hasMoreElements()) {
- String protocollo = (String) en.nextElement();
- map.put(protocollo, rest.get(protocollo));
- }
- }
-
- MapReader<String, List<String>> soap = this.getServiceTypes(ServiceBinding.SOAP);
- if(soap!=null && soap.size()>0) {
- Enumeration<String> en = soap.keys();
- while (en.hasMoreElements()) {
- String protocollo = (String) en.nextElement();
- if(map.containsKey(protocollo)) {
- List<String> restP = map.get(protocollo);
- List<String> soapP = soap.get(protocollo);
- for (String tipo : soapP) {
- if(restP.contains(tipo)==false) {
- restP.add(tipo);
- }
- }
- }
- else {
- map.put(protocollo, soap.get(protocollo));
- }
- }
- }
-
- return map;
- }
- public MapReader<String, List<String>> getServiceTypes(ServiceBinding serviceBinding) {
- if(ServiceBinding.SOAP.equals(serviceBinding)){
- return this.tipiServiziValidi_soap;
- }
- else{
- return this.tipiServiziValidi_rest;
- }
- }
- public String[] getServiceTypesAsArray(ServiceBinding serviceBinding) {
- Enumeration<List<String>> listeTipiServiziValidi = null;
- if(ServiceBinding.SOAP.equals(serviceBinding)){
- listeTipiServiziValidi = this.tipiServiziValidi_soap.elements();
- }
- else{
- listeTipiServiziValidi = this.tipiServiziValidi_rest.elements();
- }
- List<String> listaTipiServizi = new ArrayList<>();
- while(listeTipiServiziValidi.hasMoreElements()){
- listaTipiServizi.addAll(listeTipiServiziValidi.nextElement());
- }
- return listaTipiServizi.toArray(new String[1]);
- }
- public List<String> getServiceTypesAsList(ServiceBinding serviceBinding) {
- Enumeration<List<String>> listeTipiServiziValidi = null;
- if(ServiceBinding.SOAP.equals(serviceBinding)){
- listeTipiServiziValidi = this.tipiServiziValidi_soap.elements();
- }
- else{
- listeTipiServiziValidi = this.tipiServiziValidi_rest.elements();
- }
- List<String> listaTipiServizi = new ArrayList<>();
- while(listeTipiServiziValidi.hasMoreElements()){
- listaTipiServizi.addAll(listeTipiServiziValidi.nextElement());
- }
- return listaTipiServizi;
- }
- public MapReader<String, String> getDefaultServiceTypes(ServiceBinding serviceBinding) {
- if(ServiceBinding.SOAP.equals(serviceBinding)){
- return this.tipiServiziDefault_soap;
- }
- else{
- return this.tipiServiziDefault_rest;
- }
- }
-
-
- public MapReader<String, List<String>> getVersion() {
- return this.versioniValide;
- }
- public String[] getVersionAsArray() {
- Enumeration<List<String>> listeVersioniValidi = this.versioniValide.elements();
- List<String> listaVersioni = new ArrayList<>();
- while(listeVersioniValidi.hasMoreElements()){
- listaVersioni.addAll(listeVersioniValidi.nextElement());
- }
- return listaVersioni.toArray(new String[1]);
- }
- public List<String> getVersionAsList() {
- Enumeration<List<String>> listeVersioniValide = this.versioniValide.elements();
- List<String> listaVersioni = new ArrayList<>();
- while(listeVersioniValide.hasMoreElements()){
- listaVersioni.addAll(listeVersioniValide.nextElement());
- }
- return listaVersioni;
- }
- public MapReader<String, String> getDefaultVersion() {
- return this.versioniDefault;
- }
-
-
- public MapReader<String, IProtocolFactory<?>> getProtocolFactories() {
- return this.factories;
- }
-
- public Enumeration<String> getProtocolNames(){
- return this.factories.keys();
- }
-
- public List<String> getProtocolNamesAsList(){
- List<String> protocolli = new ArrayList<>();
- Enumeration<String> en = getProtocolNames();
- while (en.hasMoreElements()) {
- String protocollo = (String) en.nextElement();
- protocolli.add(protocollo);
- }
- return protocolli;
- }
-
- public void initStaticInstance() throws ProtocolException {
- if(this.factories!=null && this.factories.size()>0) {
- Enumeration<IProtocolFactory<?>> en = this.factories.elements();
- if(en!=null) {
- while (en.hasMoreElements()) {
- IProtocolFactory<?> iProtocolFactory = (IProtocolFactory<?>) en.nextElement();
- if(iProtocolFactory!=null && iProtocolFactory instanceof BasicFactory<?> ) {
- ((BasicFactory<?>)iProtocolFactory).initStaticInstance();
- }
- }
- }
- }
- }
-
- // ***** Utilities *****
-
- public String getProtocolByOrganizationType(String organizationType) throws ProtocolException {
-
- Enumeration<String> protocolli = this.factories.keys();
- while (protocolli.hasMoreElements()) {
-
- String protocollo = protocolli.nextElement();
- IProtocolFactory<?> protocolFactory = this.factories.get(protocollo);
- List<String> tipiP = protocolFactory.createProtocolConfiguration().getTipiSoggetti();
- if(tipiP.contains(organizationType)){
- return protocollo;
- }
-
- }
-
- throw new ProtocolException("Non esiste un protocollo associato al tipo di soggetto ["+organizationType+"]");
-
- }
-
- public String getProtocolByServiceType(String serviceType) throws ProtocolException {
-
- Enumeration<String> protocolli = this.factories.keys();
- while (protocolli.hasMoreElements()) {
-
- String protocollo = protocolli.nextElement();
- IProtocolFactory<?> protocolFactory = this.factories.get(protocollo);
- List<String> tipiP = protocolFactory.createProtocolConfiguration().getTipiServizi(org.openspcoop2.message.constants.ServiceBinding.SOAP);
- if(tipiP.contains(serviceType)){
- return protocollo;
- }
- tipiP = protocolFactory.createProtocolConfiguration().getTipiServizi(org.openspcoop2.message.constants.ServiceBinding.REST);
- if(tipiP.contains(serviceType)){
- return protocollo;
- }
-
- }
-
- throw new ProtocolException("Non esiste un protocollo associato al tipo di servizio ["+serviceType+"]");
-
- }
- }