apache/seatunnel · error · UnsupportedOperationException
Unsupported convert ${value.getClass()} to LocalDate, typeDe
Error message
Unsupported convert ${value.getClass()} to LocalDate, typeDefine: ${typeDefine} What it means
convertLocalDate(TypeDefine, Object) supports String, Number (epoch day/millis depending on config) and temporal instances; any other class triggers UnsupportedOperationException with the typeDefine included. It means the field's runtime type has no LocalDate conversion rule in the converter.
Source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/BasicDataConverter.java:750
if (value instanceof LocalDate) {
return (LocalDate) value;
}
if (value instanceof Date) {
return convertLocalDate(typeDefine, (Date) value);
}
if (value instanceof LocalDateTime) {
return ((LocalDateTime) value).toLocalDate();
}
if (value instanceof java.sql.Date) {
return ((java.sql.Date) value).toLocalDate();
}
if (value instanceof String) {
return convertLocalDate(typeDefine, (String) value);
}
if (value instanceof Number) {
return convertLocalDate(typeDefine, (Number) value);
}
throw new UnsupportedOperationException(
"Unsupported convert "
+ value.getClass()
+ " to LocalDate, typeDefine: "
+ typeDefine);
}
default LocalDate convertLocalDate(T typeDefine, Date value) {
return convertLocalDate(value);
}
default LocalDate convertLocalDate(T typeDefine, String value) {
return convertLocalDate(value);
}
default LocalDate convertLocalDate(T typeDefine, Number value) {
return convertLocalDate(value);
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Identify the class from the message and pre-convert to java.time.LocalDate, an ISO-8601 date String, or a Number epoch
- Add a custom DataConverter for the offending class if it is consistently produced by the source
- Correct the schema mapping so the source field type matches DATE expectations
Example fix
// before
converter.convert(dateTypeDefine, bsonDateTime); // org.bson.BsonDateTime
// after
LocalDate d = Instant.ofEpochMilli(((org.bson.BsonDateTime) bsonDateTime).getValue())
.atZone(ZoneId.systemDefault()).toLocalDate();
converter.convert(dateTypeDefine, d); Defensive patterns
Strategy: type-guard
Validate before calling
if (!(v instanceof Number) && !(v instanceof String) && !(v instanceof java.time.temporal.TemporalAccessor) && !(v instanceof java.util.Date)) {
throw new IllegalStateException("Unsupported date class: " + v.getClass());
} Type guard
boolean isDateLike(Object v) {
return v instanceof Number || v instanceof String
|| v instanceof java.time.temporal.TemporalAccessor
|| v instanceof java.util.Date;
} Try / catch
try {
converter.convert(typeDefine, value);
} catch (UnsupportedOperationException e) {
LOG.warn("Date conversion failed for {}: {}", value.getClass(), e.getMessage());
value = normalizeToDate(value);
} Prevention
- Normalize NoSQL/driver date wrappers (e.g. BsonDateTime) to java.time before conversion
- Keep source schema and target DATE mapping in sync across upgrades
- Add conversion tests for all source field classes
When it happens
Trigger: Calling convert() for a DATE-mapped column with an unhandled class such as byte[], a BSON date wrapper, or a domain object, when neither the String nor Number branch applies.
Common situations: MongoDB/NoSQL drivers returning custom date types; schema drift after connector upgrade changing the deserialized class; passing an epoch value wrapped in a non-Number type like String that isn't ISO-formatted (though String usually routes to parsing).
Understand the failure class
Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.
Related errors
- Unsupported convert ${value.getClass()} to LocalDate
- Unsupported convert ${value.getClass()} to LocalTime, typeDe
- Unsupported convert ${value.getClass()} to LocalTime
- Unsupported convert ${value.getClass()} to BigDecimal, typeD
- Unsupported convert ${value.getClass()} to BigDecimal
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/5f7909438b45baf1.
Report an issue: GitHub.