apache/seatunnel · error · IllegalArgumentException
No data converter found for identifier: ${identifier}
Error message
No data converter found for identifier: ${identifier} What it means
ConverterLoader.loadDataConverter looks up DataConverter implementations registered through ServiceLoader and matches identifier(). When no registered converter declares the requested identifier, this IllegalArgumentException is thrown.
Source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/ConverterLoader.java:55
return dataTypeConverter;
}
}
throw new IllegalArgumentException(
"No data type converter found for identifier: " + identifier);
}
public static DataConverter<?> loadDataConverter(String identifier) {
return loadDataConverter(identifier, Thread.currentThread().getContextClassLoader());
}
public static DataConverter<?> loadDataConverter(String identifier, ClassLoader classLoader) {
List<DataConverter> converters = discoverConverters(DataConverter.class, classLoader);
for (DataConverter dataConverter : converters) {
if (dataConverter.identifier().equals(identifier)) {
return dataConverter;
}
}
throw new IllegalArgumentException("No data converter found for identifier: " + identifier);
}
public static TypeConverter<?> loadTypeConverter(String identifier) {
return loadTypeConverter(identifier, Thread.currentThread().getContextClassLoader());
}
public static TypeConverter<?> loadTypeConverter(String identifier, ClassLoader classLoader) {
List<TypeConverter> converters = discoverConverters(TypeConverter.class, classLoader);
for (TypeConverter typeConverter : converters) {
if (typeConverter.identifier().equals(identifier)) {
return typeConverter;
}
}
throw new IllegalArgumentException("No type converter found for identifier: " + identifier);
}
private static <T> List<T> discoverConverters(Class<T> clazz, ClassLoader classLoader) {
List<T> converters = new ArrayList<>();View on GitHub (pinned to cf67b549a7)
Solutions
- Correct the identifier in the connector configuration to a registered value
- Make sure the converter's jar is in the plugin directory and SPI file (META-INF/services) is present
- Pass an explicit ClassLoader that can see the plugin classes if the thread context classloader is wrong
Example fix
// before
DataConverter<?> c = ConverterLoader.loadDataConverter("dataconv-mysql-v2");
// after
DataConverter<?> c = ConverterLoader.loadDataConverter("mysql", pluginClassLoader); Defensive patterns
Strategy: try-catch
Validate before calling
ClassLoader cl = Thread.currentThread().getContextClassLoader(); if (cl == null) cl = ConverterLoader.class.getClassLoader(); DataConverter<?> c = ConverterLoader.loadDataConverter(identifier, cl); // explicit CL
Try / catch
try {
DataConverter<?> c = ConverterLoader.loadDataConverter(identifier);
} catch (IllegalArgumentException e) {
log.error("DataConverter '{}' not found; verify SPI registration and classpath", identifier);
throw e;
} Prevention
- Ensure the thread context classloader can see plugin jars in embedded contexts
- Verify META-INF/services entries exist in the converter jar
- Validate identifiers in config at job-submission time
When it happens
Trigger: loadDataConverter(identifier[, classLoader]) called with an identifier that no discoverable DataConverter matches; the default overload uses the thread context classloader, which may not see plugin jars.
Common situations: Misspelled converter identifier in connector config; plugin jar not shipped; context classloader null/limited in embedded or engine-submitted jobs.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- No data type converter found for identifier: ${identifier}
- No type converter found for identifier: ${identifier}
- Could not find any factories that implement '%s' in the clas
- Could not load service provider for factories.
- No DebeziumAdapter found for connector class: " + connectorC
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/08d3d7b8a300c986.
Report an issue: GitHub.