{"record":{"id":"2b41366af9577005","repo":"alibaba/canal","slug":"duplicate-extension-name-on-and","errorCode":null,"errorMessage":"Duplicate extension {} name {} on {} and {}","messagePattern":"Duplicate extension (.+?) name (.+?) on (.+?) and (.+?)","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/ExtensionLoader.java","lineNumber":362,"sourceCode":"                                                                + \"), class \" + clazz.getName()\n                                                                + \"is not subtype of interface.\");\n                                            } else {\n                                                try {\n                                                    clazz.getConstructor(type);\n                                                } catch (NoSuchMethodException e) {\n                                                    clazz.getConstructor();\n                                                    String[] names = NAME_SEPARATOR.split(name);\n                                                    if (names != null && names.length > 0) {\n                                                        for (String n : names) {\n                                                            if (!cachedNames.containsKey(clazz)) {\n                                                                cachedNames.put(clazz, n);\n                                                            }\n                                                            Class<?> c = extensionClasses.get(n);\n                                                            if (c == null) {\n                                                                extensionClasses.put(n, clazz);\n                                                            } else if (c != clazz) {\n                                                                cachedNames.remove(clazz);\n                                                                throw new IllegalStateException(\n                                                                        \"Duplicate extension \" + type.getName() + \" name \"\n                                                                                + n + \" on \"\n                                                                                + c.getName() + \" and \"\n                                                                                + clazz.getName());\n                                                            }\n                                                        }\n                                                    }\n                                                }\n                                            }\n                                        }\n                                    } catch (Throwable t) {\n                                        IllegalStateException e = new IllegalStateException(\n                                                \"Failed to load extension class(interface: \" + type + \", class line: \"\n                                                        + line + \") in \" + url\n                                                        + \", cause: \"\n                                                        + t.getMessage(),\n                                                t);\n                                        exceptions.put(line, e);","sourceCodeStart":344,"sourceCodeEnd":380,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/ExtensionLoader.java#L344-L380","documentation":"Error \"Duplicate extension {} name {} on {} and {}\" thrown in alibaba/canal.","triggerScenarios":"Thrown at client-adapter/common/src/main/java/com/alibaba/otter/canal/client/adapter/support/ExtensionLoader.java:362 when the library encounters an invalid state.","commonSituations":"Duplicate extension name across two classes. Enforce uniqueness of extension names at load time; last-one-wins silently would make behavior order-dependent.","solutions":["Rename one of the conflicting extension implementations so each name is unique per extension point.","Remove duplicate adapter jars from the classpath that register the same extension name."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}