ServiceBindingConfigurationReader.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.basic.config;
- import org.openspcoop2.core.id.IDAccordo;
- import org.openspcoop2.core.id.IDServizio;
- import org.openspcoop2.core.registry.AccordoServizioParteComune;
- import org.openspcoop2.core.registry.AccordoServizioParteSpecifica;
- import org.openspcoop2.core.registry.PortType;
- import org.openspcoop2.core.registry.Resource;
- import org.openspcoop2.core.registry.ResourceRepresentation;
- import org.openspcoop2.core.registry.ResourceResponse;
- import org.openspcoop2.core.registry.driver.IDAccordoFactory;
- import org.openspcoop2.message.config.ConfigurationRFC7807;
- import org.openspcoop2.message.config.ConfigurationServiceBindingRest;
- import org.openspcoop2.message.config.ConfigurationServiceBindingSoap;
- import org.openspcoop2.message.config.ContextUrlCollection;
- import org.openspcoop2.message.config.IntegrationErrorCollection;
- import org.openspcoop2.message.config.IntegrationErrorReturnConfiguration;
- import org.openspcoop2.message.config.RestBinding;
- import org.openspcoop2.message.config.ServiceBindingConfiguration;
- import org.openspcoop2.message.config.SoapBinding;
- import org.openspcoop2.message.constants.IntegrationError;
- import org.openspcoop2.message.constants.MessageType;
- import org.openspcoop2.message.constants.ServiceBinding;
- import org.openspcoop2.message.exception.MessageException;
- import org.openspcoop2.protocol.manifest.Context;
- import org.openspcoop2.protocol.manifest.EmptySubContextMapping;
- import org.openspcoop2.protocol.manifest.IntegrationErrorCode;
- import org.openspcoop2.protocol.manifest.Openspcoop2;
- import org.openspcoop2.protocol.manifest.RFC7807;
- import org.openspcoop2.protocol.manifest.RestConfiguration;
- import org.openspcoop2.protocol.manifest.RestMediaTypeCollection;
- import org.openspcoop2.protocol.manifest.RestMediaTypeDefaultMapping;
- import org.openspcoop2.protocol.manifest.RestMediaTypeMapping;
- import org.openspcoop2.protocol.manifest.RestMediaTypeUndefinedMapping;
- import org.openspcoop2.protocol.manifest.SoapConfiguration;
- import org.openspcoop2.protocol.manifest.SoapMediaTypeCollection;
- import org.openspcoop2.protocol.manifest.SoapMediaTypeDefaultMapping;
- import org.openspcoop2.protocol.manifest.SoapMediaTypeMapping;
- import org.openspcoop2.protocol.manifest.SoapMediaTypeUndefinedMapping;
- import org.openspcoop2.protocol.manifest.SubContextMapping;
- import org.openspcoop2.protocol.manifest.constants.Costanti;
- import org.openspcoop2.protocol.manifest.constants.DefaultIntegrationErrorMessageType;
- import org.openspcoop2.protocol.manifest.constants.IntegrationErrorMessageDetailType;
- import org.openspcoop2.protocol.manifest.constants.IntegrationErrorMessageType;
- import org.openspcoop2.protocol.manifest.constants.IntegrationErrorProblemType;
- import org.openspcoop2.protocol.manifest.constants.RestMessageType;
- import org.openspcoop2.protocol.manifest.constants.SoapMessageType;
- import org.openspcoop2.protocol.sdk.ProtocolException;
- import org.openspcoop2.protocol.sdk.registry.IRegistryReader;
- import org.openspcoop2.protocol.sdk.registry.RegistryNotFound;
- import org.openspcoop2.utils.transport.TransportRequestContext;
- /**
- * ServiceBindingConfigurationReader
- *
- * @author Poli Andrea (apoli@link.it)
- * @author $Author$
- * @version $Rev$, $Date$
- */
- public class ServiceBindingConfigurationReader {
- public static ServiceBinding getServiceBinding(IDServizio idServizio, IRegistryReader registryReader) throws ProtocolException, RegistryNotFound{
- try{
-
- AccordoServizioParteSpecifica aps = registryReader.getAccordoServizioParteSpecifica(idServizio);
- IDAccordo idAccordoParteComune = IDAccordoFactory.getInstance().getIDAccordoFromUri(aps.getAccordoServizioParteComune());
- AccordoServizioParteComune apc = registryReader.getAccordoServizioParteComune(idAccordoParteComune);
- switch (apc.getServiceBinding()) {
- case SOAP:
- return ServiceBinding.SOAP;
- case REST:
- return ServiceBinding.REST;
- }
- throw new ProtocolException("Service ["+idServizio+"] not found");
-
- }
- catch(RegistryNotFound notFound) {
- throw notFound;
- }
- catch(Exception e){
- throw new ProtocolException(e.getMessage(),e);
- }
- }
- public static ServiceBindingConfiguration getDefaultServiceBindingConfiguration(Openspcoop2 manifest, TransportRequestContext transportRequest) throws ProtocolException{
- return getServiceBindingConfiguration(manifest, transportRequest, null, null, null);
- }
-
- private static MessageType convertMessageType(org.openspcoop2.core.registry.constants.MessageType mt) {
- if(mt!=null) {
- switch (mt) {
- case SOAP_11:
- return MessageType.SOAP_11;
- case SOAP_12:
- return MessageType.SOAP_12;
- case XML:
- return MessageType.XML;
- case JSON:
- return MessageType.JSON;
- case BINARY:
- return MessageType.BINARY;
- case MIME_MULTIPART:
- return MessageType.MIME_MULTIPART;
- }
- }
- return null;
- }
-
- public static ServiceBindingConfiguration getServiceBindingConfiguration(Openspcoop2 manifest, TransportRequestContext transportRequest,
- ServiceBinding serviceBinding, IDServizio idServizio, IRegistryReader registryReader) throws ProtocolException{
-
- try{
-
- String protocolWebContext = null;
- if(transportRequest!=null && transportRequest.getProtocolWebContext()!=null && !"".equals(transportRequest.getProtocolWebContext())) {
- protocolWebContext = transportRequest.getProtocolWebContext();
- }
- ServiceBinding defaultBinding = getServiceBindingDefault(manifest, protocolWebContext);
- ConfigurationServiceBindingSoap soap = readConfigurationServiceBindingSoap(manifest);
- ConfigurationServiceBindingRest rest = readConfigurationServiceBindingRest(manifest);
- ContextUrlCollection contextUrlCollection = readContextUrlCollection(manifest,soap,rest);
-
- // aggiornamento per contesto
- String context = null;
- if(transportRequest!=null) {
- context = transportRequest.getProtocolWebContext();
- }
- if(context!=null && !Costanti.CONTEXT_EMPTY.equals(context)){
- for (int i = 0; i < manifest.getWeb().sizeContextList(); i++) {
- if(manifest.getWeb().getContext(i).getName().equals(context)){
- if(manifest.getWeb().getContext(i).getSoapMediaTypeCollection()!=null){
- updateMediaTypeCollection(soap, manifest.getWeb().getContext(i).getSoapMediaTypeCollection(), true, true);
- }
- if(manifest.getWeb().getContext(i).getRestMediaTypeCollection()!=null){
- updateMediaTypeCollection(rest, manifest.getWeb().getContext(i).getRestMediaTypeCollection(), true, true);
- }
- }
- }
- }
- else if(manifest.getWeb().getEmptyContext()!=null){
- if(manifest.getWeb().getEmptyContext().getSoapMediaTypeCollection()!=null){
- updateMediaTypeCollection(soap, manifest.getWeb().getEmptyContext().getSoapMediaTypeCollection(), true, true);
- }
- if(manifest.getWeb().getEmptyContext().getRestMediaTypeCollection()!=null){
- updateMediaTypeCollection(rest, manifest.getWeb().getEmptyContext().getRestMediaTypeCollection(), true, true);
- }
- }
-
- if(serviceBinding!=null && idServizio!=null){
-
- // aggiornamento per tipo servizio
- for (int i = 0; i < manifest.getRegistry().getService().getTypes().sizeTypeList(); i++) {
- String serviceType = manifest.getRegistry().getService().getTypes().getType(i).getName();
- if(serviceType.equals(idServizio.getTipo())){
- if( manifest.getRegistry().getService().getTypes().getType(i).getSoapMediaTypeCollection()!=null){
- updateMediaTypeCollection(soap, manifest.getRegistry().getService().getTypes().getType(i).getSoapMediaTypeCollection(), true, true);
- }
- if( manifest.getRegistry().getService().getTypes().getType(i).getRestMediaTypeCollection()!=null){
- updateMediaTypeCollection(rest, manifest.getRegistry().getService().getTypes().getType(i).getRestMediaTypeCollection(), true, true);
- }
- }
- }
-
- // Accordi
- AccordoServizioParteComune aspc = null;
- AccordoServizioParteSpecifica asps = null;
- try {
- asps = registryReader.getAccordoServizioParteSpecifica(idServizio, false);
- }catch(RegistryNotFound notFound) {}
- if(asps!=null) {
- try {
- IDAccordo idAccordo = IDAccordoFactory.getInstance().getIDAccordoFromUri(asps.getAccordoServizioParteComune());
- aspc = registryReader.getAccordoServizioParteComune(idAccordo, false,
- false); // non si legge i dati di request e response per API REST. L'override del MessageType e' stato eliminato per default dalla console
- }catch(RegistryNotFound notFound) {}
- }
-
- // ricerca per servizio dell'accordo parte comune
- // Se presente viene forzato un message type indipendente dal mediaType e valido sia per la richiesta che per la risposta
- if(aspc!=null) {
- MessageType messageTypeService = convertMessageType(aspc.getMessageType());
- if(messageTypeService!=null){
- if(ServiceBinding.SOAP.equals(serviceBinding)){
- updateSoapMediaTypeCollection(soap, messageTypeService, true, true);
- }
- else if(ServiceBinding.REST.equals(serviceBinding)){
- updateRestMediaTypeCollection(rest, messageTypeService, true, true);
- }
- }
- }
-
- if(ServiceBinding.SOAP.equals(serviceBinding) && aspc!=null && asps!=null && asps.getPortType()!=null) {
- // ricerca per port-type dell'accordo parte comune
- // Se presente viene forzato un message type indipendente dal mediaType e valido sia per la richiesta che per la risposta
- for (PortType pt : aspc.getPortTypeList()) {
- if(pt.getNome().equals(asps.getPortType())) {
- MessageType messageTypeService = convertMessageType(pt.getMessageType());
- if(messageTypeService!=null){
- if(ServiceBinding.SOAP.equals(serviceBinding)){
- updateSoapMediaTypeCollection(soap, messageTypeService, true, true);
- }
- }
- break;
- }
- }
- }
-
- // ricerca per servizio dell'accordo parte specifica
- // Se presente viene forzato un message type indipendente dal mediaType e valido sia per la richiesta che per la risposta
- if(asps!=null) {
- MessageType messageTypeParteSpecifica = convertMessageType(asps.getMessageType());
- if(messageTypeParteSpecifica!=null){
- if(ServiceBinding.SOAP.equals(serviceBinding)){
- updateSoapMediaTypeCollection(soap, messageTypeParteSpecifica, true, true);
- }
- else if(ServiceBinding.REST.equals(serviceBinding)){
- updateRestMediaTypeCollection(rest, messageTypeParteSpecifica, true, true);
- }
- }
- }
-
- if(idServizio.getAzione()!=null && aspc!=null && ServiceBinding.REST.equals(serviceBinding)) {
-
- if(aspc.sizeResourceList()>0) {
- for (Resource resource : aspc.getResourceList()) {
- if(resource.getNome().equals(idServizio.getAzione())) {
-
- // Se presente viene forzato un message type indipendente dal mediaType e valido sia per la richiesta che per la risposta
- MessageType messageTypeRisorsa = convertMessageType(resource.getMessageType());
- if(messageTypeRisorsa!=null){
- updateRestMediaTypeCollection(rest, messageTypeRisorsa, true, true);
- }
-
- // Se presente viene forzato un message type indipendente dal mediaType ma valido solo per la richiesta
- MessageType messageTypeAzioneRichiesta = convertMessageType(resource.getRequestMessageType());
- if(messageTypeAzioneRichiesta!=null){
- updateRestMediaTypeCollection(rest, messageTypeAzioneRichiesta, true, false);
- }
-
- // Se presente viene forzato un message type indipendente dal mediaType ma valido solo per la risposta
- MessageType messageTypeAzioneRisposta = convertMessageType(resource.getResponseMessageType());
- if(messageTypeAzioneRisposta!=null){
- updateRestMediaTypeCollection(rest, messageTypeAzioneRisposta, false, true);
- }
-
- // ultimo step di replace singolo mediaType sulla richiesta o sulla risposta (solo per REST)
- if(resource.getRequest()!=null && resource.getRequest().sizeRepresentationList()>0) {
- for (ResourceRepresentation rr : resource.getRequest().getRepresentationList()) {
- MessageType messageTypeMediaType = convertMessageType(rr.getMessageType());
- if(messageTypeMediaType!=null) {
- rest.getRequest().addOrReplaceMediaType(rr.getMediaType(), messageTypeMediaType, false);
- }
- }
- }
- if(resource.sizeResponseList()>0) {
- for (ResourceResponse response : resource.getResponseList()) {
- if(response.sizeRepresentationList()>0) {
- for (ResourceRepresentation rr : response.getRepresentationList()) {
- MessageType messageTypeMediaType = convertMessageType(rr.getMessageType());
- if(messageTypeMediaType!=null) {
- rest.getResponse().addOrReplaceMediaType(rr.getMediaType(), response.getStatus(), messageTypeMediaType, false);
- }
- }
- }
- }
- }
- break;
- }
- }
- }
- }
- }
-
- ServiceBindingConfiguration config = new ServiceBindingConfiguration(defaultBinding, soap, rest, contextUrlCollection);
- addServiceBindingRestriction(manifest, config);
- return config;
-
- }catch(Exception e){
- throw new ProtocolException(e.getMessage(),e);
- }
- }
-
- private static ServiceBinding getServiceBindingDefault(Openspcoop2 manifest, String protocolWebContext){
-
- ServiceBinding defaultBinding = null;
-
- // Default
- org.openspcoop2.protocol.manifest.constants.ServiceBinding defaultBindingManifest = manifest.getBinding().getDefault();
- if(defaultBindingManifest!=null){
- switch (defaultBindingManifest) {
- case SOAP:
- defaultBinding = ServiceBinding.SOAP;
- break;
- case REST:
- defaultBinding = ServiceBinding.REST;
- break;
- }
- }
- else{
- if(manifest.getBinding().getSoap()!=null){
- defaultBinding = ServiceBinding.SOAP;
- }
- else{
- defaultBinding = ServiceBinding.REST;
- }
- }
-
- if(protocolWebContext!=null) {
- if(manifest.getWeb()!=null && manifest.getWeb().sizeContextList()>0) {
- for (Context webContext : manifest.getWeb().getContextList()) {
- if(webContext.getName()!=null && webContext.getName().equals(protocolWebContext)) {
- if(webContext.getBinding()!=null) {
- switch (webContext.getBinding()) {
- case SOAP:
- defaultBinding = ServiceBinding.SOAP;
- break;
- case REST:
- defaultBinding = ServiceBinding.REST;
- break;
- }
- }
- break;
- }
- }
- }
- }
-
- return defaultBinding;
- }
-
- private static ConfigurationServiceBindingSoap readConfigurationServiceBindingSoap(Openspcoop2 manifest) throws MessageException{
-
- SoapConfiguration soapConfig = manifest.getBinding().getSoap();
- boolean enabled = soapConfig!=null;
- SoapBinding binding = null;
- IntegrationErrorCollection internalIntegrationErrorConfiguration = null;
- IntegrationErrorCollection externalIntegrationErrorConfiguration = null;
-
- if(enabled){
-
- binding = new SoapBinding(soapConfig.isSoap11(), soapConfig.isSoap11WithAttachments(), soapConfig.isSoap11Mtom(),
- soapConfig.isSoap12(), soapConfig.isSoap12WithAttachments(), soapConfig.isSoap12Mtom());
-
- internalIntegrationErrorConfiguration = readIntegrationErrorConfiguration(soapConfig.getIntegrationError().getInternal());
- externalIntegrationErrorConfiguration = readIntegrationErrorConfiguration(soapConfig.getIntegrationError().getExternal());
-
- }
-
- ConfigurationServiceBindingSoap soap = new ConfigurationServiceBindingSoap(enabled, binding, internalIntegrationErrorConfiguration, externalIntegrationErrorConfiguration);
- soap.init();
-
- if(enabled){
-
- if(soapConfig.getMediaTypeCollection()!=null){
- updateMediaTypeCollection(soap, soapConfig.getMediaTypeCollection(), true, true);
- }
-
- }
-
- return soap;
-
- }
-
- private static void updateMediaTypeCollection(ConfigurationServiceBindingSoap soap, SoapMediaTypeCollection mediaTypesCollection,
- boolean request, boolean response) throws MessageException{
-
- if(mediaTypesCollection.sizeMediaTypeList()<=0 && mediaTypesCollection.getDefault()==null && mediaTypesCollection.getUndefined()==null){
- return;
- }
- if(request){
- soap.getRequest().clear();
- }
- if(response){
- soap.getResponse().clear();
- }
-
- for (int i = 0; i < mediaTypesCollection.sizeMediaTypeList(); i++) {
- SoapMediaTypeMapping mapping = mediaTypesCollection.getMediaType(i);
- if(request){
- soap.getRequest().addMediaType(mapping.getBase(), convertToMessageType(mapping.getMessageType()), mapping.isRegExpr());
- }
- if(response){
- soap.getResponse().addMediaType(mapping.getBase(), convertToMessageType(mapping.getMessageType()), mapping.isRegExpr());
- }
- }
-
- if(mediaTypesCollection.getDefault()!=null){
- if(request){
- soap.getRequest().addDefaultMediaType(convertToMessageType(mediaTypesCollection.getDefault().getMessageType()));
- }
- if(response){
- soap.getResponse().addDefaultMediaType(convertToMessageType(mediaTypesCollection.getDefault().getMessageType()));
- }
- }
-
- if(mediaTypesCollection.getUndefined()!=null){
- if(request){
- soap.getRequest().addUndefinedMediaType(convertToMessageType(mediaTypesCollection.getUndefined().getMessageType()));
- }
- if(response){
- soap.getResponse().addUndefinedMediaType(convertToMessageType(mediaTypesCollection.getUndefined().getMessageType()));
- }
- }
- }
-
- private static void updateSoapMediaTypeCollection(ConfigurationServiceBindingSoap soap, MessageType messageType, boolean request, boolean response) throws MessageException{
- SoapMediaTypeCollection mediaTypeCollection = new SoapMediaTypeCollection();
-
- SoapMediaTypeDefaultMapping defaultMapping = new SoapMediaTypeDefaultMapping();
- defaultMapping.setMessageType(convertToSoapMessageType(messageType));
- mediaTypeCollection.setDefault(defaultMapping);
-
- SoapMediaTypeUndefinedMapping undefinedMapping = new SoapMediaTypeUndefinedMapping();
- undefinedMapping.setMessageType(convertToSoapMessageType(messageType));
- mediaTypeCollection.setUndefined(undefinedMapping);
-
- updateMediaTypeCollection(soap, mediaTypeCollection, request, response);
- }
-
- private static MessageType convertToMessageType(SoapMessageType messageType){
- switch (messageType) {
- case SOAP_11:
- return MessageType.SOAP_11;
- case SOAP_12:
- return MessageType.SOAP_12;
- }
- return null;
- }
-
- @SuppressWarnings("incomplete-switch")
- private static SoapMessageType convertToSoapMessageType(MessageType messageType){
- switch (messageType) {
- case SOAP_11:
- return SoapMessageType.SOAP_11;
- case SOAP_12:
- return SoapMessageType.SOAP_12;
- }
- return null;
- }
-
- private static ConfigurationServiceBindingRest readConfigurationServiceBindingRest(Openspcoop2 manifest) throws MessageException{
-
- RestConfiguration restConfig = manifest.getBinding().getRest();
- boolean enabled = restConfig!=null;
- RestBinding binding = null;
- IntegrationErrorCollection internalIntegrationErrorConfiguration = null;
- IntegrationErrorCollection externalIntegrationErrorConfiguration = null;
-
- if(enabled){
-
- binding = new RestBinding(restConfig.isXml(), restConfig.isJson(), restConfig.isBinary(), restConfig.isMimeMultipart());
-
- internalIntegrationErrorConfiguration = readIntegrationErrorConfiguration(restConfig.getIntegrationError().getInternal());
- externalIntegrationErrorConfiguration = readIntegrationErrorConfiguration(restConfig.getIntegrationError().getExternal());
- }
-
- ConfigurationServiceBindingRest rest = new ConfigurationServiceBindingRest(enabled, binding, internalIntegrationErrorConfiguration, externalIntegrationErrorConfiguration);
- rest.init();
-
- if(enabled){
-
- if(restConfig.getMediaTypeCollection()!=null){
- updateMediaTypeCollection(rest, restConfig.getMediaTypeCollection(), true, true);
- }
-
- }
-
- return rest;
-
- }
-
- private static void updateMediaTypeCollection(ConfigurationServiceBindingRest rest, RestMediaTypeCollection mediaTypesCollection, boolean request, boolean response) throws MessageException{
-
- if(mediaTypesCollection.sizeMediaTypeList()<=0 && mediaTypesCollection.getDefault()==null && mediaTypesCollection.getUndefined()==null){
- return;
- }
- if(request){
- rest.getRequest().clear();
- }
- if(response){
- rest.getResponse().clear();
- }
-
- for (int i = 0; i < mediaTypesCollection.sizeMediaTypeList(); i++) {
- RestMediaTypeMapping mapping = mediaTypesCollection.getMediaType(i);
- if(request){
- rest.getRequest().addMediaType(mapping.getBase(), convertToMessageType(mapping.getMessageType()), mapping.isRegExpr());
- }
- if(response){
- rest.getResponse().addMediaType(mapping.getBase(), convertToMessageType(mapping.getMessageType()), mapping.isRegExpr());
- }
- }
-
- if(mediaTypesCollection.getDefault()!=null){
- if(request){
- rest.getRequest().addDefaultMediaType(convertToMessageType(mediaTypesCollection.getDefault().getMessageType()));
- }
- if(response){
- rest.getResponse().addDefaultMediaType(convertToMessageType(mediaTypesCollection.getDefault().getMessageType()));
- }
- }
-
- if(mediaTypesCollection.getUndefined()!=null){
- if(request){
- rest.getRequest().addUndefinedMediaType(convertToMessageType(mediaTypesCollection.getUndefined().getMessageType()));
- }
- if(response){
- rest.getResponse().addUndefinedMediaType(convertToMessageType(mediaTypesCollection.getUndefined().getMessageType()));
- }
- }
- }
-
- private static void updateRestMediaTypeCollection(ConfigurationServiceBindingRest rest, MessageType messageType, boolean request, boolean response) throws MessageException{
- RestMediaTypeCollection mediaTypeCollection = new RestMediaTypeCollection();
-
- RestMediaTypeDefaultMapping defaultMapping = new RestMediaTypeDefaultMapping();
- defaultMapping.setMessageType(convertToRestMessageType(messageType));
- mediaTypeCollection.setDefault(defaultMapping);
-
- RestMediaTypeUndefinedMapping undefinedMapping = new RestMediaTypeUndefinedMapping();
- undefinedMapping.setMessageType(convertToRestMessageType(messageType));
- mediaTypeCollection.setUndefined(undefinedMapping);
-
- updateMediaTypeCollection(rest, mediaTypeCollection, request, response);
- }
-
- private static MessageType convertToMessageType(RestMessageType messageType){
- switch (messageType) {
- case XML:
- return MessageType.XML;
- case JSON:
- return MessageType.JSON;
- case BINARY:
- return MessageType.BINARY;
- case MIME_MULTIPART:
- return MessageType.MIME_MULTIPART;
- }
- return null;
- }
-
- @SuppressWarnings("incomplete-switch")
- private static RestMessageType convertToRestMessageType(MessageType messageType){
- switch (messageType) {
- case XML:
- return RestMessageType.XML;
- case JSON:
- return RestMessageType.JSON;
- case BINARY:
- return RestMessageType.BINARY;
- case MIME_MULTIPART:
- return RestMessageType.MIME_MULTIPART;
- }
- return null;
- }
-
- private static IntegrationErrorReturnConfiguration to(IntegrationErrorCode errorCode, boolean retry, IntegrationErrorMessageDetailType errorMessage) {
- IntegrationErrorReturnConfiguration conf = new IntegrationErrorReturnConfiguration();
- conf.setHttpReturnCode(errorCode.getHttp());
- conf.setGovwayReturnCode(errorCode.getGovway());
- conf.setRetry(retry);
- conf.setGenericDetails(IntegrationErrorMessageDetailType.GENERIC.equals(errorMessage));
- return conf;
- }
-
- private static IntegrationErrorCollection readIntegrationErrorConfiguration(org.openspcoop2.protocol.manifest.IntegrationErrorCollection config) throws MessageException{
- IntegrationErrorCollection integrationErrorConfiguration = new IntegrationErrorCollection();
-
- ConfigurationRFC7807 rfc7807 = null;
- if(IntegrationErrorProblemType.RFC_7807.equals(config.getProblemType())) {
- RFC7807 rfc7807_protocolManifest = config.getRfc7807();
- rfc7807 = new ConfigurationRFC7807();
- rfc7807.setType(rfc7807_protocolManifest.isType());
- rfc7807.setTypeFormat(rfc7807_protocolManifest.getTypeFormat());
- rfc7807.setUseAcceptHeader(rfc7807_protocolManifest.getUseAcceptHeader());
- rfc7807.setInstance(rfc7807_protocolManifest.getInstance());
- rfc7807.setGovwayType(rfc7807_protocolManifest.getGovwayType());
- rfc7807.setGovwayStatus(rfc7807_protocolManifest.getGovwayStatus());
- rfc7807.setGovwayTransactionId(rfc7807_protocolManifest.getGovwayTransactionId());
- rfc7807.setDetails(rfc7807_protocolManifest.getDetails());
- }
-
- if(config.getDefault()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.DEFAULT,
- convertToMessageType(config.getDefault().getMessageType()),
- to(config.getDefault().getErrorCode(), config.getDefault().getRetry(), config.getDefault().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getAuthentication()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.AUTHENTICATION,
- convertToMessageType(config.getAuthentication().getMessageType()),
- to(config.getAuthentication().getErrorCode(), config.getAuthentication().getRetry(), config.getAuthentication().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getAuthorization()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.AUTHORIZATION,
- convertToMessageType(config.getAuthorization().getMessageType()),
- to(config.getAuthorization().getErrorCode(), config.getAuthorization().getRetry(), config.getAuthorization().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getNotFound()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.NOT_FOUND,
- convertToMessageType(config.getNotFound().getMessageType()),
- to(config.getNotFound().getErrorCode(), config.getNotFound().getRetry(), config.getNotFound().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getBadRequest()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.BAD_REQUEST,
- convertToMessageType(config.getBadRequest().getMessageType()),
- to(config.getBadRequest().getErrorCode(), config.getBadRequest().getRetry(), config.getBadRequest().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getConflict()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.CONFLICT,
- convertToMessageType(config.getConflict().getMessageType()),
- to(config.getConflict().getErrorCode(), config.getConflict().getRetry(), config.getConflict().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getRequestTooLarge()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.REQUEST_TOO_LARGE,
- convertToMessageType(config.getRequestTooLarge().getMessageType()),
- to(config.getRequestTooLarge().getErrorCode(), config.getRequestTooLarge().getRetry(), config.getRequestTooLarge().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getLimitExceeded()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.LIMIT_EXCEEDED,
- convertToMessageType(config.getLimitExceeded().getMessageType()),
- to(config.getLimitExceeded().getErrorCode(), config.getLimitExceeded().getRetry(), config.getLimitExceeded().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getTooManyRequests()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.TOO_MANY_REQUESTS,
- convertToMessageType(config.getTooManyRequests().getMessageType()),
- to(config.getTooManyRequests().getErrorCode(), config.getTooManyRequests().getRetry(), config.getTooManyRequests().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getServiceUnavailable()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.SERVICE_UNAVAILABLE,
- convertToMessageType(config.getServiceUnavailable().getMessageType()),
- to(config.getServiceUnavailable().getErrorCode(), config.getServiceUnavailable().getRetry(), config.getServiceUnavailable().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getEndpointRequestTimedOut()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.ENDPOINT_REQUEST_TIMED_OUT,
- convertToMessageType(config.getEndpointRequestTimedOut().getMessageType()),
- to(config.getEndpointRequestTimedOut().getErrorCode(), config.getEndpointRequestTimedOut().getRetry(), config.getEndpointRequestTimedOut().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getBadResponse()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.BAD_RESPONSE,
- convertToMessageType(config.getBadResponse().getMessageType()),
- to(config.getBadResponse().getErrorCode(), config.getBadResponse().getRetry(), config.getBadResponse().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getInternalRequestError()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.INTERNAL_REQUEST_ERROR,
- convertToMessageType(config.getInternalRequestError().getMessageType()),
- to(config.getInternalRequestError().getErrorCode(), config.getInternalRequestError().getRetry(), config.getInternalRequestError().getErrorMessage()),
- config.isUseInternalFault());
- }
- if(config.getInternalResponseError()!=null){
- integrationErrorConfiguration.addIntegrationError(rfc7807, IntegrationError.INTERNAL_RESPONSE_ERROR,
- convertToMessageType(config.getInternalResponseError().getMessageType()),
- to(config.getInternalResponseError().getErrorCode(), config.getInternalResponseError().getRetry(), config.getInternalResponseError().getErrorMessage()),
- config.isUseInternalFault());
- }
- return integrationErrorConfiguration;
- }
-
- private static org.openspcoop2.message.constants.IntegrationErrorMessageType convertToMessageType(DefaultIntegrationErrorMessageType messageType){
- switch (messageType) {
- case SOAP_11:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.SOAP_11;
- case SOAP_12:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.SOAP_12;
- case XML:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.XML;
- case JSON:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.JSON;
- case NONE:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.NONE;
- }
- return null;
- }
-
- private static org.openspcoop2.message.constants.IntegrationErrorMessageType convertToMessageType(IntegrationErrorMessageType messageType){
- switch (messageType) {
- case SOAP_AS_REQUEST:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.SOAP_AS_REQUEST;
- case SOAP_11:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.SOAP_11;
- case SOAP_12:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.SOAP_12;
- case XML:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.XML;
- case JSON:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.JSON;
- case NONE:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.NONE;
- case SAME_AS_REQUEST:
- return org.openspcoop2.message.constants.IntegrationErrorMessageType.SAME_AS_REQUEST;
- }
- return null;
- }
-
- private static void addServiceBindingRestriction(Openspcoop2 manifest,ServiceBindingConfiguration config){
-
- for (int i = 0; i < manifest.getWeb().sizeContextList(); i++) {
- String context = manifest.getWeb().getContext(i).getName();
- org.openspcoop2.protocol.manifest.constants.ServiceBinding serviceBinding = manifest.getWeb().getContext(i).getBinding();
- if(serviceBinding!=null){
- config.addServiceBindingContextRestriction(convertToServiceBinding(serviceBinding), context);
- }
- }
-
- if(manifest.getWeb().getEmptyContext()!=null){
- org.openspcoop2.protocol.manifest.constants.ServiceBinding serviceBinding = manifest.getWeb().getEmptyContext().getBinding();
- if(serviceBinding!=null){
- config.addServiceBindingEmptyContextRestriction(convertToServiceBinding(serviceBinding));
- }
- }
-
- for (int i = 0; i < manifest.getRegistry().getService().getTypes().sizeTypeList(); i++) {
- String serviceType = manifest.getRegistry().getService().getTypes().getType(i).getName();
- org.openspcoop2.protocol.manifest.constants.ServiceBinding serviceBinding = manifest.getRegistry().getService().getTypes().getType(i).getBinding();
- if(serviceBinding!=null){
- config.addServiceBindingServiceTypeRestriction(convertToServiceBinding(serviceBinding), serviceType);
- }
- }
-
- }
-
- private static ServiceBinding convertToServiceBinding(org.openspcoop2.protocol.manifest.constants.ServiceBinding serviceBinding){
- switch (serviceBinding) {
- case SOAP:
- return ServiceBinding.SOAP;
- case REST:
- return ServiceBinding.REST;
- }
- return null;
- }
-
- private static ContextUrlCollection readContextUrlCollection(Openspcoop2 manifest, ConfigurationServiceBindingSoap soap, ConfigurationServiceBindingRest rest) throws MessageException{
-
- ContextUrlCollection urlCollection = new ContextUrlCollection(soap.getBinding(), rest.getBinding());
-
- for (int i = 0; i < manifest.getWeb().sizeContextList(); i++) {
- String context = manifest.getWeb().getContext(i).getName();
- if(manifest.getWeb().getContext(i).sizeSubContextList()>0){
- for (int j = 0; j < manifest.getWeb().getContext(i).sizeSubContextList(); j++) {
- SubContextMapping subContext = manifest.getWeb().getContext(i).getSubContext(j);
- urlCollection.addContext(context,subContext.getFunctionRawEnumValue(),subContext.getBase(),convertToMessageType(subContext.getMessageType()));
- }
- }
- if(manifest.getWeb().getContext(i).getEmptySubContext()!=null){
- EmptySubContextMapping subContext = manifest.getWeb().getContext(i).getEmptySubContext();
- urlCollection.addContext(context,subContext.getFunctionRawEnumValue(),null, convertToMessageType(subContext.getMessageType()));
- }
- }
-
- if(manifest.getWeb().getEmptyContext()!=null){
- if(manifest.getWeb().getEmptyContext().sizeSubContextList()>0){
- for (int j = 0; j < manifest.getWeb().getEmptyContext().sizeSubContextList(); j++) {
- SubContextMapping subContext = manifest.getWeb().getEmptyContext().getSubContext(j);
- urlCollection.addContext(null,subContext.getFunctionRawEnumValue(),subContext.getBase(), convertToMessageType(subContext.getMessageType()));
- }
- }
- if(manifest.getWeb().getEmptyContext().getEmptySubContext()!=null){
- EmptySubContextMapping subContext = manifest.getWeb().getEmptyContext().getEmptySubContext();
- urlCollection.addContext(null,subContext.getFunctionRawEnumValue(),null, convertToMessageType(subContext.getMessageType()));
- }
- }
-
- return urlCollection;
-
- }
-
- private static MessageType convertToMessageType(org.openspcoop2.protocol.manifest.constants.MessageType messageType){
- switch (messageType) {
- case SOAP_11:
- return MessageType.SOAP_11;
- case SOAP_12:
- return MessageType.SOAP_12;
- case XML:
- return MessageType.XML;
- case JSON:
- return MessageType.JSON;
- case BINARY:
- return MessageType.BINARY;
- case MIME_MULTIPART:
- return MessageType.MIME_MULTIPART;
- }
- return null;
- }
- }