apache/seatunnel · error · IllegalArgumentException
The type " + type + " is not supported!
Error message
The type " + type + " is not supported!
What it means
SeaTunnelRowSerializer serializes SeaTunnelRow records into a payload format for SelectDB Cloud load. Only the 'json' and 'csv' formats (case-matched constants) are supported; any other configured value throws this IllegalArgumentException at the first row serialized.
Source
Thrown at seatunnel-connectors-v2/connector-selectdb-cloud/src/main/java/org/apache/seatunnel/connectors/selectdb/serialize/SeaTunnelRowSerializer.java:67
boolean enableDelete) {
this.type = type;
this.seaTunnelRowType = seaTunnelRowType;
this.fieldDelimiter = fieldDelimiter;
this.enableDelete = enableDelete;
if (JSON.equals(type)) {
objectMapper = new ObjectMapper();
}
}
@Override
public byte[] serialize(SeaTunnelRow seaTunnelRow) throws IOException {
String valString;
if (JSON.equals(type)) {
valString = buildJsonString(seaTunnelRow);
} else if (CSV.equals(type)) {
valString = buildCSVString(seaTunnelRow);
} else {
throw new IllegalArgumentException("The type " + type + " is not supported!");
}
return valString.getBytes(StandardCharsets.UTF_8);
}
public String buildJsonString(SeaTunnelRow row) throws IOException {
Map<String, Object> rowMap = new HashMap<>(row.getFields().length);
for (int i = 0; i < row.getFields().length; i++) {
Object value = convert(seaTunnelRowType.getFieldType(i), row.getField(i));
rowMap.put(seaTunnelRowType.getFieldName(i), value);
}
if (enableDelete) {
rowMap.put(LoadConstants.DORIS_DELETE_SIGN, parseDeleteSign(row.getRowKind()));
}
return objectMapper.writeValueAsString(rowMap);
}
public String buildCSVString(SeaTunnelRow row) throws IOException {View on GitHub (pinned to cf67b549a7)
Solutions
- Set the sink format option to exactly 'json' or 'csv' (match the constant values in the connector)
- Check the builder/config code that passes the format string to SeaTunnelRowSerializer and fix the value at the source
- If another format is genuinely needed, extend serialize() with a new branch and contribute it upstream
Example fix
// before format = "JSON"; // throws IllegalArgumentException // after format = "json"; // matches JSON constant, uses buildJsonString
Defensive patterns
Strategy: validation
Validate before calling
if (!"json".equals(format) && !"csv".equals(format)) { throw new IllegalArgumentException("format must be json or csv, got: " + format); } Try / catch
try { serializer.serialize(row); } catch (IllegalArgumentException e) { /* fix config, fail fast at startup */ } Prevention
- Validate the format option at config-parse time, before job submission
- Match constant values exactly (case-sensitive)
- Whitelist supported formats in your config layer
When it happens
Trigger: The sink's serializer format option (seaTunnelRowSerializerBuilder format) is set to a string other than JSON or CSV, e.g. 'parquet' or 'JSON' with different casing than the constants, and serialize() is invoked on the first record.
Common situations: Typo in the format config value; using uppercase 'JSON'/'CSV' when constants compare case-sensitively; copying config from another sink that supports more formats.
Understand the failure class
Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.
Related errors
- UNSUPPORTED_DATA_TYPE
- Unsupported type in LocalTimeArrayType: ${eleSqlType}
- Unsupported type: ${sqlType}
- Unsupported type: ${clazz}
- Object to json exception!
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/8cd4fc905d4caa67.
Report an issue: GitHub.