Skip to content
This repository was archived by the owner on Feb 23, 2024. It is now read-only.

Commit f869e1a

Browse files
committed
Extracting correct schema value for ARM template when the schema is swagger or wsdl.
1 parent 337d03b commit f869e1a

File tree

1 file changed

+29
-1
lines changed
  • src/APIM_ARMTemplate/apimtemplate/Extractor/EntityExtractors

1 file changed

+29
-1
lines changed

src/APIM_ARMTemplate/apimtemplate/Extractor/EntityExtractors/APIExtractor.cs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -382,7 +382,7 @@ public async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string apim
382382
// pull returned schema and convert to template resource
383383
RESTReturnedSchemaTemplate restReturnedSchemaTemplate = JsonConvert.DeserializeObject<RESTReturnedSchemaTemplate>(schemaDetails);
384384
SchemaTemplateResource schemaDetailsResource = JsonConvert.DeserializeObject<SchemaTemplateResource>(schemaDetails);
385-
schemaDetailsResource.properties.document.value = JsonConvert.SerializeObject(restReturnedSchemaTemplate.properties.document);
385+
schemaDetailsResource.properties.document.value = GetSchemaValueBasedOnContentType(restReturnedSchemaTemplate.properties);
386386
schemaDetailsResource.name = $"[concat(parameters('ApimServiceName'), '/{apiName}/{schemaName}')]";
387387
schemaDetailsResource.apiVersion = GlobalConstants.APIVersion;
388388
schemaDetailsResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{apiName}')]" };
@@ -392,5 +392,33 @@ public async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string apim
392392
}
393393
return templateResources;
394394
}
395+
396+
private string GetSchemaValueBasedOnContentType(RESTReturnedSchemaTemplateProperties schemaTemplateProperties)
397+
{
398+
if (!(schemaTemplateProperties.document is JToken))
399+
{
400+
return JsonConvert.SerializeObject(schemaTemplateProperties.document);
401+
}
402+
403+
var schemaJson = schemaTemplateProperties.document as JToken;
404+
405+
switch (schemaTemplateProperties.contentType.ToLowerInvariant())
406+
{
407+
case "application/vnd.ms-azure-apim.swagger.definitions+json":
408+
if (schemaJson["definitions"] != null && schemaJson.Count() == 1)
409+
{
410+
schemaJson = schemaJson["definitions"];
411+
}
412+
break;
413+
case "application/vnd.ms-azure-apim.xsd+xml":
414+
if (schemaJson["value"] != null && schemaJson.Count() == 1)
415+
{
416+
return schemaJson["value"].ToString();
417+
}
418+
break;
419+
}
420+
421+
return JsonConvert.SerializeObject(schemaJson);
422+
}
395423
}
396424
}

0 commit comments

Comments
 (0)