{"record":{"id":"c6fb7f065d866ee6","repo":"provectus/kafka-ui","slug":"multiple-serdes-with-same-name-serdeconfig-getn","errorCode":null,"errorMessage":"Multiple serdes with same name: ${serdeConfig.getName()}","messagePattern":"Multiple serdes with same name: (.+?)","errorType":"validation","errorClass":"ValidationException","httpStatus":null,"severity":"error","filePath":"kafka-ui-api/src/main/java/com/provectus/kafka/ui/serdes/SerdesInitializer.java","lineNumber":104,"sourceCode":"  public ClusterSerdes init(Environment env,\n                            ClustersProperties clustersProperties,\n                            int clusterIndex) {\n    ClustersProperties.Cluster clusterProperties = clustersProperties.getClusters().get(clusterIndex);\n    log.debug(\"Configuring serdes for cluster {}\", clusterProperties.getName());\n\n    var globalPropertiesResolver = new PropertyResolverImpl(env);\n    var clusterPropertiesResolver = new PropertyResolverImpl(env, \"kafka.clusters.\" + clusterIndex);\n\n    Map<String, SerdeInstance> registeredSerdes = new LinkedHashMap<>();\n    // initializing serdes from config\n    if (clusterProperties.getSerde() != null) {\n      for (int i = 0; i < clusterProperties.getSerde().size(); i++) {\n        SerdeConfig serdeConfig = clusterProperties.getSerde().get(i);\n        if (Strings.isNullOrEmpty(serdeConfig.getName())) {\n          throw new ValidationException(\"'name' property not set for serde: \" + serdeConfig);\n        }\n        if (registeredSerdes.containsKey(serdeConfig.getName())) {\n          throw new ValidationException(\"Multiple serdes with same name: \" + serdeConfig.getName());\n        }\n        var instance = createSerdeFromConfig(\n            serdeConfig,\n            new PropertyResolverImpl(env, \"kafka.clusters.\" + clusterIndex + \".serde.\" + i + \".properties\"),\n            clusterPropertiesResolver,\n            globalPropertiesResolver\n        );\n        registeredSerdes.put(serdeConfig.getName(), instance);\n      }\n    }\n\n    // initializing remaining built-in serdes with empty selection patters\n    builtInSerdeClasses.forEach((name, clazz) -> {\n      if (!registeredSerdes.containsKey(name)) {\n        BuiltInSerde serde = createSerdeInstance(clazz);\n        if (autoConfigureSerde(serde, clusterPropertiesResolver, globalPropertiesResolver)) {\n          registeredSerdes.put(name, new SerdeInstance(name, serde, null, null, null));\n        }","sourceCodeStart":86,"sourceCodeEnd":122,"githubUrl":"https://github.com/provectus/kafka-ui/blob/83b5a60cc08501b570a0c4d0b4cdfceb1b88d6b7/kafka-ui-api/src/main/java/com/provectus/kafka/ui/serdes/SerdesInitializer.java#L86-L122","documentation":"SerdesInitializer registers serdes into a name-keyed map and rejects duplicates. Two serde entries with the same name within one cluster are ambiguous (name is the lookup key), so the second occurrence throws ValidationException('Multiple serdes with same name: <name>').","triggerScenarios":"Two entries under kafka.clusters.<n>.serde share the same 'name' value; init fails when the second one is processed.","commonSituations":"Copy-pasting a serde block and forgetting to change the name; YAML list accidentally containing the same entry twice after a merge conflict resolution.","solutions":["Rename one of the duplicate serde entries to a unique name","Remove the redundant duplicate entry from the config","Check for duplicated blocks introduced by config merge/override"],"exampleFix":"// before\nserde:\n  - name: my-serde\n    className: com.example.MySerde\n  - name: my-serde\n    className: com.example.OtherSerde\n// after\nserde:\n  - name: my-serde\n    className: com.example.MySerde\n  - name: other-serde\n    className: com.example.OtherSerde","handlingStrategy":"validation","validationCode":"Set<String> seen = new HashSet<>();\nfor (SerdeConfig s : clusterProperties.getSerde()) {\n  if (!seen.add(s.getName()))\n    throw new IllegalArgumentException(\"Duplicate serde name: \" + s.getName());\n}","typeGuard":null,"tryCatchPattern":"try {\n  serdes = initializer.init(...);\n} catch (ValidationException e) {\n  log.error(\"Duplicate serde names: {}\", e.getMessage());\n  throw e;\n}","preventionTips":["Enforce unique serde names per cluster","Review duplicated YAML blocks after merges","Generate serde entries from templates that inject unique names"],"tags":["serde","config","validation","duplicate"],"backgroundTag":"conflicting-config-options","analyzedSha":"83b5a60cc08501b570a0c4d0b4cdfceb1b88d6b7","analyzedAt":"2026-09-08T04:35:39.002Z","contentChangedAt":"2026-09-08T04:35:39.002Z","schemaVersion":2},"datasetVersion":"2026-09-16T09:17:16.951Z"}