{"record":{"id":"540a83647c0b3d79","repo":"alibaba/canal","slug":"dbmapping-database-540a83","errorCode":null,"errorMessage":"dbMapping.database","messagePattern":"dbMapping\\.database","errorType":"validation","errorClass":"NullPointerException","httpStatus":null,"severity":"error","filePath":"client-adapter/phoenix/src/main/java/com/alibaba/otter/canal/client/adapter/phoenix/config/MappingConfig.java","lineNumber":79,"sourceCode":"    public String getDestination() {\n        return destination;\n    }\n\n    public void setDestination(String destination) {\n        this.destination = destination;\n    }\n\n    public boolean isDebug() {\n        return debug;\n    }\n\n    public void setDebug(boolean debug) {\n        this.debug = debug;\n    }\n\n    public void validate() {\n        if (dbMapping.database == null || dbMapping.database.isEmpty()) {\n            throw new NullPointerException(\"dbMapping.database\");\n        }\n        if ((dbMapping.table == null || dbMapping.table.isEmpty())) {\n            throw new NullPointerException(\"dbMapping.table\");\n        }\n        if ((dbMapping.targetTable == null || dbMapping.targetTable.isEmpty())) {\n            throw new NullPointerException(\"dbMapping.targetTable\");\n        }\n    }\n\n    public static class DbMapping {\n\n        private String database;                            // 数据库名或schema名\n        private String table;                               // 表名\n        private Map<String, String> targetPk = new LinkedHashMap<>(); // 目标表主键字段\n        private boolean mapAll = true;                      // 映射所有字段\n\n        private boolean alter = true;                       // 是否允许修改表\n        private boolean drop = false;                       // 是否允许删除字段","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/alibaba/canal/blob/87be50e87686a3e8af08c368d0e1ffd1f59eb04a/client-adapter/phoenix/src/main/java/com/alibaba/otter/canal/client/adapter/phoenix/config/MappingConfig.java#L61-L97","documentation":"Thrown by phoenix MappingConfig.validate() when dbMapping.database is null or empty. Validation runs during config load, so it fails at adapter startup. database is the source schema name used to match incoming events.","triggerScenarios":"A phoenix mapping yml parses but its dbMapping block omits or blanks 'database:'.","commonSituations":"A copied template had 'database:' deleted, or indentation places 'database' outside the dbMapping block.","solutions":["Add a non-empty 'database:' under dbMapping in the failing phoenix 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(\"phoenix yml missing dbMapping.database for \" + fileName);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Start new phoenix yml files from phoenix/phoenixtest_user.yml which has database/table/targetTable.","Lint phoenix yml files in CI."],"tags":["phoenix","config-validation","canal","yaml"],"backgroundTag":null,"analyzedSha":"87be50e87686a3e8af08c368d0e1ffd1f59eb04a","analyzedAt":"2026-08-14T04:30:11.918Z","schemaVersion":2},"datasetVersion":"2026-08-14T05:17:29.042Z"}