Azure / Azure/azure-libraries-for-java
Appservice response for the `availableStacks` API does not match the swagger model
- Vorherrschende Sprache
- Java
- Sterne
- 97
- Forks
- 102
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Beschreibung
The [swagger spec](https://github.com/Azure/azure-rest-api-specs/blob/master/specification/web/resource-manager/Microsoft.Web/stable/2018-02-01/Provider.json#L146) for the `get` operation for [`availableStacks`](https://github.com/Azure/azure-rest-api-specs/blob/master/specification/web/resource-manager/Microsoft.Web/stable/2018-02-01/Provider.json#L19) API does not match the data on the wire.
Here is what I see returned by the service :
```
[main] INFO com.microsoft.azure.management.appservice.Providers getAvailableStacks - --> GET https://management.azure.com/providers/Microsoft.Web/availableStacks?osTypeSelected=Windows&api-version=2018-02-01
[main] INFO com.microsoft.azure.management.appservice.Providers getAvailableStacks - 1650-byte body:
{
"value": [{
"id": null,
"name": "aspnet",
"type": "Microsoft.Web/availableStacks?osTypeSelected=Windows",
"properties": {
"name": "aspnet",
"display": "Net Framework Version",
"dependency": null,
"majorVersions": [{
"displayVersion": "v4.7",
"runtimeVersion": "v4.0",
"isDefault": true,
"minorVersions": [],
"applicationInsights": false
}, {
"displayVersion": "v3.5",
"runtimeVersion": "v2.0",
"isDefault": false,
"minorVersions": [],
"applicationInsights": false
}],
"frameworks": []
}
},
…
...
],
"nextLink": null,
"id": null
}
```
The swagger declaration is causing the classes in the java SDK to be created like [this](https://github.com/Azure/azure-libraries-for-java/blob/master/azure-mgmt-appservice/src/main/java/com/microsoft/azure/management/appservice/implementation/ApplicationStackInner.java) :
```java
public class ApplicationStackInner {
/**
* Application stack name.
*/
@JsonProperty(value = "name")
private String name;
/**
* Application stack display name.
*/
@JsonProperty(value = "display")
private String display;
/**
* Application stack dependency.
*/
@JsonProperty(value = "dependency")
private String dependency;
/**
* List of major versions available.
*/
@JsonProperty(value = "majorVersions")
private List majorVersions;
….
```
Which breaks when we try tp parse the data that is returned by the server.
In order to correctly get the data out, I have to now [edit the autogenerated class](https://github.com/Azure/azure-libraries-for-java/pull/680/files#diff-c2b9d9bfd15c0ba1fae0d3425d63cefbR20) to add the `properties` sub class...
The service needs to change the on the swagger modelling.
### Suggested Fix
Change the swagger model.
Good examples of what needs to be done, model like the following
* [`AzureStoragePropertyDictionaryResource`](https://github.com/Azure/azure-rest-api-specs/blob/master/specification/web/resource-manager/Microsoft.Web/stable/2018-02-01/WebApps.json#L18058)
* A little more relevant example id [`BackupItems`](https://github.com/Azure/azure-rest-api-specs/blob/master/specification/web/resource-manager/Microsoft.Web/stable/2018-02-01/WebApps.json#L18105) and [`BackupItemCollection`](https://github.com/Azure/azure-rest-api-specs/blob/master/specification/web/resource-manager/Microsoft.Web/stable/2018-02-01/WebApps.json#L18218)
Beitragsleitfaden
Rechercherichtung
Start with the availableStacks GET definition in Provider.json and compare its schema with the response payload shown in the issue and the AzureStoragePropertyDictionaryResource, BackupItems, and BackupItemCollection examples. Check the generated ApplicationStackInner.java model and the referenced parsing change; done means the swagger model generates a Java class that correctly deserializes the returned properties structure.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- azure, java
- Bereich
- api
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100