{"record":{"id":"4748bbf5117a2e25","repo":"alibaba/COLA","slug":"extension-not-found","errorCode":"EXTENSION_NOT_FOUND","errorMessage":"Can not find extension with ExtensionPoint: ${targetClz} BizScenario:${bizScenario.getUniqueIdentity()}","messagePattern":"Can not find extension with ExtensionPoint: (.+?) BizScenario:(.+?)","errorType":"error_code","errorClass":"ExtensionException","httpStatus":null,"severity":"error","filePath":"cola-components/cola-component-extension-starter/src/main/java/com/alibaba/cola/extension/ExtensionExecutor.java","lineNumber":77,"sourceCode":"        if (extension != null) {\n            return extension;\n        }\n\n        // second try with default scenario\n        extension = secondTry(targetClz, bizScenario);\n        if (extension != null) {\n            return extension;\n        }\n\n        // third try with default use case + default scenario\n        extension = defaultUseCaseTry(targetClz, bizScenario);\n        if (extension != null) {\n            return extension;\n        }\n\n        String errMessage = \"Can not find extension with ExtensionPoint: \" +\n                targetClz + \" BizScenario:\" + bizScenario.getUniqueIdentity();\n        throw new ExtensionException(EXTENSION_NOT_FOUND, errMessage);\n    }\n\n    /**\n     * first try with full namespace\n     * <p>\n     * example:  biz1.useCase1.scenario1\n     */\n    private <Ext> Ext firstTry(Class<Ext> targetClz, BizScenario bizScenario) {\n        logger.debug(\"First trying with \" + bizScenario.getUniqueIdentity());\n        return locate(targetClz.getName(), bizScenario.getUniqueIdentity());\n    }\n\n    /**\n     * second try with default scenario\n     * <p>\n     * example:  biz1.useCase1.#defaultScenario#\n     */\n    private <Ext> Ext secondTry(Class<Ext> targetClz, BizScenario bizScenario) {","sourceCodeStart":59,"sourceCodeEnd":95,"githubUrl":"https://github.com/alibaba/COLA/blob/352e1a867538d9cd40e1b11e4028fa652fc97557/cola-components/cola-component-extension-starter/src/main/java/com/alibaba/cola/extension/ExtensionExecutor.java#L59-L95","documentation":"ExtensionExecutor.locateExtension looks up an ExtensionPointI implementation in the extension repository for a given ExtensionCoordinate (extension point class + BizScenario unique identity). When no extension is registered under that coordinate, it throws ExtensionException with code EXTENSION_NOT_FOUND. COLA's extension component routes behavior by business identity, so this error means no implementation was registered for the requested (ExtensionPoint, BizScenario) combination.","triggerScenarios":"Calling ExtensionExecutor.execute/responseCode/locateExtension (directly or via `extension(...)`) with an ExtensionPointI interface and a BizScenario whose unique identity (bizId.useCase.scenario) has no registered @Extension implementation, and no fallback matching.","commonSituations":"BizScenario constructed with a typo or different casing than the @Extension annotation's bizId/useCase/scenario; extension bean not scanned by Spring (missing component scan or the @Extension class not annotated @Component); requesting a scenario that was never configured.","solutions":["Check the BizScenario value against the @Extension annotation's bizId/useCase/scenario on the implementing class — they must match exactly.","Ensure the extension class is a Spring bean (@Component + @Extension) and is in a scanned package.","Add a default/fallback extension registered under BizScenario.DEFAULT for unmatched scenarios.","Log the requested unique identity and list registered coordinates at startup to spot mismatches."],"exampleFix":"// before\nBizScenario scenario = BizScenario.valueOf(\"biz1\", \"useCase1\", \"scenario\");\n// after  (must match the @Extension annotation exactly)\n// @Extension(bizId = \"biz1\", useCase = \"useCase1\", scenario = \"scenario\")\nBizScenario scenario = BizScenario.valueOf(\"biz1\", \"useCase1\", \"scenario\");","handlingStrategy":"try-catch","validationCode":"if (extensionExecutor.locateExtension(ExtPt.class, bizScenario) == null) { /* use default scenario or error */ }","typeGuard":null,"tryCatchPattern":"try { return extensionExecutor.execute(ExtPt.class, bizScenario, ...); } catch (ExtensionException e) { if (\"EXTENSION_NOT_FOUND\".equals(e.getErrCode())) { return defaultBehavior(); } throw e; }","preventionTips":["Keep BizScenario strings in shared constants, never inline literals","Always register a DEFAULT-scenario fallback extension","Write an integration test resolving every expected bizId.useCase.scenario","Log all registered ExtensionCoordinates at startup and diff against expectations"],"tags":["java","cola","extension-point","not-registered","bizscenario"],"backgroundTag":"resource-not-found","analyzedSha":"352e1a867538d9cd40e1b11e4028fa652fc97557","analyzedAt":"2026-09-08T00:46:23.972Z","contentChangedAt":"2026-09-08T00:46:23.972Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}