{"record":{"id":"b7034218d8b5b9f6","repo":"alibaba/canal","slug":"dbmapping-database-b70342","errorCode":null,"errorMessage":"dbMapping.database","messagePattern":"dbMapping\\.database","errorType":"validation","errorClass":"NullPointerException","httpStatus":null,"severity":"error","filePath":"client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/config/MappingConfig.java","lineNumber":84,"sourceCode":"    public void setDbMapping(DbMapping dbMapping) {\n        this.dbMapping = dbMapping;\n    }\n\n    public String getDestination() {\n        return destination;\n    }\n\n    public void setDestination(String destination) {\n        this.destination = destination;\n    }\n\n    public AdapterMapping getMapping() {\n        return dbMapping;\n    }\n\n    public void validate() {\n        if (dbMapping.database == null || dbMapping.database.isEmpty()) {\n            throw new NullPointerException(\"dbMapping.database\");\n        }\n        if (!dbMapping.getMirrorDb() && (dbMapping.table == null || dbMapping.table.isEmpty())) {\n            throw new NullPointerException(\"dbMapping.table\");\n        }\n        if (!dbMapping.getMirrorDb() && (dbMapping.targetTable == null || dbMapping.targetTable.isEmpty())) {\n            throw new NullPointerException(\"dbMapping.targetTable\");\n        }\n    }\n\n    public static class DbMapping implements AdapterMapping {\n\n        private boolean             mirrorDb        = false;                 // 是否镜像库\n        private String              database;                                // 数据库名或schema名\n        private String              table;                                   // 表名\n        private Map<String, String> targetPk        = new LinkedHashMap<>(); // 目标表主键字段\n        private boolean             mapAll          = false;                 // 映射所有字段\n        private String              targetDb;                                // 目标库名\n        private String              targetTable;                             // 目标表名","sourceCodeStart":66,"sourceCodeEnd":102,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/client-adapter/rdb/src/main/java/com/alibaba/otter/canal/client/adapter/rdb/config/MappingConfig.java#L66-L102","documentation":"Thrown by rdb MappingConfig.validate() when dbMapping.database is null or empty. Validation runs during config load at adapter startup. database is the source schema name used to route events and is required even for mirrorDb mode.","triggerScenarios":"An rdb mapping yml parses but its dbMapping block omits or blanks 'database:'.","commonSituations":"A copied template had 'database:' removed, or indentation places 'database' outside the dbMapping block.","solutions":["Add a non-empty 'database:' under dbMapping in the failing rdb yml.","Fix indentation so 'database' is a child of dbMapping."],"exampleFix":"# before\ndbMapping:\n  table: user\n# after\ndbMapping:\n  database: mytest\n  table: user","handlingStrategy":"validation","validationCode":"DbMapping m = config.getDbMapping();\nif (m == null || m.getDatabase() == null || m.getDatabase().isEmpty()) {\n    throw new IllegalArgumentException(\"rdb yml missing dbMapping.database for \" + fileName);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["database is always required for rdb (even mirrorDb); start from rdb/mytest_user.yml.","Lint rdb yml files in CI."],"tags":["rdb","config-validation","canal","yaml"],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}