BRP-API / Haal-Centraal-BRP-bevragen

https://brp-api.github.io/Haal-Centraal-BRP-bevragen/
Other
33 stars 22 forks source link

Gegenereerde code o.b.v. OpenAPI spec geeft verkeerd type voor datumIngangGeldigheid #1789

Closed sanderino666 closed 3 months ago

sanderino666 commented 5 months ago

Beschrijf de bug

Het genereren van de OpenAPI spec: https://raw.githubusercontent.com/BRP-API/Haal-Centraal-BRP-bevragen/master/specificatie/genereervariant/openapi.yaml

Lijkt verkeerde types aan te maken voor het veld 'datumIngangGeldigheid' bij Adres. De verwachting is dat dit een AbstractDatum is maar het wordt een VerblijfplaatsBuitenlandAllOfDatumIngangGeldigheid. Het resultaat is dat als we de volgende response proberen te verwerken response_all_fields.json, we een error krijgen bij het parsen.

JSON decoding error: Could not resolve type id 'Datum' as a subtype of `haalcentraal.generated.personen.VerblijfplaatsBuitenlandAllOfDatumIngangGeldigheid`: Class `haalcentraal.generated.personen.VolledigeDatum` not subtype of `haalcentraal.generated.personen.VerblijfplaatsBuitenlandAllOfDatumIngangGeldigheid`
brp.exception.BrpException: JSON decoding error: Could not resolve type id 'Datum' as a subtype of `haalcentraal.generated.personen.VerblijfplaatsBuitenlandAllOfDatumIngangGeldigheid`: Class `haalcentraal.generated.personen.VolledigeDatum` not subtype of `haalcentraal.generated.personen.VerblijfplaatsBuitenlandAllOfDatumIngangGeldigheid`
    at haalcentraal.BrpHaalCentraalService.lambda$getPersonOnBsn$0(BrpHaalCentraalService.java:105)

Wij gebruiken de volgende plugin: https://github.com/OpenAPITools/openapi-generator met de onderstaande configuratie.

tasks.create("generateHaalCentraalBRPOpenApiClasses", GenerateTask::class) {
    generatorName = "spring"
    inputSpec = "$rootDir/src/main/resources/brp-api-personen.yaml"
    outputDir = generated
    apiPackage = "haalcentraal.generated"
    modelPackage = "haalcentraal.generated.personen"
    generateApiTests = false
    generateModelTests = false
    generateModelDocumentation = false
    generateApiDocumentation = false
    generateAliasAsModel = false
    enablePostProcessFile = false
    skipValidateSpec = true
    configOptions.put("interfaceOnly", "true")
    configOptions.put("sourceFolder", "")
    configOptions.put("useJakartaEe", "true")

    typeMappings.put("OffsetDate", "java.time.LocalDate")
    typeMappings.put("OffsetDateTime", "java.time.LocalDateTime")
    typeMappings.put("Date", "java.time.LocalDate")
}

Als we de yml handmatig aanpassen waarbij:

allOf:
  - $ref: '#/components/schemas/AbstractDatum'
  - type: object
    deprecated: true

Verander in:

datumIngangGeldigheid:
  $ref: '#/components/schemas/AbstractDatum'

Dan werkt het wel. Aangepaste yml: brp-api-personen_aangepast.yml.txt

MelvLee commented 4 months ago

Dank voor het melden.

We hebben de openapi.yaml ge-upgrade naar OpenApi 3.1.0 zodat properties, die middels $ref verwijzen naar een schema definitie te kunnen deprecaten.

CathyDingemanse commented 4 months ago

Heel veel dank @sanderino666 voor het melden, hiermee is voorkomen dat anderen hier ook last van krijgen. Super!!!

CathyDingemanse commented 3 months ago

Done