{"record":{"id":"51842390047bfef6","repo":"quarkusio/quarkus","slug":"namespace-s-may-not-be-handled-by-multiple-reso","errorCode":null,"errorMessage":"Namespace [%s] may not be handled by multiple resolvers of the same priority [%s]: %s and %s","messagePattern":"Namespace \\[(.+?)\\] may not be handled by multiple resolvers of the same priority \\[(.+?)\\]: (.+?) and (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"independent-projects/qute/core/src/main/java/io/quarkus/qute/EngineBuilder.java","lineNumber":193,"sourceCode":"     * @see #addSectionHelper(SectionHelperFactory)\n     */\n    public EngineBuilder addDefaults() {\n        return addDefaultSectionHelpers().addDefaultValueResolvers();\n    }\n\n    /**\n     *\n     * @param resolver\n     * @return self\n     * @throws IllegalArgumentException if there is a resolver of the same priority for the given namespace\n     * @see EngineListener\n     */\n    public EngineBuilder addNamespaceResolver(NamespaceResolver resolver) {\n        String namespace = Namespaces.requireValid(resolver.getNamespace());\n        for (NamespaceResolver nsResolver : namespaceResolvers) {\n            if (nsResolver.getNamespace().equals(namespace)\n                    && resolver.getPriority() == nsResolver.getPriority()) {\n                throw new IllegalArgumentException(\n                        String.format(\n                                \"Namespace [%s] may not be handled by multiple resolvers of the same priority [%s]: %s and %s\",\n                                namespace, resolver.getPriority(), nsResolver, resolver));\n            }\n        }\n        this.namespaceResolvers.add(resolver);\n        return addListener(resolver);\n    }\n\n    /**\n     * A {@link Reader} instance produced by a locator is immediately closed right after the template content is parsed.\n     *\n     * @param locator\n     * @return self\n     * @see Engine#getTemplate(String)\n     */\n    public EngineBuilder addLocator(TemplateLocator locator) {\n        this.locators.add(locator);","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/independent-projects/qute/core/src/main/java/io/quarkus/qute/EngineBuilder.java#L175-L211","documentation":"EngineBuilder.addNamespaceResolver() rejects registering two NamespaceResolvers for the same namespace with equal priority, since resolution would be ambiguous. It validates the namespace first, then scans existing resolvers before adding.","triggerScenarios":"Registering a second resolver whose getNamespace() equals an existing resolver's namespace and whose getPriority() equals the existing one, e.g. via addNamespaceResolver or setupNamespaceResolvers during engine construction.","commonSituations":"CDI EngineProducer discovering multiple resolver beans for a namespace (e.g. two custom 'loc' resolvers), copy-pasted extensions registering the built-in namespace, or two libraries both providing a resolver for the same namespace at default priority.","solutions":["Change your resolver's priority via NamespaceResolver.builder().priority(n) so it differs from the conflicting one","Remove the duplicate resolver registration (drop your custom bean if a built-in exists)","Use a different namespace for your custom resolver","Inspect all NamespaceResolver beans/registrations to find which two collide"],"exampleFix":"// before: same namespace and default priority as existing\nNamespaceResolver.builder().namespace(\"loc\").resolve(ctx -> ...).build();\n// after: give it a distinct priority\nNamespaceResolver.builder().namespace(\"loc\").priority(10).resolve(ctx -> ...).build();","handlingStrategy":"validation","validationCode":"String ns = resolver.getNamespace();\nboolean conflicts = engineBuilderKnownResolvers.stream().anyMatch(r ->\n    r.getNamespace().equals(ns) && r.getPriority() == resolver.getPriority());\nif (conflicts) {\n    resolver = NamespaceResolver.builder().namespace(ns).priority(resolver.getPriority() + 1)\n        .resolve(resolver).build();\n}","typeGuard":null,"tryCatchPattern":"try {\n    builder.addNamespaceResolver(resolver);\n} catch (IllegalArgumentException e) {\n    log.warn(\"Duplicate namespace resolver: {}\", e.getMessage());\n}","preventionTips":["Assign distinct priorities to custom resolvers of the same namespace","Avoid registering resolvers for built-in namespaces (loc, inject, etc.)","Enumerate NamespaceResolver beans in dev to spot duplicates","Own one namespace per library/feature"],"tags":["qute","templates","namespace-resolver","configuration"],"backgroundTag":"duplicate-namespace-resolver","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"}