{"record":{"id":"909c3def6b0e0b40","repo":"apereo/cas","slug":"registered-service-template-definition-cannot","errorCode":null,"errorMessage":"Registered service template definition [{}] cannot be found and is not applicable to [{}]","messagePattern":"Registered service template definition \\[(.+?)\\] cannot be found and is not applicable to \\[(.+?)\\]","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"core/cas-server-core-services-registry/src/main/java/org/apereo/cas/services/DefaultRegisteredServicesTemplatesManager.java","lineNumber":57,"sourceCode":"            ? FileUtils.listFiles(location.getFile(), new String[]{\"json\"}, true)\n            : new ArrayList<>());\n        LOGGER.trace(\"Found [{}] template registered service definition(s)\", templateDefinitionFiles.size());\n    }\n\n    @Override\n    public RegisteredService apply(final RegisteredService registeredService) {\n        if (templateDefinitionFiles.isEmpty() || StringUtils.isBlank(registeredService.getTemplateName())) {\n            LOGGER.trace(\"Registered service template directory contains no template definitions, \"\n                         + \"or registered service [{}] does specify template name(s)\", registeredService.getName());\n            return registeredService;\n        }\n\n        RegisteredService mergeResult = null;\n        val templateNames = org.springframework.util.StringUtils.commaDelimitedListToStringArray(registeredService.getTemplateName().trim());\n        for (val templateName : templateNames) {\n            val templateDefinition = locateTemplateServiceDefinition(registeredService, templateName);\n            if (templateDefinition.isEmpty()) {\n                LOGGER.warn(\"Registered service template definition [{}] cannot be found and is not applicable to [{}]\",\n                    templateName, registeredService.getName());\n            } else {\n                val templateService = templateDefinition.get();\n                LOGGER.trace(\"Applying template service definition [{}] to service [{}]\", templateService, registeredService.getName());\n                mergeResult = registeredServiceSerializer.merge(templateService, Objects.requireNonNullElse(mergeResult, registeredService));\n                LOGGER.debug(\"Resulting service definition after merging with template [{}] is:\\n[{}]\",\n                    templateService.getTemplateName(), mergeResult);\n            }\n        }\n        return Objects.requireNonNullElse(mergeResult, registeredService);\n    }\n\n    private Optional<RegisteredService> locateTemplateServiceDefinition(final RegisteredService registeredService,\n                                                                        final String templateName) {\n        val scriptFactory = ExecutableCompiledScriptFactory.getExecutableCompiledScriptFactory();\n        return templateDefinitionFiles\n            .stream()\n            .filter(_ -> CasRuntimeHintsRegistrar.notInNativeImage())","sourceCodeStart":39,"sourceCodeEnd":75,"githubUrl":"https://github.com/apereo/cas/blob/e7288fc434b4f4505b8452e1a57e8fb3111bb863/core/cas-server-core-services-registry/src/main/java/org/apereo/cas/services/DefaultRegisteredServicesTemplatesManager.java#L39-L75","documentation":"DefaultRegisteredServicesTemplatesManager.apply merges template service definitions into a registered service that declares templateName. When a referenced template cannot be located via locateTemplateServiceDefinition, CAS only logs a warning — the template is skipped and the service is used without that template's settings. This is not thrown but signals a misconfigured or missing template definition.","triggerScenarios":"apply() iterates comma-delimited templateName values on a RegisteredService and locateTemplateServiceDefinition finds no matching service definition for one of the names — template service missing from the registry, wrong template name (case/whitespace), template defined in a registry not consulted for template lookup, or circular/self-referencing template excluded.","commonSituations":"Copy-pasted templateName that doesn't match any registered service's name/id; template service stored in a different registry environment; template referenced before its defining service was loaded; renaming a template service without updating dependents.","solutions":["Verify the templateName exactly matches an existing registered service that serves as the template (name/lookup key)","Register the missing template service definition in the same registry CAS consults","Check logs for which template names resolved; fix typos and stray whitespace in comma-delimited lists","After fixing, reload the service registry or restart so dependent services re-merge with their templates"],"exampleFix":"// before\n// \"templateName\":\"base-saml-template\"  // no such template registered\n// after\n// \"templateName\":\"saml-base-template\"   // matches registered template service","handlingStrategy":"validation","validationCode":"Optional<RegisteredService> tpl = locateTemplateServiceDefinition(service, templateName);\nif (tpl.isEmpty()) {\n    LOGGER.error(\"Template [{}] missing for service [{}]\", templateName, service.getName());\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Verify templateName strings match registered template services exactly","Keep template definitions in the same registry environment as dependents","Rename templates atomically: register new name, update dependents, remove old","Watch for the 'cannot be found and is not applicable' warning after deployments"],"tags":["service-template","service-registry","merge","configuration"],"backgroundTag":"resource-not-found","analyzedSha":"e7288fc434b4f4505b8452e1a57e8fb3111bb863","analyzedAt":"2026-09-08T15:39:16.015Z","contentChangedAt":"2026-09-08T15:39:16.015Z","schemaVersion":2},"datasetVersion":"2026-09-15T23:17:13.987Z"}