{"record":{"id":"f6af5d1d8c9cb5b8","repo":"quarkusio/quarkus","slug":"failed-to-find-converter-for-elementtype-f6af5d","errorCode":null,"errorMessage":"Failed to find converter for ${elementType}","messagePattern":"Failed to find converter for (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"independent-projects/resteasy-reactive/server/processor/src/main/java/org/jboss/resteasy/reactive/server/processor/generation/converters/GeneratedConverterIndexerExtension.java","lineNumber":106,"sourceCode":"                } else if (valueOf != null) {\n                    ResultHandle ret = mc.invokeStaticMethod(valueOf, mc.getMethodParam(0));\n                    mc.returnValue(ret);\n                } else if (fromString != null) {\n                    ResultHandle ret = mc.invokeStaticMethod(fromString, mc.getMethodParam(0));\n                    mc.returnValue(ret);\n                }\n            }\n            delegate = new LoadedParameterConverter().setClassName(baseName);\n        } else {\n            // let's not try this again\n            baseName = null;\n            delegate = null;\n        }\n        existingConverters.put(elementType, baseName);\n        if (hasRuntimeConverters)\n            return new RuntimeResolvedConverter.Supplier().setDelegate(delegate);\n        if (delegate == null)\n            throw new RuntimeException(\"Failed to find converter for \" + elementType);\n        return delegate;\n    }\n}\n","sourceCodeStart":88,"sourceCodeEnd":110,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/resteasy-reactive/server/processor/src/main/java/org/jboss/resteasy/reactive/server/processor/generation/converters/GeneratedConverterIndexerExtension.java#L88-L110","documentation":"GeneratedConverterIndexerExtension.extractConverterImpl is the extension hook that ServerEndpointIndexer.extractConverter falls back to when no built-in converter exists for a parameter element type. If the type is not found among existing/registered generated converters and runtime converters are disabled, it throws 'Failed to find converter' at deployment.","triggerScenarios":"Same as 3581 but resolved through the indexer-extension path: a JAX-RS parameter type with no registered converter in existingConverters, no built-in support, and hasRuntimeConverters==false, so the extension's delegate lookup returns null.","commonSituations":"Custom value types in @QueryParam/@PathParam without a build-time indexed ParamConverter; converters registered only at runtime while the build expects indexed ones; packaging converters in a library that isn't bean-indexed.","solutions":["Register a ParamConverterProvider for the type so the build indexes it into existingConverters","Use the RESTEasy Reactive @ParamConverter annotation on the type to point to a converter class","Verify the converter provider class is part of the Jandex index (add a beans.xml or index the dependency)","Fall back to a String parameter with manual parsing"],"exampleFix":"// before\nclass Filter { ... } // used as @QueryParam(\"f\") Filter f\n// after\n@ParamConverter(FilterParamConverter.class)\nclass Filter { ... }","handlingStrategy":"validation","validationCode":"// Verify converter availability via the indexer extension before deployment\nString base = existingConverters.get(elementType);\nif (base == null && !hasRuntimeConverters && !isBuiltInType(elementType)) {\n  throw new IllegalStateException(\"Register a converter for \" + elementType + \" before building\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Annotate custom param types with @ParamConverter so converters are discovered at build time","Ensure converter libraries are included in the Jandex index","Avoid runtime-only converter registration when building native images","Keep a test application that maps every custom param type"],"tags":["quarkus","resteasy-reactive","param-converter","deployment-time"],"backgroundTag":"missing-param-converter","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"}