From 7aa1b5b8f5b0934e06bd8221f8577a494e172f72 Mon Sep 17 00:00:00 2001 From: Ashan Rathnaweera Date: Wed, 26 Feb 2025 17:59:10 +0530 Subject: [PATCH 1/2] Add support for mock implementation endpoints in API Products --- .../v1/common/SynapseArtifactGenerator.java | 2 +- .../v1/common/TemplateBuilderUtil.java | 24 ++++++++++++++++--- .../template/ResourceConfigContext.java | 3 ++- 3 files changed, 24 insertions(+), 5 deletions(-) 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/SynapseArtifactGenerator.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/SynapseArtifactGenerator.java index b28db7ed50ed..d4c6c84019fe 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/SynapseArtifactGenerator.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/SynapseArtifactGenerator.java @@ -99,7 +99,7 @@ public RuntimeArtifactDto generateGatewayArtifact(List ap String openApiDefinition = ImportUtils.loadSwaggerFile(extractedFolderPath); apiProduct.setDefinition(openApiDefinition); gatewayAPIDTO = TemplateBuilderUtil.retrieveGatewayAPIDto(apiProduct, environment, - tenantDomain, extractedFolderPath); + tenantDomain, extractedFolderPath, openApiDefinition); } else { APIDTO apidto = ImportUtils.retrievedAPIDto(extractedFolderPath); API api = APIMappingUtil.fromDTOtoAPI(apidto, apidto.getProvider()); 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/TemplateBuilderUtil.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/TemplateBuilderUtil.java index b6947386d6cf..61f5a4a135c7 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/TemplateBuilderUtil.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/TemplateBuilderUtil.java @@ -713,7 +713,7 @@ public static GatewayAPIDTO retrieveGatewayAPIDtoForStreamingAPI(API api, Enviro } public static GatewayAPIDTO retrieveGatewayAPIDto(APIProduct apiProduct, Environment environment, - String tenantDomain, String extractedFolderPath) + String tenantDomain, String extractedFolderPath, String apiDefinition) throws APIManagementException, XMLStreamException, APITemplateException { List clientCertificatesDTOListProduction = @@ -722,12 +722,29 @@ public static GatewayAPIDTO retrieveGatewayAPIDto(APIProduct apiProduct, Environ ImportUtils.retrieveClientCertificates(extractedFolderPath, APIConstants.API_KEY_TYPE_SANDBOX); Map apidtoMap = retrieveAssociatedApis(extractedFolderPath); Map associatedAPIsMap = convertAPIIdToDto(apidtoMap.values()); + APIDefinition parser = OASParserUtil.getOASParser(apiDefinition); + Set uriTemplates = Collections.emptySet(); + if (parser != null) { + uriTemplates = parser.getURITemplates(apiDefinition); + } for (APIProductResource productResource : apiProduct.getProductResources()) { String apiId = productResource.getApiId(); APIDTO apidto = associatedAPIsMap.get(apiId); if (apidto != null) { API api = APIMappingUtil.fromDTOtoAPI(apidto, apidto.getProvider()); productResource.setApiIdentifier(api.getId()); + if (APIConstants.IMPLEMENTATION_TYPE_INLINE.equalsIgnoreCase(api.getImplementation())) { + for (URITemplate uriTemplate : uriTemplates) { + URITemplate template = productResource.getUriTemplate(); + if (template.getHTTPVerb() + .equalsIgnoreCase(uriTemplate.getHTTPVerb()) && template.getUriTemplate() + .equals(uriTemplate.getUriTemplate())) { + template.setMediationScript(uriTemplate.getMediationScript()); + template.setMediationScripts(uriTemplate.getHTTPVerb(), uriTemplate.getMediationScript()); + break; + } + } + } if (api.isAdvertiseOnly()) { productResource.setEndpointConfig(APIUtil.generateEndpointConfigForAdvertiseOnlyApi(api)); } else { @@ -801,8 +818,9 @@ private static GatewayAPIDTO createAPIGatewayDTOtoPublishAPI(Environment environ // check the endpoint type if (!StringUtils.isEmpty(api.getEndpointConfig())) { JsonObject endpointConfObj = JsonParser.parseString(api.getEndpointConfig()).getAsJsonObject(); - if (!APIConstants.ENDPOINT_TYPE_SEQUENCE.equals( - endpointConfObj.get(API_ENDPOINT_CONFIG_PROTOCOL_TYPE).getAsString())) { + if (!APIConstants.ENDPOINT_TYPE_SEQUENCE.equals(endpointConfObj.get(API_ENDPOINT_CONFIG_PROTOCOL_TYPE) + .getAsString()) && !APIConstants.IMPLEMENTATION_TYPE_INLINE.equalsIgnoreCase( + api.getImplementation())) { addEndpoints(api, apiTemplateBuilder, productAPIDto, null); } } else { 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/template/ResourceConfigContext.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/template/ResourceConfigContext.java index 389b22aafd14..b2f1f97c34ba 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/template/ResourceConfigContext.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/template/ResourceConfigContext.java @@ -83,7 +83,8 @@ public VelocityContext getContext() { String resourceKey = resource.getApiIdentifier() + ":" + resource.getUriTemplate().getUriTemplate(); if (resourceKey.equals(productResourceKey)) { - resource.getUriTemplate().setHttpVerbs(uriTemplate.getHTTPVerb()); + resource.getUriTemplate() + .setMediationScripts(uriTemplate.getHTTPVerb(), uriTemplate.getMediationScript()); } } } else { From 7f75b644def69b37f07ccec2cea25f457678a680 Mon Sep 17 00:00:00 2001 From: Ashan Rathnaweera Date: Tue, 4 Mar 2025 18:26:26 +0530 Subject: [PATCH 2/2] Fix not setting http verbs in api products --- .../api/publisher/v1/common/template/ResourceConfigContext.java | 1 + 1 file changed, 1 insertion(+) 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/template/ResourceConfigContext.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/template/ResourceConfigContext.java index b2f1f97c34ba..2006e44d2c0b 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/template/ResourceConfigContext.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/template/ResourceConfigContext.java @@ -83,6 +83,7 @@ public VelocityContext getContext() { String resourceKey = resource.getApiIdentifier() + ":" + resource.getUriTemplate().getUriTemplate(); if (resourceKey.equals(productResourceKey)) { + resource.getUriTemplate().setHttpVerbs(uriTemplate.getHTTPVerb()); resource.getUriTemplate() .setMediationScripts(uriTemplate.getHTTPVerb(), uriTemplate.getMediationScript()); }