diff --git a/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/APIUtil.java b/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/APIUtil.java index dba95b8f28bf..c9707732f526 100644 --- a/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/APIUtil.java +++ b/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/APIUtil.java @@ -2918,13 +2918,15 @@ public static void validateAPIContext(String context, String apiName) throws API */ public static void validateAPIEndpointConfig(Object endpointConfigObject, String apiType, String apiName) throws APIManagementException { - Map endpointConfigMap = (Map) endpointConfigObject; - - if (endpointConfigMap.containsKey("endpoint_type") && APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( - endpointConfigMap.get(APIConstants.API_ENDPOINT_CONFIG_PROTOCOL_TYPE)) - && !APIConstants.API_TYPE_HTTP.equalsIgnoreCase(apiType) - && !APIConstants.API_TYPE_SOAPTOREST.equalsIgnoreCase(apiType)) { - throw new APIManagementException("Invalid endpoint configuration provided for the API " + apiName); + if (endpointConfigObject != null) { + Map endpointConfigMap = (Map) endpointConfigObject; + if (endpointConfigMap != null && endpointConfigMap.containsKey("endpoint_type") + && APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( + endpointConfigMap.get(APIConstants.API_ENDPOINT_CONFIG_PROTOCOL_TYPE)) + && !APIConstants.API_TYPE_HTTP.equalsIgnoreCase(apiType) + && !APIConstants.API_TYPE_SOAPTOREST.equalsIgnoreCase(apiType)) { + throw new APIManagementException("Invalid endpoint configuration provided for the API " + apiName); + } } } diff --git a/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/GatewayUtils.java b/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/GatewayUtils.java index 599b2f14e94f..62dc26ca8544 100644 --- a/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/GatewayUtils.java +++ b/components/apimgt/org.wso2.carbon.apimgt.impl/src/main/java/org/wso2/carbon/apimgt/impl/utils/GatewayUtils.java @@ -47,9 +47,11 @@ public static void setCustomSequencesToBeRemoved(API api, GatewayAPIDTO gatewayA } public static void setCustomBackendToBeRemoved(GatewayAPIDTO gatewayAPIDTO) { - String sandBoxBackend = APIUtil.getCustomBackendName(gatewayAPIDTO.getApiId(), "SANDBOX"); + String sandBoxBackend = APIUtil.getCustomBackendName(gatewayAPIDTO.getApiId(), + APIConstants.API_KEY_TYPE_SANDBOX); gatewayAPIDTO.setSequencesToBeRemove(addStringToList(sandBoxBackend, gatewayAPIDTO.getSequencesToBeRemove())); - String productionBackend = APIUtil.getCustomBackendName(gatewayAPIDTO.getApiId(), "PRODUCTION"); + String productionBackend = APIUtil.getCustomBackendName(gatewayAPIDTO.getApiId(), + APIConstants.API_KEY_TYPE_PRODUCTION); gatewayAPIDTO.setSequencesToBeRemove( addStringToList(productionBackend, gatewayAPIDTO.getSequencesToBeRemove())); } diff --git a/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/ExportUtils.java b/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/ExportUtils.java index 116b5e500b2a..27e5dfdc9373 100644 --- a/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/ExportUtils.java +++ b/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/ExportUtils.java @@ -218,13 +218,15 @@ public static File exportApi(APIProvider apiProvider, APIIdentifier apiIdentifie addOperationPoliciesToArchive(archivePath, tenantDomain, exportFormat, apiProvider, api, currentApiUuid); - JsonObject endpointConfig = JsonParser.parseString(api.getEndpointConfig()).getAsJsonObject(); - if (APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( - endpointConfig.get(API_ENDPOINT_CONFIG_PROTOCOL_TYPE).getAsString()) && StringUtils.equals( - apiDtoToReturn.getType().toString().toLowerCase(), APIConstants.API_TYPE_HTTP.toLowerCase()) - || StringUtils.equals(apiDtoToReturn.getType().toString().toLowerCase(), - APIConstants.API_TYPE_SOAPTOREST.toLowerCase())) { - addCustomBackendToArchive(archivePath, apiProvider, currentApiUuid); + if (api != null && !StringUtils.isEmpty(api.getEndpointConfig())) { + JsonObject endpointConfig = JsonParser.parseString(api.getEndpointConfig()).getAsJsonObject(); + if (APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( + endpointConfig.get(API_ENDPOINT_CONFIG_PROTOCOL_TYPE).getAsString()) && StringUtils.equals( + apiDtoToReturn.getType().toString().toLowerCase(), APIConstants.API_TYPE_HTTP.toLowerCase()) + || StringUtils.equals(apiDtoToReturn.getType().toString().toLowerCase(), + APIConstants.API_TYPE_SOAPTOREST.toLowerCase())) { + addCustomBackendToArchive(archivePath, apiProvider, currentApiUuid); + } } addGatewayEnvironmentsToArchive(archivePath, apiDtoToReturn.getId(), exportFormat, apiProvider); diff --git a/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/ImportUtils.java b/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/ImportUtils.java index dd18a4f092a4..9fdc7a1bb150 100644 --- a/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/ImportUtils.java +++ b/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/ImportUtils.java @@ -678,22 +678,24 @@ public static void validateAppliedPolicy(OperationPolicy appliedPolicy, public static void updateAPIWithCustomBackend(API api, String extractedFolderPath, APIProvider apiProvider) throws APIManagementException { String customBackendDir = extractedFolderPath + File.separator + ImportExportConstants.CUSTOM_BACKEND_DIRECTORY; - JsonObject endpointConfig = JsonParser.parseString(api.getEndpointConfig()).getAsJsonObject(); - - if (endpointConfig != null) { - if (endpointConfig.get("sandbox") != null) { - String seqFile = endpointConfig.get("sandbox").getAsString(); - String seqId = UUID.randomUUID().toString(); - InputStream seq = APIUtil.getCustomBackendSequence(customBackendDir, seqFile, ".xml"); - apiProvider.updateCustomBackend(api.getUuid(), APIConstants.API_KEY_TYPE_SANDBOX, seq, seqFile + ".xml", - seqId); - } - if (endpointConfig.get("production") != null) { - String seqFile = endpointConfig.get("production").getAsString(); - String seqId = UUID.randomUUID().toString(); - InputStream seq = APIUtil.getCustomBackendSequence(customBackendDir, seqFile, ".xml"); - apiProvider.updateCustomBackend(api.getUuid(), APIConstants.API_KEY_TYPE_PRODUCTION, seq, - seqFile + ".xml", seqId); + if (api != null && !StringUtils.isEmpty(api.getEndpointConfig())) { + JsonObject endpointConfig = JsonParser.parseString(api.getEndpointConfig()).getAsJsonObject(); + + if (endpointConfig != null) { + if (endpointConfig.get("sandbox") != null) { + String seqFile = endpointConfig.get("sandbox").getAsString(); + String seqId = UUID.randomUUID().toString(); + InputStream seq = APIUtil.getCustomBackendSequence(customBackendDir, seqFile, ".xml"); + apiProvider.updateCustomBackend(api.getUuid(), APIConstants.API_KEY_TYPE_SANDBOX, seq, + seqFile + ".xml", seqId); + } + if (endpointConfig.get("production") != null) { + String seqFile = endpointConfig.get("production").getAsString(); + String seqId = UUID.randomUUID().toString(); + InputStream seq = APIUtil.getCustomBackendSequence(customBackendDir, seqFile, ".xml"); + apiProvider.updateCustomBackend(api.getUuid(), APIConstants.API_KEY_TYPE_PRODUCTION, seq, + seqFile + ".xml", seqId); + } } } } diff --git a/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/PublisherCommonUtils.java b/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/PublisherCommonUtils.java index 48b941e69fd8..ef26b0f7e1bc 100755 --- a/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/PublisherCommonUtils.java +++ b/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1.common/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/common/mappings/PublisherCommonUtils.java @@ -188,10 +188,14 @@ public static API updateApi(API originalAPI, APIDTO apiDtoToUpdate, APIProvider API apiToUpdate = prepareForUpdateApi(originalAPI, apiDtoToUpdate, apiProvider, tokenScopes); apiProvider.updateAPI(apiToUpdate, originalAPI); API apiUpdated = apiProvider.getAPIbyUUID(originalAPI.getUuid(), originalAPI.getOrganization()); - JsonObject endpointConfig = JsonParser.parseString(apiUpdated.getEndpointConfig()).getAsJsonObject(); - if (!APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( - endpointConfig.get(APIConstants.API_ENDPOINT_CONFIG_PROTOCOL_TYPE).getAsString())) { - apiProvider.deleteSequenceBackendByRevision(apiUpdated.getUuid(), "0"); + if (apiUpdated != null && !StringUtils.isEmpty(apiUpdated.getEndpointConfig())) { + JsonObject endpointConfig = JsonParser.parseString(apiUpdated.getEndpointConfig()).getAsJsonObject(); + if (!APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( + endpointConfig.get(APIConstants.API_ENDPOINT_CONFIG_PROTOCOL_TYPE).getAsString()) && ( + APIConstants.API_TYPE_HTTP.equals(apiUpdated.getType()) || APIConstants.API_TYPE_SOAPTOREST.equals( + apiUpdated.getType()))) { + apiProvider.deleteSequenceBackendByRevision(apiUpdated.getUuid(), "0"); + } } return apiUpdated; // TODO use returend api @@ -253,6 +257,8 @@ private static API prepareForUpdateApi(API originalAPI, APIDTO apiDtoToUpdate, A + " as the token information hasn't been correctly set internally", ExceptionCodes.TOKEN_SCOPES_NOT_SET); } + APIUtil.validateAPIEndpointConfig(apiDtoToUpdate.getEndpointConfig(), apiDtoToUpdate.getType().toString(), + apiDtoToUpdate.getName()); if (apiDtoToUpdate.getVisibility() == APIDTO.VisibilityEnum.RESTRICTED && apiDtoToUpdate.getVisibleRoles() .isEmpty()) { throw new APIManagementException("Access control roles cannot be empty when visibility is restricted", diff --git a/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/impl/ApisApiServiceImpl.java b/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/impl/ApisApiServiceImpl.java index 3949020981ec..6e821fc49d6c 100644 --- a/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/impl/ApisApiServiceImpl.java +++ b/components/apimgt/org.wso2.carbon.apimgt.rest.api.publisher.v1/src/main/java/org/wso2/carbon/apimgt/rest/api/publisher/v1/impl/ApisApiServiceImpl.java @@ -3898,7 +3898,7 @@ public Response deployAPIRevision(String apiId, String revisionId, // Cannot deploy an API with custom sequence to the APK gateway Map endpointConfigMap = (Map) apiDto.getEndpointConfig(); - if (APIConstants.WSO2_APK_GATEWAY.equals(apiDto.getGatewayType()) && APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( + if (!APIConstants.WSO2_SYNAPSE_GATEWAY.equals(apiDto.getGatewayType()) && APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( endpointConfigMap.get(APIConstants.API_ENDPOINT_CONFIG_PROTOCOL_TYPE))) { return Response.status(Response.Status.BAD_REQUEST) .entity("Cannot Deploy an API with a Custom Sequence to APK Gateway: " + apiId).build();