FasterXML/jackson-databind · error · IllegalArgumentException

Module ( ) without defined name

Error message

Module ({}) without defined name

What it means

Thrown by MapperBuilder._verifyModuleMetadata when a JacksonModule being added has getModuleName() returning null. Every module must declare a non-null name (alongside a version) so Jackson can register, de-duplicate, and report it; a null name breaks module identity and is rejected when the module or any of its dependencies is added.

Solutions

  1. Override getModuleName() in your JacksonModule to return a stable non-null String (typically the module's symbolic name).
  2. Prefer constructing SimpleModule with the (name, version) constructor which sets both fields, instead of subclassing JacksonModule directly.
  3. If the failing module is a dependency (getDependencies()), fix or exclude that dependency module.

Example fix

// before
public class MyModule extends JacksonModule {
    @Override public Version version() { return PackageVersion.VERSION; }
    // getModuleName() missing -> returns null
}

// after
public class MyModule extends JacksonModule {
    @Override public String getModuleName() { return "MyModule"; }
    @Override public Version version() { return PackageVersion.VERSION; }
}
Defensive patterns

Strategy: validation

Validate before calling

JacksonModule module = ...;
if (module.getModuleName() == null || module.version() == null) {
    throw new IllegalStateException("Module missing name/version: " + module.getClass());
}
builder.addModule(module);

Prevention

When it happens

Trigger: Calling JsonMapper.builder().addModule(module) (or addModules / module dependency resolution) where module.getModuleName() == null. Triggered for the module itself and recursively for any module returned by getDependencies().

Common situations: Hand-writing a JacksonModule subclass and forgetting to override getModuleName(); porting a 2.x module where the name was set via the SimpleModule constructor but the new subclass drops it; a third-party/SPI-loaded module (ServiceLoader) that is incomplete.

Related errors


AI-assisted analysis of FasterXML/jackson-databind@87876ca5c0 (2026-08-11). Data as JSON: /api/errors/8b389f41ec9b142b. Report an issue: GitHub.

Appendix: source

Thrown at src/main/java/tools/jackson/databind/cfg/MapperBuilder.java:1136

    }

    private void _addDependency(JacksonModule module)
    {
        _verifyModuleMetadata(module);
        final Object moduleId = module.getRegistrationId();
        if (_modules.containsKey(moduleId)) {
            return;
        }
        for (JacksonModule dep : module.getDependencies()) {
            _addDependency(dep);
        }
        _modules.put(moduleId, module);
    }

    private void _verifyModuleMetadata(JacksonModule module)
    {
        if (module.getModuleName() == null) {
            throw new IllegalArgumentException("Module ("+module.getClass().getName()+") without defined name");
        }
        if (module.version() == null) {
            throw new IllegalArgumentException("Module ("+module.getClass().getName()+") without defined version");
        }
    }

    public B addModules(JacksonModule... modules)
    {
        for (JacksonModule module : modules) {
            addModule(module);
        }
        return _this();
    }

    public B addModules(Iterable<? extends JacksonModule> modules)
    {
        for (JacksonModule module : modules) {
            addModule(module);

View on GitHub (pinned to 87876ca5c0)