{"record":{"id":"4ebb38136b10b906","repo":"FasterXML/jackson-databind","slug":"cannot-pass-null-deserializers","errorCode":null,"errorMessage":"Cannot pass null Deserializers","messagePattern":"Cannot pass null Deserializers","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/main/java/tools/jackson/databind/cfg/DeserializerFactoryConfig.java","lineNumber":93,"sourceCode":"    {\n        _additionalDeserializers = (allAdditionalDeserializers == null) ?\n                NO_DESERIALIZERS : allAdditionalDeserializers;\n        _additionalKeyDeserializers = (allAdditionalKeyDeserializers == null) ?\n                DEFAULT_KEY_DESERIALIZERS : allAdditionalKeyDeserializers;\n        _modifiers = (modifiers == null) ? NO_MODIFIERS : modifiers;\n        _valueInstantiators = (vi == null) ? NO_VALUE_INSTANTIATORS : vi;\n    }\n\n    /**\n     * Fluent/factory method used to construct a configuration object that\n     * has same deserializer providers as this instance, plus one specified\n     * as argument. Additional provider will be added before existing ones,\n     * meaning it has priority over existing definitions.\n     */\n    public DeserializerFactoryConfig withAdditionalDeserializers(Deserializers additional)\n    {\n        if (additional == null) {\n            throw new IllegalArgumentException(\"Cannot pass null Deserializers\");\n        }\n        Deserializers[] all = ArrayBuilders.insertInListNoDup(_additionalDeserializers, additional);\n        return new DeserializerFactoryConfig(all, _additionalKeyDeserializers, _modifiers,\n                _valueInstantiators);\n    }\n\n    /**\n     * Fluent/factory method used to construct a configuration object that\n     * has same key deserializer providers as this instance, plus one specified\n     * as argument. Additional provider will be added before existing ones,\n     * meaning it has priority over existing definitions.\n     */\n    public DeserializerFactoryConfig withAdditionalKeyDeserializers(KeyDeserializers additional)\n    {\n        if (additional == null) {\n            throw new IllegalArgumentException(\"Cannot pass null KeyDeserializers\");\n        }\n        KeyDeserializers[] all = ArrayBuilders.insertInListNoDup(_additionalKeyDeserializers, additional);","sourceCodeStart":75,"sourceCodeEnd":111,"githubUrl":"https://github.com/FasterXML/jackson-databind/blob/87876ca5c0569b4933aec2d30d6225e4b9ba3a43/src/main/java/tools/jackson/databind/cfg/DeserializerFactoryConfig.java#L75-L111","documentation":"Thrown by DeserializerFactoryConfig.withAdditionalDeserializers(Deserializers) when the argument is null. Deserializers providers are the mechanism by which modules and custom code register custom deserializers; a null provider would be silently ignored or cause NPEs later, so it is rejected at registration time.","triggerScenarios":"Calling deserializerFactoryConfig.withAdditionalDeserializers(null) directly, or more commonly via SimpleModule.addDeserializer() / SimpleModule.setDeserializerModifier() with internal wiring that resolves to a null Deserializers instance. Also possible via Module.setup() that has a bug returning null.","commonSituations":"Custom Jackson modules where a factory method or conditional returns null instead of a no-op implementation. Incomplete refactoring where a Deserializers field is left null. Third-party modules with bugs.","solutions":["Pass a non-null Deserializers instance. If you have nothing to add, do not call the method.","Use SimpleDeserializers (from SimpleModule) as a concrete non-null implementation even if empty.","Fix the upstream code that produced the null (e.g., a factory method that should return an empty set)."],"exampleFix":"// before\nDeserializers desers = maybeBuildDeserializers(); // returns null\nconfig.withAdditionalDeserializers(desers); // throws\n// after\nDeserializers desers = maybeBuildDeserializers();\nif (desers != null) {\n    config.withAdditionalDeserializers(desers);\n}","handlingStrategy":"validation","validationCode":"// Validate before calling\nif (deserializers == null) {\n    // skip registration or throw a clear error\n    throw new IllegalArgumentException(\"Deserializers provider must not be null\");\n}\nconfig.withAdditionalDeserializers(deserializers);","typeGuard":"boolean isNonNullProvider(Deserializers d) {\n    return d != null;\n}","tryCatchPattern":null,"preventionTips":["Use Objects.requireNonNull(d, \"deserializers\") before calling.","Guard conditional Deserializers construction with null checks.","Prefer SimpleDeserializers as an empty concrete type over null."],"tags":["deserializer-factory","module","null-check","configuration","custom-deserializer"],"backgroundTag":null,"analyzedSha":"87876ca5c0569b4933aec2d30d6225e4b9ba3a43","analyzedAt":"2026-08-11T12:55:24.033Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}