{"record":{"id":"1f7471bf51c31cc9","repo":"quarkusio/quarkus","slug":"the-namespace-s-is-defined-by-multiple-templat","errorCode":null,"errorMessage":"The namespace [%s] is defined by multiple @TemplateData and/or @TemplateEnum annotations; make sure the annotation declared on the following classes do not collide:\n\t- <targets>","messagePattern":"The namespace \\[(.+?)\\] is defined by multiple @TemplateData and/or @TemplateEnum annotations; make sure the annotation declared on the following classes do not collide:\n\t- <targets>","errorType":"exception","errorClass":"io.quarkus.qute.TemplateException","httpStatus":null,"severity":"error","filePath":"extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java","lineNumber":3666,"sourceCode":"            }\n            templateDataAnnotations.produce(new TemplateDataBuildItem(\n                    new TemplateDataBuilder().annotationTarget(templateEnum.target()).namespace(TemplateData.SIMPLENAME)\n                            .build(),\n                    targetEnum));\n        }\n\n    }\n\n    @BuildStep\n    void validateTemplateDataNamespaces(List<TemplateDataBuildItem> templateData,\n            BuildProducer<ServiceStartBuildItem> serviceStart) {\n\n        Map<String, List<TemplateDataBuildItem>> namespaceToData = templateData.stream()\n                .filter(TemplateDataBuildItem::hasNamespace)\n                .collect(Collectors.groupingBy(TemplateDataBuildItem::getNamespace));\n        for (Map.Entry<String, List<TemplateDataBuildItem>> e : namespaceToData.entrySet()) {\n            if (e.getValue().size() > 1) {\n                throw new TemplateException(\n                        String.format(\n                                \"The namespace [%s] is defined by multiple @TemplateData and/or @TemplateEnum annotations; make sure the annotation declared on the following classes do not collide:\\n\\t- %s\",\n                                e.getKey(), e.getValue()\n                                        .stream().map(TemplateDataBuildItem::getAnnotationInstance)\n                                        .map(AnnotationInstance::target).map(Object::toString)\n                                        .collect(Collectors.joining(\"\\n\\t- \"))));\n            }\n        }\n    }\n\n    @BuildStep\n    AutoAddScopeBuildItem addSingletonToNamedRecords() {\n        return AutoAddScopeBuildItem.builder()\n                .isAnnotatedWith(DotName.createSimple(Named.class))\n                .and(this::isRecord)\n                .defaultScope(BuiltinScope.SINGLETON)\n                .reason(\"Found Java record annotated with @Named\")\n                .build();","sourceCodeStart":3648,"sourceCodeEnd":3684,"githubUrl":"https://github.com/quarkusio/quarkus/blob/e1c734241f34c7919086ceb4c9262b4a58f6de44/extensions/qute/deployment/src/main/java/io/quarkus/qute/deployment/QuteProcessor.java#L3648-L3684","documentation":"Thrown when the same namespace is declared by more than one @TemplateData or @TemplateEnum annotation. Qute maps a namespace to exactly one annotated target class so template expressions like {ns:member} resolve unambiguously.","triggerScenarios":"Two classes annotated with @TemplateEnum(value=\"configs\") or @TemplateData(namespace=\"configs\"); a @TemplateData namespace colliding with a @TemplateEnum namespace; introducing a new namespace string that already exists on another class.","commonSituations":"Grouping enums and value classes under one intuitive namespace name like 'time' or 'fmt'; copy-pasting a namespace string across classes; adding a @TemplateData for a class already covered by a shared library annotation with the same namespace.","solutions":["Rename the namespace in one of the annotations so each namespace maps to a single class","Merge the annotated classes' needed members into one class and keep one namespace declaration","Drop the redundant annotation if both declare the same intent","Check dependencies' @TemplateData/@TemplateEnum namespaces before choosing a new namespace name"],"exampleFix":"// before\n@TemplateEnum(value=\"cfg\") enum A { }\n@TemplateData(namespace=\"cfg\") class B { }\n\n// after\n@TemplateEnum(value=\"cfg\") enum A { }\n@TemplateData(namespace=\"cfg2\") class B { }","handlingStrategy":"validation","validationCode":"// Ensure no namespace is claimed by more than one @TemplateData/@TemplateEnum\nSet<String> seen = new HashSet<>();\nfor (String ns : allNamespaces) {\n    if (!seen.add(ns)) { throw new IllegalStateException(\"Namespace reused: \" + ns); }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep a registry of namespace strings used in the project","Use unique, app-prefixed namespace names","Before choosing a namespace, grep for it in @TemplateData and @TemplateEnum usages"],"tags":["quarkus","qute","namespace-collision","template-data"],"backgroundTag":"namespace-collision","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"}