Skip to content

feat(api)!: geef aanleveren een eigen resource zodat de generator-update kan landen - #147

Closed
dependabot[bot] wants to merge 4 commits into
mainfrom
dependabot/maven/org.openapitools-openapi-generator-maven-plugin-7.24.0
Closed

dependabot[bot] wants to merge 4 commits into
mainfrom
dependabot/maven/org.openapitools-openapi-generator-maven-plugin-7.24.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jul 21, 2026

Copy link
Copy Markdown
Contributor

Wat er verandert

De code-generator-update naar 7.24.0 maakte drie van de zes magazijn-operaties onbereikbaar.
Deze PR neemt de update alsnog, door de oorzaak weg te nemen in plaats van de update tegen te
houden.

De oorzaak. Upstream "Fix path shadowing"
laat het class-basispad van een tag vervallen zodra dat pad de routes van een ándere tag zou
afvangen; de operaties dragen hun volledige pad dan op methodeniveau. Dat is geldige JAX-RS, maar
Quarkus REST resolvet eerst op class-basispad en beantwoordt zo'n operatie met 405. In het magazijn
deelden Aanlever, Ophaal en Beheer allemaal /berichten:

interface class-@Path gevolg
OphaalApi "/berichten" wint de subtree
AanleverApi "" POST /berichten → 405
BeheerApi "" PATCH/DELETE /berichten/{berichtId} → 405

De oplossing. Elke tag bezit nu zijn eigen pad-subtree:

operatie was is tag
aanleveren POST /berichten POST /aanleveringen Aanlever
lijst, detail, bijlage /berichten… ongewijzigd OphaalBerichten
status, verwijderen /berichten/{berichtId} ongewijzigd BeheerBerichten

Gegenereerd wordt nu AanleverApi @Path("/aanleveringen") naast BerichtenApi @Path("/berichten")
twee disjuncte subtrees, geen lege class-@Path meer.

Ophaal en Beheer moesten één tag worden omdat GET en PATCH/DELETE op
/berichten/{berichtId} hetzelfde pad delen; geen ADR-conforme hernoeming scheidt die. Alleen de
HTTP-laag komt daardoor samen in BerichtenResourceBerichtOphaalService en
BerichtBeheerService blijven gescheiden, net als hun tests.

Aanleveren houdt wél een eigen resource. Het is de afzender-kant die via de FSC-inway naar binnen
schrijft, tegenover de ontvanger-kant met X-Ontvanger en BerichtAutorisatie.vereisOntvanger(...).
Die twee autorisatieregimes in één class zetten zou de verkeerde besparing zijn.

Waarom niet wachten

De bijbehorende Quarkus-issue (quarkusio/quarkus#26496)
is gesloten en gerepareerd in 3.24.0.CR1, ruim vóór onze 3.38.1. Die fix dekt @Path("/base")
tegenover @Path("/base/{id}"), niet @Path("") tegenover @Path("/berichten") — gemeten: de 405's
treden op onze huidige Quarkus-versie nog steeds op. De generator doet niets fouts, dus wachten
lost hier niets op.

Wel opgevallen en apart te melden bij OpenAPITools: de shadow-detectie is asymmetrisch.
Ophaal's commonPath /berichten was exact gelijk aan Aanlever's pad, dus had ook Ophaal zijn
class-@Path moeten verliezen. Dan hadden alle drie de interfaces @Path("") gehad en had de
routering gewoon gewerkt.

Meegenomen fout

BerichtDtoMapperTest faalde op deze branch, los van de bump. De HAL-links laten
.path(ApiInfo.BASE_PATH) weg sinds de prefix één keer via quarkus.rest.path gezet wordt, maar de
test-fixture bouwde zijn base-URI nog zonder die prefix. De fixture spiegelt nu de runtime-waarde.

Wat er meeverhuist

Alleen het schrijfpad. MagazijnAanleverClient in de demo-console (class-@Path naar /api/v1,
paden per methode, want POST en PATCH zitten nu op verschillende roots), de Bruno-map
berichten/aanleveren/, demo/smoke.sh, apis.json en 34 POST-call-sites in tests. De
lees-clients — MagazijnClient in de sessiecache-library én in de uitvraag — raken /berichten en
blijven ongemoeid, net als de WireMock-mappings (die stubben leespaden).

Verificatie

  • ./mvnw clean verify — alle modules groen: fbs-common 296, magazijnregister 30, sessiecache 295,
    magazijn 379, uitvraag 194, demo-console 43
  • RouteDekkingTest uit test(api): bewaak dat elk pad uit de spec ook echt bij een resource aankomt #192 tijdelijk meegedraaid op deze branch: 12/12 groen, waar dezelfde
    test vóór deze wijziging drie 405's meldde
  • detekt: geen bevindingen; geen nieuwe build-warnings

Volgorde

#192 landt eerst — die brengt RouteDekkingTest als blijvende bewaker en haalt de
dependabot-blokkade op deze generator weg. Daarna rebaset deze PR daarop; PADEN in de
magazijn-variant van die test gaat dan van 3 naar 4.

Closes MinBZK/MijnOverheidZakelijk#870

🤖 Generated with Claude Code

@dependabot dependabot Bot added dependencies Pull requests that update a dependency file java Pull requests that update java code labels Jul 21, 2026
@ericwout-overheid
ericwout-overheid enabled auto-merge (squash) July 28, 2026 14:48
@ericwout-overheid
ericwout-overheid marked this pull request as draft July 29, 2026 06:40
auto-merge was automatically disabled July 29, 2026 06:40

Pull request was converted to draft

@ericwout-overheid

Copy link
Copy Markdown
Contributor

Waarom deze bump nu niet door kan

openapi-generator 7.24.0 bevat OpenAPITools/openapi-generator#23871 ("Fix path shadowing"): zodra een gemeenschappelijke pad-prefix routes van een andere tag zou afvangen, vervalt de class-@Path en dragen de methodes het volledige pad. Bij ons doet /berichten dat — OphaalApi houdt class-pad /berichten, AanleverApi en BeheerApi krijgen class-pad "".

Quarkus REST resolvet eerst op class-basispad. POST /api/v1/berichten landt daardoor in de /berichten-node (OphaalResource), vindt daar geen POST en geeft 405 — de ""-class (AanleverResource) wordt niet meer geprobeerd. Zelfde patroon als quarkusio/quarkus#26496; herkenbaar aan het frame ClassRoutingHandler.handle:77.

Dat dit géén discovery-probleem is (Quarkus die de class-@Path van de interface niet oppikt) volgt uit de statuscode: dan was OphaalResource óók niet geregistreerd en had het een 404 gegeven in plaats van een 405.

Wat er wél in deze PR zit

Commit 92004a8 haalt de dubbel gedefinieerde /api/v1-prefix weg: die stond zowel in de spec als in @Path(ApiInfo.BASE_PATH + ...) op de resource-classes, en staat nu één keer via quarkus.rest.path. Losstaande verbetering, maar niet genoeg — de shadowing zit een laag dieper.

Verder timeout-minutes: 30 op de test-job. Een 405 wordt beantwoord zonder de request-body te lezen, waardoor de aanlever-test die 25 MiB uploadt bleef schrijven tot GitHub de job na 6 uur afkapte. Met de timeout valt hij nu binnen een half uur om.

Vervolg

Opgepakt in MinBZK/MijnOverheidZakelijk#870 — daar staan de oplossingsrichtingen (pinnen op 7.23.0, useTags=false, of de spec-paden herzien) en de twee losstaande bevindingen (hangende upload bij een afgewezen request, en het ontbreken van een test die elk pad uit de spec op bereikbaarheid controleert).

Voorstel: deze PR sluiten en 7.24.x in Dependabot negeren tot #870 is opgelost. De twee verbeteringen hierboven zijn los van de bump waardevol en kunnen in een eigen PR terugkomen.

@ericwout-overheid

Copy link
Copy Markdown
Contributor

Ik weet niet of het handig is om dit ticket te sluiten. Dat laten we wat mij betreft over aan de implementatie van MinBZK/MijnOverheidZakelijk#870. Als er een update komt van een van beide projecten dan komt er volgens mij gewoon een nieuwe PR van dependabot.

dependabot Bot and others added 4 commits August 13, 2026 12:00
Bumps org.openapitools:openapi-generator-maven-plugin from 7.23.0 to 7.24.0.

---
updated-dependencies:
- dependency-name: org.openapitools:openapi-generator-maven-plugin
  dependency-version: 7.24.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
openapi-generator 7.24.0 verdeelt paden anders over class- en methode-niveau:
zodra een common prefix routes van een andere tag zou shadowen, valt de
class-`@Path` weg en dragen de methodes het volledige pad (upstream PR #23871).
De resource-classes zetten zelf `@Path(ApiInfo.BASE_PATH + "/berichten")`, dus
dat leverde `/api/v1/berichten/berichten` op — POST /api/v1/berichten gaf 405.

Een 405 wordt beantwoord zonder de request-body te lezen; de aanlever-test die
25 MiB uploadt bleef daardoor schrijven tot GitHub de job na 6 uur afkapte.

De prefix staat nu één keer in `quarkus.rest.path`. Resources die een
gegenereerde interface implementeren dragen geen eigen `@Path` meer en volgen
de spec; handgeschreven resources houden een relatief pad. HAL-links in het
magazijn laten `.path(ApiInfo.BASE_PATH)` weg omdat `uriInfo.baseUri` de
prefix nu al bevat.

De test-job krijgt `timeout-minutes: 30` als vangnet tegen een hangende upload.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
De HAL-links in het magazijn laten `.path(ApiInfo.BASE_PATH)` weg sinds de
prefix één keer via `quarkus.rest.path` gezet wordt: `uriInfo.baseUri` draagt
hem dan al. De unit-test bouwde zijn base-URI echter zonder die prefix, waardoor
de self-link-assertie op `/api/v1/berichten/...` niet meer kon slagen.

De fixture bevat de prefix nu net als de runtime-waarde.
…één tag

De code-generator laat het class-basispad van een tag vervallen zodra dat pad de
routes van een andere tag zou afvangen; de operaties dragen dan hun volledige pad
op methodeniveau. Quarkus REST resolvet eerst op class-basispad en beantwoordt zo'n
operatie met 405. In het magazijn deelden Aanlever, Ophaal en Beheer allemaal
/berichten, waardoor aanleveren, status bijwerken en verwijderen onbereikbaar werden.

Elke tag bezit nu zijn eigen pad-subtree. Aanleveren verhuist naar
`POST /aanleveringen` — een eigen resource, symmetrisch met `POST /aanmeldingen`
in de uitvraag, en het houdt de afzender-kant gescheiden van de ontvanger-kant.
Ophaal en Beheer gaan samen onder één tag `Berichten`, want `GET` en
`PATCH`/`DELETE` op `/berichten/{berichtId}` delen hetzelfde pad en kunnen daarom
niet in verschillende tags zitten. De domeinlogica blijft wél gescheiden: alleen
de HTTP-laag komt samen in `BerichtenResource`, de services blijven los.

BREAKING CHANGE: aanleveren gebeurt op `POST /api/v1/aanleveringen` in plaats van
`POST /api/v1/berichten`. De lees- en beheerpaden onder `/berichten` blijven gelijk,
net als de `Location`-header en de HAL-links na een geslaagde aanlevering.
@ericwout-overheid
ericwout-overheid force-pushed the dependabot/maven/org.openapitools-openapi-generator-maven-plugin-7.24.0 branch from 2d8ff9b to 7cbd040 Compare August 13, 2026 12:22
@github-actions

Copy link
Copy Markdown
Contributor

JaCoCo coverage

Overall Project 91.57% 🍏
Files changed 100% 🍏

Module Coverage
FBS Berichtenmagazijn Service 92.8% 🍏
FBS Berichten Uitvraag Service 83.63% 🍏
Files
Module File Coverage
FBS Berichtenmagazijn Service BijlageContentTypeFilter.kt 100% 🍏
AanleverResource.kt 99.44% 🍏
BerichtDtoMapper.kt 98.74% 🍏
BerichtenResource.kt 98.21% 🍏
FBS Berichten Uitvraag Service UitvraagResource.kt 100% 🍏
AanmeldResource.kt 100% 🍏
OphalenSseResource.kt 94.42% 🍏

@ericwout-overheid ericwout-overheid changed the title build(deps): Bump org.openapitools:openapi-generator-maven-plugin from 7.23.0 to 7.24.0 feat(api)!: geef aanleveren een eigen resource zodat de generator-update kan landen Aug 13, 2026
@ericwout-overheid

Copy link
Copy Markdown
Contributor

Vervangen door #203. Dezelfde vier commits — de bump naar 7.24.0, de pad-prefix naar quarkus.rest.path, de link-fixture-fix en de tag/pad-scheiding — staan daar op een eigen branch.

Reden voor de verhuizing: de deploy-workflow slaat bouwen en preview-deployen bewust over voor bot-PR's, dus de drie deploy-preview-*-checks bleven hier op skipped staan. Bij een brekende contractwijziging wil je die verificatie juist wél. Verder is er niets veranderd.

@dependabot @github

dependabot Bot commented on behalf of github Aug 13, 2026

Copy link
Copy Markdown
Contributor Author

OK, I won't notify you again about this release, but will get in touch when a new version is available. If you'd rather skip all updates until the next major or minor version, let me know by commenting @dependabot ignore this major version or @dependabot ignore this minor version. You can also ignore all major, minor, or patch releases for a dependency by adding an ignore condition with the desired update_types to your config file.

If you change your mind, just re-open this PR and I'll resolve any conflicts on it.

@dependabot
dependabot Bot deleted the dependabot/maven/org.openapitools-openapi-generator-maven-plugin-7.24.0 branch August 13, 2026 15:23
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file java Pull requests that update java code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Berichtenbox kan niet mee met nieuwe versie van de API-codegenerator

2 participants