{"record":{"id":"b43a00bcfaedfa61","repo":"FasterXML/jackson-databind","slug":"module-without-defined-version","errorCode":null,"errorMessage":"Module ({}) without defined version","messagePattern":"Module \\((.+?)\\) without defined version","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/main/java/tools/jackson/databind/cfg/MapperBuilder.java","lineNumber":1139,"sourceCode":"    {\n        _verifyModuleMetadata(module);\n        final Object moduleId = module.getRegistrationId();\n        if (_modules.containsKey(moduleId)) {\n            return;\n        }\n        for (JacksonModule dep : module.getDependencies()) {\n            _addDependency(dep);\n        }\n        _modules.put(moduleId, module);\n    }\n\n    private void _verifyModuleMetadata(JacksonModule module)\n    {\n        if (module.getModuleName() == null) {\n            throw new IllegalArgumentException(\"Module (\"+module.getClass().getName()+\") without defined name\");\n        }\n        if (module.version() == null) {\n            throw new IllegalArgumentException(\"Module (\"+module.getClass().getName()+\") without defined version\");\n        }\n    }\n\n    public B addModules(JacksonModule... modules)\n    {\n        for (JacksonModule module : modules) {\n            addModule(module);\n        }\n        return _this();\n    }\n\n    public B addModules(Iterable<? extends JacksonModule> modules)\n    {\n        for (JacksonModule module : modules) {\n            addModule(module);\n        }\n        return _this();\n    }","sourceCodeStart":1121,"sourceCodeEnd":1157,"githubUrl":"https://github.com/FasterXML/jackson-databind/blob/a50c7d2a1d57234ac4adf70dbd88ac90db6436e4/src/main/java/tools/jackson/databind/cfg/MapperBuilder.java#L1121-L1157","documentation":"Thrown by MapperBuilder._verifyModuleMetadata when a Jackson module being registered has a null version(). Every module is validated (name AND version) because version metadata drives diagnostics, ordering, and dependency resolution. A null version means the module implementation is incomplete.","triggerScenarios":"Calling mapperBuilder.addModule(module)/addModules(...) with a custom JacksonModule whose version() returns null. Also triggered transitively via module.getDependencies() when a dependency module returns a null version.","commonSituations":"Hand-rolled JacksonModule subclass where getModuleName() was overridden but version() was forgotten or left returning null; copy-pasted module skeleton; migration from a base class that previously supplied a default Version.","solutions":["Override version() to return a non-null Version, e.g. new Version(1, 0, 0, null, \"com.example\", \"my-module\"); use Version.unknownVersion() during early development.","If extending SimpleModule, pass name and version via super(name, version) so both are populated together.","Add a unit test asserting module.version() != null and module.getModuleName() != null before the module reaches a mapper builder."],"exampleFix":"// before\npublic class MyModule extends JacksonModule {\n    @Override public String getModuleName() { return \"MyModule\"; }\n    @Override public Version version() { return null; } // throws\n}\n// after\npublic class MyModule extends JacksonModule {\n    @Override public String getModuleName() { return \"MyModule\"; }\n    @Override public Version version() {\n        return new Version(1, 0, 0, null, \"com.example\", \"my-module\");\n    }\n}","handlingStrategy":"validation","validationCode":"JacksonModule module = new MyModule();\nif (module.version() == null || module.getModuleName() == null) {\n    throw new IllegalStateException(\"Module \" + module.getClass().getName()\n        + \" must define both name and version before registration\");\n}\nmapperBuilder.addModule(module);","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always override both getModuleName() and version() together in custom modules.","Prefer extending SimpleModule and passing name+version to super(...) over raw JacksonModule.","Assert module.version() != null in a unit test before wiring the module."],"tags":["module","configuration","version"],"analyzedSha":"a50c7d2a1d57234ac4adf70dbd88ac90db6436e4","analyzedAt":"2026-08-06T20:31:51.404Z","schemaVersion":2},"datasetVersion":"2026-08-07T02:17:10.218Z"}