apache/seatunnel · error · IllegalArgumentException
No type converter found for identifier: ${identifier}
Error message
No type converter found for identifier: ${identifier} What it means
ConverterLoader.loadTypeConverter scans TypeConverter implementations via ServiceLoader and returns the one whose identifier() matches; otherwise it throws this IllegalArgumentException. It means the requested type converter is not registered in the visible classloader.
Source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/ConverterLoader.java:69
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<>();
ServiceLoader.load(clazz, classLoader).forEach(t -> converters.add(t));
return converters;
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Check available TypeConverter implementations and use a valid identifier
- Install the plugin providing the converter (sh bin/install-plugin.sh)
- If running embedded, supply a ClassLoader that includes the converter jar
Example fix
// before
TypeConverter<?> tc = ConverterLoader.loadTypeConverter("typconv-jsonx");
// after
TypeConverter<?> tc = ConverterLoader.loadTypeConverter("json"); Defensive patterns
Strategy: try-catch
Validate before calling
String id = config.getTypeConverter(); assert id != null;
Try / catch
try {
TypeConverter<?> tc = ConverterLoader.loadTypeConverter(identifier);
} catch (IllegalArgumentException e) {
throw new IllegalArgumentException("TypeConverter '" + identifier + "' not registered; install the plugin or fix the id", e);
} Prevention
- List available TypeConverters before choosing an identifier
- Keep engine and plugin versions aligned
- Fail fast at config parsing with a clear message
When it happens
Trigger: loadTypeConverter(identifier[, classLoader]) invoked with an identifier that no SPI-registered TypeConverter declares.
Common situations: Wrong converter name in connector config; missing plugin jar; different SeaTunnel version without that converter.
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 data 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/6ccbf4b947fdcccc.
Report an issue: GitHub.