{"record":{"id":"8705f532dfd327c5","repo":"eclipse-vertx/vert.x","slug":"already-a-codec-registered-with-name","errorCode":null,"errorMessage":"Already a codec registered with name ","messagePattern":"Already a codec registered with name ","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"vertx-core/src/main/java/io/vertx/core/eventbus/impl/CodecManager.java","lineNumber":133,"sourceCode":"        }\n      }\n    }\n    if (codec == null) {\n      throw new IllegalArgumentException(\"No message codec for type: \" + body.getClass());\n    }\n    return codec;\n  }\n\n  public MessageCodec getCodec(String codecName) {\n    return userCodecMap.get(codecName);\n  }\n\n  public void registerCodec(MessageCodec codec) {\n    Objects.requireNonNull(codec, \"codec\");\n    Objects.requireNonNull(codec.name(), \"code.name()\");\n    checkSystemCodec(codec);\n    if (userCodecMap.containsKey(codec.name())) {\n      throw new IllegalStateException(\"Already a codec registered with name \" + codec.name());\n    }\n    userCodecMap.put(codec.name(), codec);\n  }\n\n  public void unregisterCodec(String name) {\n    Objects.requireNonNull(name);\n    userCodecMap.remove(name);\n  }\n\n  public <T> void registerDefaultCodec(Class<T> clazz, MessageCodec<T, ?> codec) {\n    Objects.requireNonNull(clazz);\n    Objects.requireNonNull(codec, \"codec\");\n    Objects.requireNonNull(codec.name(), \"code.name()\");\n    checkSystemCodec(codec);\n    if (defaultCodecMap.containsKey(clazz)) {\n      throw new IllegalStateException(\"Already a default codec registered for class \" + clazz);\n    }\n    if (userCodecMap.containsKey(codec.name())) {","sourceCodeStart":115,"sourceCodeEnd":151,"githubUrl":"https://github.com/eclipse-vertx/vert.x/blob/fb308bd8c3f12c79f4ae89bef67fadf6c80d036e/vertx-core/src/main/java/io/vertx/core/eventbus/impl/CodecManager.java#L115-L151","documentation":"Event Bus message codecs must have unique names. CodecManager.registerCodec throws this IllegalStateException when a user codec with the same name() is already in the user codec map, preventing silent replacement of an existing codec. Register each codec name only once per Vertx instance.","triggerScenarios":"Calling vertx.eventBus().registerCodec(codec) when a codec whose name() equals codec.name() was previously registered, or registering the same codec instance twice.","commonSituations":"Re-deploying a verticle that registers codecs in its start() method against a shared Vertx; two libraries both registering a codec named 'mycodec'; test suites re-registering codecs per test without a fresh Vertx.","solutions":["Check if the codec name is already registered before calling registerCodec, or wrap the call in a guard using eventBus.codecResolver(codec.name()) != null style check / try-catch.","Register codecs only once per Vertx instance, e.g. in a shared bootstrap outside verticle deployment.","Use a unique codec name (namespaced like 'com.myapp.MyCodec') to avoid collisions with third-party codecs.","Create a new Vertx instance for isolated deployments/tests instead of reusing one."],"exampleFix":"// before\nbus.registerCodec(new MyCodec()); // throws on redeploy\n// after\nif (bus.codecResolver(\"mycodec\") == null) {\n  bus.registerCodec(new MyCodec());\n}","handlingStrategy":"try-catch","validationCode":"if (bus.codecResolver(myCodec.name()) == null) {\n  bus.registerCodec(myCodec);\n}","typeGuard":null,"tryCatchPattern":"try {\n  bus.registerCodec(codec);\n} catch (IllegalStateException e) {\n  // codec name already registered; treat as idempotent no-op\n}","preventionTips":["Register codecs in a single idempotent bootstrap step per Vertx instance","Use namespaced codec names to avoid third-party collisions","Never register codecs inside verticle start() on a shared Vertx"],"tags":["eventbus","codec","duplicate-registration","illegal-state"],"backgroundTag":"file-already-exists","analyzedSha":"fb308bd8c3f12c79f4ae89bef67fadf6c80d036e","analyzedAt":"2026-09-06T11:37:12.241Z","contentChangedAt":"2026-09-06T11:37:12.241Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}