{"record":{"id":"f2d9d6893e152c6c","repo":"quarkusio/quarkus","slug":"not-a-resolver","errorCode":null,"errorMessage":"Not a resolver: ","messagePattern":"Not a resolver: ","errorType":"exception","errorClass":"java.lang.IllegalStateException","httpStatus":null,"severity":"error","filePath":"extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/EngineProducer.java","lineNumber":366,"sourceCode":"    @Produces\n    @ApplicationScoped\n    Engine getEngine() {\n        return engine;\n    }\n\n    void onShutdown(@Observes ShutdownEvent event) {\n        // Make sure to clear the Qute cache\n        Qute.clearCache();\n    }\n\n    private Resolver createResolver(String resolverClassName) {\n        try {\n            Class<?> resolverClazz = Thread.currentThread()\n                    .getContextClassLoader().loadClass(resolverClassName);\n            if (Resolver.class.isAssignableFrom(resolverClazz)) {\n                return (Resolver) resolverClazz.getDeclaredConstructor().newInstance();\n            }\n            throw new IllegalStateException(\"Not a resolver: \" + resolverClassName);\n        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | IllegalArgumentException\n                | InvocationTargetException | NoSuchMethodException | SecurityException e) {\n            throw new IllegalStateException(\"Unable to create resolver: \" + resolverClassName, e);\n        }\n    }\n\n    private TemplateGlobalProvider createGlobalProvider(String initializerClassName) {\n        try {\n            Class<?> initializerClazz = Thread.currentThread()\n                    .getContextClassLoader().loadClass(initializerClassName);\n            if (TemplateGlobalProvider.class.isAssignableFrom(initializerClazz)) {\n                return (TemplateGlobalProvider) initializerClazz.getDeclaredConstructor().newInstance();\n            }\n            throw new IllegalStateException(\"Not a global provider: \" + initializerClazz);\n        } catch (InstantiationException | IllegalAccessException | ClassNotFoundException | IllegalArgumentException\n                | InvocationTargetException | NoSuchMethodException | SecurityException e) {\n            throw new IllegalStateException(\"Unable to create global provider: \" + initializerClassName, e);\n        }","sourceCodeStart":348,"sourceCodeEnd":384,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/qute/runtime/src/main/java/io/quarkus/qute/runtime/EngineProducer.java#L348-L384","documentation":"EngineProducer.createResolver loads the class named by quarkus.qute.resolver.<n> class-name config and casts it to io.quarkus.qute.Resolver. If the class loads but does not implement Resolver, startup fails with this error. It guards the reflective instantiation of user-supplied resolvers.","triggerScenarios":"Setting a quarkus.qute.resolver.*.classes property to a class that exists on the classpath but does not implement io.quarkus.qute.Resolver (e.g. a ValueResolver or SectionHelper was configured by mistake).","commonSituations":"Copy-pasting config between resolver/global-provider properties; configuring a class from an internal or wrong package; a library class that stopped implementing Resolver after a Quarkus version upgrade.","solutions":["Verify the configured class implements io.quarkus.qute.Resolver and has a public no-arg constructor.","Fix the quarkus.qute.resolver.<n>.classes property value to the fully-qualified resolver class.","Remove the property if a custom resolver is not actually needed.","Check the Quarkus migration guide if the class changed its interface after an upgrade."],"exampleFix":"// before\nquarkus.qute.resolver.my-resolver.classes=com.example.MyValueResolver\n// after\nquarkus.qute.resolver.my-resolver.classes=com.example.MyResolver // implements io.quarkus.qute.Resolver","handlingStrategy":"validation","validationCode":"Class<?> c = Class.forName(\"com.example.MyResolver\");\nif (!io.quarkus.qute.Resolver.class.isAssignableFrom(c)) throw new IllegalArgumentException(\"Not a Resolver\");","typeGuard":"boolean isResolver(Class<?> c) { return io.quarkus.qute.Resolver.class.isAssignableFrom(c); }","tryCatchPattern":"try { app.start(); } catch (IllegalStateException e) { if (e.getMessage().startsWith(\"Not a resolver\")) { /* fix quarkus.qute.resolver config */ } else throw e; }","preventionTips":["Double-check FQCNs in quarkus.qute.resolver.* config","Keep resolver classes in a stable package","Review Quarkus migration guides when upgrading"],"tags":["qute","reflection","configuration","classloading"],"backgroundTag":"class-does-not-implement-interface","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"}