apache/seatunnel · error · UnsupportedOperationException
Unsupported generics convert
Error message
Unsupported generics convert
What it means
Converter's default convert(rowIndex, fieldVector, genericsConverters) method exists only for converters that support map/generic-aware conversion (e.g. the Map converter); the interface's default implementation throws UnsupportedOperationException("Unsupported generics convert"). Calling it on a converter that doesn't support generic conversion is an API misuse.
Source
Thrown at seatunnel-connectors-v2/connector-common/src/main/java/org/apache/seatunnel/connectors/seatunnel/common/source/arrow/converter/Converter.java:35
package org.apache.seatunnel.connectors.seatunnel.common.source.arrow.converter;
import org.apache.seatunnel.shade.org.apache.arrow.vector.FieldVector;
import org.apache.seatunnel.shade.org.apache.arrow.vector.types.Types;
import java.util.Map;
import java.util.function.Function;
public interface Converter<T extends FieldVector> {
String ARRAY_KEY = "ARRAY";
String MAP_KEY = "KEY";
String MAP_VALUE = "VALUE";
Object convert(int rowIndex, T fieldVector);
default Object convert(int rowIndex, T fieldVector, Map<String, Function> genericsConverters) {
throw new UnsupportedOperationException("Unsupported generics convert");
}
boolean support(Types.MinorType type);
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Ensure the dispatch code calls the three-argument convert only for converters that support it (check converter.support(type) and whether it overrides the overload).
- Use the correct converter for the FieldVector type — map/struct/list vectors need the corresponding composite converter.
- If you wrote a custom Converter, override convert(rowIndex, fieldVector, genericsConverters) instead of relying on the default.
- Inspect the FieldVector's children types; a mismatch between expected and actual Arrow type usually routes to the wrong converter.
Example fix
// before
Object v = intConverter.convert(rowIndex, vector, genericsConverters); // throws
// after
Converter c = converterFor(fieldVector);
Object v = (genericsConverters != null && c.overridesGenericsConvert())
? c.convert(rowIndex, vector, genericsConverters)
: c.convert(rowIndex, vector); Defensive patterns
Strategy: type-guard
Validate before calling
// only use the generics-aware path when the converter supports it
boolean canUseGenerics = converter instanceof Converter<?> c
&& !(c.getClass().equals(Converter.class)) /* overrides the overload */; Type guard
boolean supportsGenericsConvert(Converter<?> c, Types.MinorType type) {
return c.support(type) && GenericsCapable.class.isInstance(c); // only composite converters
} Try / catch
try {
return converter.convert(rowIndex, fieldVector, genericsConverters);
} catch (UnsupportedOperationException e) {
return converter.convert(rowIndex, fieldVector); // fall back to plain conversion
} Prevention
- Route map/struct/list FieldVectors to their dedicated composite converters.
- Override the generics-aware convert overload in any custom Converter.
- Match converter selection to the FieldVector's minor type and children before calling convert.
When it happens
Trigger: Calling the three-argument convert(...) with a genericsConverters map on a Converter implementation that did not override it — e.g. invoking convertMap/convertedValue/convertRow against a scalar converter like IntConverter or StringConverter.
Common situations: Arrow FieldVectors whose minor type matches a simple converter but whose children (lists, maps, structs) require the generic path; custom Converter implementations that forgot to override the generics-aware overload while the reader dispatches to it.
Related errors
- Metrics snapshots are updated through merge semantics rather
- Please invoke DeserializationSchema#deserialize(byte[], Coll
- A decoding format must override this method to apply metadat
- Unsupported convert %s to %s
- Unsupported convert ${value.getClass()} to Float, typeDefine
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/d844c4ea95b4c230.
Report an issue: GitHub.