{"record":{"id":"1a992e85bff3b6bb","repo":"apache/seatunnel","slug":"no-data-type-converter-found-for-identifier-ide","errorCode":null,"errorMessage":"No data type converter found for identifier: ${identifier}","messagePattern":"No data type converter found for identifier: (.+?)","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/ConverterLoader.java","lineNumber":40,"sourceCode":"import java.util.List;\nimport java.util.ServiceLoader;\n\npublic class ConverterLoader {\n\n    public static DataTypeConverter<?> loadDataTypeConverter(String identifier) {\n        return loadDataTypeConverter(identifier, Thread.currentThread().getContextClassLoader());\n    }\n\n    public static DataTypeConverter<?> loadDataTypeConverter(\n            String identifier, ClassLoader classLoader) {\n        List<DataTypeConverter> converters =\n                discoverConverters(DataTypeConverter.class, classLoader);\n        for (DataTypeConverter dataTypeConverter : converters) {\n            if (dataTypeConverter.identifier().equals(identifier)) {\n                return dataTypeConverter;\n            }\n        }\n        throw new IllegalArgumentException(\n                \"No data type converter found for identifier: \" + identifier);\n    }\n\n    public static DataConverter<?> loadDataConverter(String identifier) {\n        return loadDataConverter(identifier, Thread.currentThread().getContextClassLoader());\n    }\n\n    public static DataConverter<?> loadDataConverter(String identifier, ClassLoader classLoader) {\n        List<DataConverter> converters = discoverConverters(DataConverter.class, classLoader);\n        for (DataConverter dataConverter : converters) {\n            if (dataConverter.identifier().equals(identifier)) {\n                return dataConverter;\n            }\n        }\n        throw new IllegalArgumentException(\"No data converter found for identifier: \" + identifier);\n    }\n\n    public static TypeConverter<?> loadTypeConverter(String identifier) {","sourceCodeStart":22,"sourceCodeEnd":58,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/ConverterLoader.java#L22-L58","documentation":"ConverterLoader.loadDataTypeConverter discovers DataTypeConverter implementations via Java ServiceLoader and matches them against the given identifier string. If no discovered converter's identifier() equals the requested one, it throws this IllegalArgumentException.","triggerScenarios":"Calling loadDataTypeConverter(identifier) with a converter identifier that no SPI-registered DataTypeConverter declares, including typos or wrong-case strings.","commonSituations":"Configuring a connector's converter option with a name not in the classpath (plugin jar missing, different SeaTunnel version, misspelled identifier).","solutions":["Verify the identifier string against the identifier() of the converter implementation you intend to use","Ensure the jar containing the converter is on the classpath/plugin directory so ServiceLoader can find it (run install-plugin.sh if needed)","Check for version drift: the converter may exist only in newer/older SeaTunnel versions"],"exampleFix":"// before\nDataConverter<?> c = ConverterLoader.loadDataTypeConverter(\"mysql-cdc-converter\"); // no such id\n// after\nDataConverter<?> c = ConverterLoader.loadDataTypeConverter(\"mysql\");","handlingStrategy":"try-catch","validationCode":"String id = cfg.getConverterIdentifier();\nassert id != null && !id.isEmpty();\n// verify against registered identifiers before calling","typeGuard":null,"tryCatchPattern":"try {\n    DataTypeConverter c = ConverterLoader.loadDataTypeConverter(identifier);\n} catch (IllegalArgumentException e) {\n    throw new IllegalArgumentException(\"Unknown converter id '\" + identifier + \"'; check plugin installation and spelling\", e);\n}","preventionTips":["Copy converter identifiers from the implementation's identifier() or docs","Keep plugin jars installed via install-plugin.sh","Pin connector/converter versions with your SeaTunnel version"],"tags":["java","spi","service-loader"],"backgroundTag":"resource-not-found","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}