{"record":{"id":"ffb839181f6297d3","repo":"quarkusio/quarkus","slug":"multiple-parameter-injectors-found-for-parameter","errorCode":null,"errorMessage":"Multiple parameter injectors found for parameter %s of route method %s declared on %s","messagePattern":"Multiple parameter injectors found for parameter (.+?) of route method (.+?) declared on (.+?)","errorType":"exception","errorClass":"java.lang.IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/reactive-routes/deployment/src/main/java/io/quarkus/vertx/web/deployment/ReactiveRoutesProcessor.java","lineNumber":568,"sourceCode":"                    && method.returnType().kind() == Kind.CLASS) {\n                throw new IllegalStateException(String.format(\n                        \"Route business method returning a Uni/Multi/CompletionStage must declare a type argument on the return type [method: %s, bean: %s]\",\n                        method, bean));\n            }\n            boolean canEndResponse = false;\n            int idx = 0;\n            int failureParams = 0;\n            for (Type paramType : params) {\n                Set<AnnotationInstance> paramAnnotations = Annotations.getParameterAnnotations(transformedAnnotations,\n                        method, idx);\n                List<ParameterInjector> injectors = getMatchingInjectors(paramType, paramAnnotations, index);\n                if (injectors.isEmpty()) {\n                    throw new IllegalStateException(String.format(\n                            \"No parameter injector found for parameter %s of route method %s declared on %s\", idx,\n                            method, bean));\n                }\n                if (injectors.size() > 1) {\n                    throw new IllegalStateException(String.format(\n                            \"Multiple parameter injectors found for parameter %s of route method %s declared on %s\",\n                            idx, method, bean));\n                }\n                ParameterInjector injector = injectors.get(0);\n                if (injector.getTargetHandlerType() != null && !injector.getTargetHandlerType().equals(handlerType)) {\n                    throw new IllegalStateException(String.format(\n                            \"HandlerType.%s is not legal for parameter %s of route method %s declared on %s\",\n                            injector.getTargetHandlerType(), idx, method, bean));\n                }\n\n                // A param injector may validate the parameter annotations\n                injector.validate(bean, method, routeAnnotation, paramType, paramAnnotations);\n\n                if (injector.canEndResponse) {\n                    canEndResponse = true;\n                }\n\n                if (Route.HandlerType.FAILURE == handlerType && isThrowable(paramType, index)) {","sourceCodeStart":550,"sourceCodeEnd":586,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/reactive-routes/deployment/src/main/java/io/quarkus/vertx/web/deployment/ReactiveRoutesProcessor.java#L550-L586","documentation":"Raised by ReactiveRoutesProcessor.validateRouteMethod when more than one ParameterInjector claims the same parameter. The processor collects injectors matching the parameter's type and annotations; multiple matches make the generated handler bytecode ambiguous (which injector should supply the value?), so validation aborts at build time with the parameter index, method and bean. Typically caused by overlapping custom injector extensions on a build classpath.","triggerScenarios":"Thrown at extensions/reactive-routes/deployment/src/main/java/io/quarkus/vertx/web/deployment/ReactiveRoutesProcessor.java:568 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Narrow the parameter's annotations so only one injector matches","Remove or disable the conflicting custom ParameterInjector extension from the build","Adjust the custom injector's matching logic to not overlap with built-in injectors"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"e1c734241f34c7919086ceb4c9262b4a58f6de44","analyzedAt":"2026-09-05T17:01:29.979Z","contentChangedAt":"2026-09-05T17:01:29.979Z","schemaVersion":2},"datasetVersion":"2026-09-12T22:17:10.623Z"}