From 71bec7db2e128d965a116770d26b32562a20cbb1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20=C3=89pardaud?= Date: Wed, 8 Apr 2026 15:45:14 +0200 Subject: [PATCH 1/2] Quarkus REST: fix `@Context` injection for records See #53477 --- .../processor/scanning/ClassInjectorTransformer.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/independent-projects/resteasy-reactive/server/processor/src/main/java/org/jboss/resteasy/reactive/server/processor/scanning/ClassInjectorTransformer.java b/independent-projects/resteasy-reactive/server/processor/src/main/java/org/jboss/resteasy/reactive/server/processor/scanning/ClassInjectorTransformer.java index cd3a97dd659e2..a2f9a62fa1464 100644 --- a/independent-projects/resteasy-reactive/server/processor/src/main/java/org/jboss/resteasy/reactive/server/processor/scanning/ClassInjectorTransformer.java +++ b/independent-projects/resteasy-reactive/server/processor/src/main/java/org/jboss/resteasy/reactive/server/processor/scanning/ClassInjectorTransformer.java @@ -289,7 +289,7 @@ public void visitEnd() { case CONTEXT: // already set by CDI for non-records if (isRecord) { - injectContextParameter(injectMethod, fieldInfo, ctxParamIndex); + injectContextParameterForRecord(injectMethod, fieldInfo, fieldIndex, ctxParamIndex); } break; case FORM: @@ -489,7 +489,8 @@ private void injectBeanParameter(MethodVisitor injectMethod, FieldInfo fieldInfo } } - private void injectContextParameter(MethodVisitor injectMethod, FieldInfo fieldInfo, int ctxParamIndex) { + private void injectContextParameterForRecord(MethodVisitor injectMethod, FieldInfo fieldInfo, int fieldIndex, + int ctxParamIndex) { // ctx param injectMethod.visitVarInsn(Opcodes.ALOAD, ctxParamIndex); // type @@ -498,6 +499,8 @@ private void injectContextParameter(MethodVisitor injectMethod, FieldInfo fieldI injectMethod.visitMethodInsn(Opcodes.INVOKEINTERFACE, QUARKUS_REST_INJECTION_CONTEXT_BINARY_NAME, "getContextParameter", "(Ljava/lang/Class;)Ljava/lang/Object;", true); + // store our param field + injectMethod.visitVarInsn(AsmUtil.getStoreOpcode(fieldInfo.type()), fieldIndex); } private void generateMultipartFormFields(FieldInfo fieldInfo, ServerIndexedParameter extractor) { From 31a8b5e7babc3ce8c47470e441ec43c2f5d19134 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20=C3=89pardaud?= Date: Tue, 7 Apr 2026 18:00:25 +0200 Subject: [PATCH 2/2] Quarkus REST: test that context params are injected in records This did not use to be the case prior to the ASM->Gizmo rewrite --- .../reactive/server/test/beanparam/BeanParamRecordTest.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/beanparam/BeanParamRecordTest.java b/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/beanparam/BeanParamRecordTest.java index 05b14bd702486..0f3fd90e065ea 100644 --- a/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/beanparam/BeanParamRecordTest.java +++ b/extensions/resteasy-reactive/rest/deployment/src/test/java/io/quarkus/resteasy/reactive/server/test/beanparam/BeanParamRecordTest.java @@ -43,7 +43,7 @@ void shouldWork() { .get("/record") .then() .statusCode(200) - .body(equalTo("got it/2/3/4/5/6.0/7.0/true/a/query/query/query/query")); + .body(equalTo("got it/2/3/4/5/6.0/7.0/true/a/query/query/query/query//record")); } @@ -102,7 +102,8 @@ public String beanParamRecord(BeanParamRecord p, @RestHeader String headerParam) + p.obp().q + "/" + p.obp().obpr.q() + "/" + p.obp().obpc.q + "/" - + p.obpr().q; + + p.obpr().q + "/" + + p.uriInfo().getPath(); } } }