{"record":{"id":"14de801b15b3657e","repo":"quarkusio/quarkus","slug":"method-targetmethod-name-of-class-targetm-14de80","errorCode":null,"errorMessage":"Method '${targetMethod.name()} of class '${targetMethod.declaringClass().name()}' cannot be used as a response filter as it does not declare 'void' or 'Uni<Void>' as its return type","messagePattern":"Method '(.+?) of class '(.+?)' cannot be used as a response filter as it does not declare 'void' or 'Uni<Void>' as its return type","errorType":"validation","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"independent-projects/resteasy-reactive/server/processor/src/main/java/org/jboss/resteasy/reactive/server/processor/generation/filters/CustomFilterGenerator.java","lineNumber":756,"sourceCode":"        } else if (targetMethod.returnType().name().equals(RESPONSE)) {\n            return ReturnType.RESPONSE;\n        }\n        throw new RuntimeException(\"Method '\" + targetMethod.name() + \" of class '\" + targetMethod.declaringClass().name()\n                + \"' cannot be used as a request filter as it does not declare 'void', Response, RestResponse, Optional<Response>, Optional<RestResponse>, 'Uni<Void>', 'Uni<RestResponse>' or 'Uni<Response>' as its return type\");\n    }\n\n    private ReturnType determineResponseFilterReturnType(MethodInfo targetMethod) {\n        if (targetMethod.returnType().kind() == Type.Kind.VOID) {\n            return ReturnType.VOID;\n        } else if (targetMethod.returnType().kind() == Type.Kind.PARAMETERIZED_TYPE) {\n            ParameterizedType parameterizedType = targetMethod.returnType().asParameterizedType();\n            if (parameterizedType.name().equals(UNI) && (parameterizedType.arguments().size() == 1)) {\n                if (parameterizedType.arguments().get(0).name().equals(VOID)) {\n                    return ReturnType.UNI_VOID;\n                }\n            }\n        }\n        throw new RuntimeException(\"Method '\" + targetMethod.name() + \" of class '\" + targetMethod.declaringClass().name()\n                + \"' cannot be used as a response filter as it does not declare 'void' or 'Uni<Void>' as its return type\");\n    }\n\n    private Class<?> determineRequestInterfaceType(ReturnType returnType) {\n        switch (returnType) {\n            case VOID:\n            case OPTIONAL_RESPONSE:\n            case OPTIONAL_REST_RESPONSE:\n            case RESPONSE:\n            case REST_RESPONSE:\n                return ContainerRequestFilter.class;\n            case UNI_RESPONSE:\n            case UNI_REST_RESPONSE:\n            case UNI_VOID:\n                return ResteasyReactiveContainerRequestFilter.class;\n            default:\n                throw new IllegalStateException(\"ReturnType: '\" + returnType + \"' is not supported\");\n        }","sourceCodeStart":738,"sourceCodeEnd":774,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/server/processor/src/main/java/org/jboss/resteasy/reactive/server/processor/generation/filters/CustomFilterGenerator.java#L738-L774","documentation":"A @ServerResponseFilter method must return void or Uni<Void>. Unlike request filters, response filters cannot abort with a Response object, so any other return type is rejected by determineResponseFilterReturnType during augmentation.","triggerScenarios":"Annotating a method with @ServerResponseFilter that returns Response, Uni<Response>, Optional<Response>, String or CompletionStage<Void>, then building the application.","commonSituations":"Copying a signature from a @ServerRequestFilter (Response returns are request-filter-only); trying to replace the response from a response filter (use ContainerResponseContext.setEntity instead); using CompletionStage instead of Uni.","solutions":["Change the return type to void (most common).","Use Uni<Void> if the filter is reactive.","Move logic that must return a Response to a @ServerRequestFilter.","Remove the annotation if the method is not meant to be a filter."],"exampleFix":"// before\n@ServerResponseFilter\npublic Uni<Response> postProcess(ContainerResponseContext ctx) { ... }\n// after\n@ServerResponseFilter\npublic void postProcess(ContainerResponseContext ctx) { ... }","handlingStrategy":"validation","validationCode":"import java.lang.reflect.Method;\n\nvoid validateResponseFilterReturnType(Method m) {\n    Class<?> rt = m.getReturnType();\n    boolean ok = rt == void.class || rt.getName().equals(\"io.smallrye.mutiny.Uni\");\n    if (!ok) throw new IllegalStateException(\n        \"@ServerResponseFilter must return void or Uni<Void>, found: \" + rt.getName());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Response filters: void or Uni<Void> only — no Response return types.","To modify the response, use ContainerResponseContext.setEntity inside the filter.","Never copy request-filter signatures to response filters.","Prefer plain void unless the filter body is genuinely reactive."],"tags":["quarkus","resteasy-reactive","build-time","filters","return-type"],"backgroundTag":"invalid-filter-signature","analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-14T00:17:10.932Z"}