apache/seatunnel · error · UnsupportedOperationException
getProducedCatalogTables method has not been implemented.
Error message
getProducedCatalogTables method has not been implemented.
What it means
SeaTunnelSource.getProducedCatalogTables has a default implementation that throws UnsupportedOperationException. The framework increasingly relies on CatalogTable (rich schema metadata) instead of the legacy getProducedType, so sources that have not migrated to implement this method fail when downstream code requests catalog tables.
Source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/source/SeaTunnelSource.java:68
/**
* Get the data type of the records produced by this source.
*
* @deprecated Please use {@link #getProducedCatalogTables}
* @return SeaTunnel data type.
*/
@Deprecated
default SeaTunnelDataType<T> getProducedType() {
return (SeaTunnelDataType) getProducedCatalogTables().get(0).getSeaTunnelRowType();
}
/**
* Get the catalog tables output by this source, It is recommended that all connectors implement
* this method instead of {@link #getProducedType}. CatalogTable contains more information to
* help downstream support more accurate and complete synchronization capabilities.
*/
default List<CatalogTable> getProducedCatalogTables() {
throw new UnsupportedOperationException(
"getProducedCatalogTables method has not been implemented.");
}
/**
* Create source reader, used to produce data.
*
* @param readerContext reader context.
* @return source reader.
* @throws Exception when create reader failed.
*/
SourceReader<T, SplitT> createReader(SourceReader.Context readerContext) throws Exception;
/**
* Create split serializer, use to serialize/deserialize split generated by {@link
* SourceSplitEnumerator}.
*
* @return split serializer.
*/View on GitHub (pinned to cf67b549a7)
Solutions
- Implement getProducedCatalogTables() in the Source, returning List<CatalogTable> built from the connector's schema
- As a stopgap, ensure the job path uses getProducedType or supply schema info via source config if the connector supports it
- Update/rebuild the connector against the current SeaTunnel API version
Example fix
// before
// Source relies on default method
// after
@Override
public List<CatalogTable> getProducedCatalogTables() {
return Collections.singletonList(CatalogTable.of(...));
} Defensive patterns
Strategy: fallback
Validate before calling
List<CatalogTable> tables;
try { tables = source.getProducedCatalogTables(); } catch (UnsupportedOperationException e) { tables = legacyFromProducedType(source); } Try / catch
try { tables = src.getProducedCatalogTables(); } catch (UnsupportedOperationException e) { /* fallback to getProducedType */ } Prevention
- Implement getProducedCatalogTables in all custom sources
- Pin connector versions compatible with your engine
- Test sources against CatalogTable-dependent pipelines
When it happens
Trigger: Calling getProducedCatalogTables() on a custom or older connector Source that only implements getProducedType(); any pipeline path (getProducedType fallback, restoreAndPrepareSource, reader creation) that resolves produced type via catalog tables.
Common situations: Using a third-party or hand-written Source written against an older SeaTunnel API version; upgrading the engine while keeping an old custom connector jar.
Understand the failure class
Background: "NotImplementedError: Subclasses should override this method" / "must be implemented" — abstract method errors explained — this error's family across 40 libraries.
Related errors
- Operator %s requires a compareOption (cross-field comparison
- Table %s field name cannot be empty
- Table %s field %s duplicate
- The Factory has not been implemented and the deprecated Plug
- CATALOG_TABLE_FAILED
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/39c921f13a6cb188.
Report an issue: GitHub.