{"record":{"id":"138e5094ccfefa14","repo":"redis/jedis","slug":"databaseclientconfigs-must-not-contain-null-elemen","errorCode":null,"errorMessage":"DatabaseClientConfigs must not contain null elements","messagePattern":"DatabaseClientConfigs must not contain null elements","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"src/main/java/redis/clients/jedis/MultiDbConfig.java","lineNumber":683,"sourceCode":"   * Constructs a new MultiDbConfig with the specified database configurations.\n   * <p>\n   * This constructor validates that at least one database configuration is provided and that all\n   * configurations are non-null. Use the {@link Builder} class for more convenient configuration\n   * with default values.\n   * </p>\n   * @param databaseConfigs array of database configurations defining the available Redis endpoints\n   * @throws JedisValidationException if databaseConfigs is null or empty\n   * @throws IllegalArgumentException if any database configuration is null\n   * @see Builder#Builder(DatabaseConfig[])\n   */\n  public MultiDbConfig(DatabaseConfig[] databaseConfigs) {\n\n    if (databaseConfigs == null || databaseConfigs.length < 1) throw new JedisValidationException(\n        \"DatabaseClientConfigs are required for MultiDbConnectionProvider\");\n\n    for (DatabaseConfig databaseConfig : databaseConfigs) {\n      if (databaseConfig == null)\n        throw new IllegalArgumentException(\"DatabaseClientConfigs must not contain null elements\");\n    }\n    this.databaseConfigs = databaseConfigs;\n  }\n\n  /**\n   * Returns the array of database configurations defining available Redis endpoints.\n   * @return array of database configurations, never null or empty\n   */\n  public DatabaseConfig[] getDatabaseConfigs() {\n    return databaseConfigs;\n  }\n\n  /**\n   * Returns the encapsulated retry configuration for command execution.\n   * <p>\n   * This provides access to all retry-related settings through a single configuration object.\n   * </p>\n   * @return retry configuration, never null","sourceCodeStart":665,"sourceCodeEnd":701,"githubUrl":"https://github.com/redis/jedis/blob/6dac31d4c224fb3257c216f3985340c6f500cdcb/src/main/java/redis/clients/jedis/MultiDbConfig.java#L665-L701","documentation":"After the null/empty check, MultiDbConfig's constructor iterates the array and rejects any null element with IllegalArgumentException(\"DatabaseClientConfigs must not contain null elements\"), since a null slot cannot define a usable database.","triggerScenarios":"new MultiDbConfig(new DatabaseConfig[]{cfg1, null, cfg3}) — building the array by index or from a collection converted with toArray on a sized-but-partially-filled array, leaving null slots.","commonSituations":"Arrays pre-allocated with a fixed size but only partially populated; optional database configs filtered out but null placeholders left behind; deserializing config lists with missing entries.","solutions":["Filter out null elements before constructing MultiDbConfig","Use a List and toArray(new DatabaseConfig[0]) to avoid trailing/interior nulls from pre-sized arrays","Validate each element is non-null when assembling the array"],"exampleFix":"// before\nDatabaseConfig[] cfgs = new DatabaseConfig[3];\ncfgs[0] = db1; cfgs[2] = db3; // cfgs[1] is null\nMultiDbConfig config = new MultiDbConfig(cfgs); // IllegalArgumentException\n// after\nList<DatabaseConfig> list = new ArrayList<>();\nlist.add(db1); list.add(db3);\nMultiDbConfig config = new MultiDbConfig(list.toArray(new DatabaseConfig[0]));","handlingStrategy":"validation","validationCode":"for (DatabaseConfig c : databaseConfigs) {\n  Objects.requireNonNull(c, \"DatabaseClientConfigs must not contain null elements\");\n}","typeGuard":"boolean allNonNull(DatabaseConfig[] cfgs) {\n  return Arrays.stream(cfgs).allMatch(Objects::nonNull);\n}","tryCatchPattern":null,"preventionTips":["Build arrays from collections with toArray(new DatabaseConfig[0]) rather than pre-sized arrays","Filter nulls (stream.filter(Objects::nonNull)) when configs are optional","Add a defensive null-element check in your config assembly code"],"tags":["redis","multi-db","config-validation","null-element"],"backgroundTag":"invalid-constructor-argument","analyzedSha":"6dac31d4c224fb3257c216f3985340c6f500cdcb","analyzedAt":"2026-09-08T04:55:01.204Z","contentChangedAt":"2026-09-08T04:55:01.204Z","schemaVersion":2},"datasetVersion":"2026-09-16T04:17:20.429Z"}