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

Commit 4842e1d

Browse files
authored
Merge pull request #243 from bremnes/190-schema-mapping-to-arm-template
Extracting correct schema value for ARM template when the schema is swagger or wsdl.
2 parents a18d561 + c0fb084 commit 4842e1d

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
@@ -391,7 +391,7 @@ private async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string api
391391
// pull returned schema and convert to template resource
392392
RESTReturnedSchemaTemplate restReturnedSchemaTemplate = JsonConvert.DeserializeObject<RESTReturnedSchemaTemplate>(schemaDetails);
393393
SchemaTemplateResource schemaDetailsResource = JsonConvert.DeserializeObject<SchemaTemplateResource>(schemaDetails);
394-
schemaDetailsResource.properties.document.value = JsonConvert.SerializeObject(restReturnedSchemaTemplate.properties.document);
394+
schemaDetailsResource.properties.document.value = GetSchemaValueBasedOnContentType(restReturnedSchemaTemplate.properties);
395395
schemaDetailsResource.name = $"[concat(parameters('ApimServiceName'), '/{apiName}/{schemaName}')]";
396396
schemaDetailsResource.apiVersion = GlobalConstants.APIVersion;
397397
schemaDetailsResource.dependsOn = new string[] { $"[resourceId('Microsoft.ApiManagement/service/apis', parameters('ApimServiceName'), '{apiName}')]" };
@@ -401,5 +401,33 @@ private async Task<List<TemplateResource>> GenerateSchemasARMTemplate(string api
401401
}
402402
return templateResources;
403403
}
404+
405+
private string GetSchemaValueBasedOnContentType(RESTReturnedSchemaTemplateProperties schemaTemplateProperties)
406+
{
407+
if (!(schemaTemplateProperties.document is JToken))
408+
{
409+
return JsonConvert.SerializeObject(schemaTemplateProperties.document);
410+
}
411+
412+
var schemaJson = schemaTemplateProperties.document as JToken;
413+
414+
switch (schemaTemplateProperties.contentType.ToLowerInvariant())
415+
{
416+
case "application/vnd.ms-azure-apim.swagger.definitions+json":
417+
if (schemaJson["definitions"] != null && schemaJson.Count() == 1)
418+
{
419+
schemaJson = schemaJson["definitions"];
420+
}
421+
break;
422+
case "application/vnd.ms-azure-apim.xsd+xml":
423+
if (schemaJson["value"] != null && schemaJson.Count() == 1)
424+
{
425+
return schemaJson["value"].ToString();
426+
}
427+
break;
428+
}
429+
430+
return JsonConvert.SerializeObject(schemaJson);
431+
}
404432
}
405433
}

0 commit comments

Comments
 (0)