apache/seatunnel · error · IllegalArgumentException
Unknown MetaLakeTypeMapper type:
Error message
Unknown MetaLakeTypeMapper type:
What it means
IllegalArgumentException thrown by MetaLakeFactory.createTypeMapper when the given MetaLakeType has no registered MetaLakeTableSchemaConvertor in MAPPER_REGISTRY. Same registry/enum mismatch pattern as createClient but for the type-mapping (schema conversion) side.
Source
Thrown at seatunnel-api/src/main/java/org/apache/seatunnel/api/metalake/MetaLakeFactory.java:59
CLIENT_REGISTRY.put(type.toLowerCase(), GravitinoClient::new);
MAPPER_REGISTRY.put(type.toLowerCase(), GravitinoTableSchemaConvertor::new);
}
public static MetalakeClient createClient(MetaLakeType metaLakeType) {
String type = metaLakeType.name().toLowerCase();
Supplier<MetalakeClient> constructor = CLIENT_REGISTRY.get(type.toLowerCase());
if (constructor == null) {
throw new IllegalArgumentException("Unknown MetalakeClient type: " + type);
}
return constructor.get();
}
public static MetaLakeTableSchemaConvertor createTypeMapper(MetaLakeType metaLakeType) {
String type = metaLakeType.name().toLowerCase();
Supplier<MetaLakeTableSchemaConvertor> constructor =
MAPPER_REGISTRY.get(type.toLowerCase());
if (constructor == null) {
throw new IllegalArgumentException("Unknown MetaLakeTypeMapper type: " + type);
}
return constructor.get();
}
}
View on GitHub (pinned to cf67b549a7)
Solutions
- Register a MetaLakeTableSchemaConvertor supplier for the type in MAPPER_REGISTRY.
- Verify the registry key equals the enum name lowercased.
- Rebuild so factory and enum come from the same version.
- Add a test asserting createTypeMapper succeeds for every MetaLakeType value.
Example fix
// before
Supplier<MetaLakeTableSchemaConvertor> mapper = MAPPER_REGISTRY.get(type);
// after (registration side)
MAPPER_REGISTRY.put("gravitino", GravitinoTableSchemaConvertor::new); Defensive patterns
Strategy: validation
Validate before calling
// registry-coverage test
test void allTypesHaveMappers() {
for (MetaLakeType t : MetaLakeType.values()) {
assertNotNull(MetaLakeFactory.createTypeMapper(t));
}
} Try / catch
try {
return MetaLakeFactory.createTypeMapper(type);
} catch (IllegalArgumentException e) {
throw new IllegalStateException("No MetaLakeTableSchemaConvertor registered for " + type, e);
} Prevention
- Register a convertor for every MetaLakeType value.
- Match registry keys exactly to enum names lowercased.
- Include mapper coverage in CI tests.
When it happens
Trigger: Calling createTypeMapper(MetaLakeType.X) where X.name().toLowerCase() is absent from MAPPER_REGISTRY — a MetaLakeType added without a corresponding convertor registration.
Common situations: Adding a new metalake type enum and forgetting the mapper entry; classpath mixing old factory code with a new enum; typo between the registry key and the enum lowercase name.
Related errors
- Unknown MetalakeClient type:
- prepare method is not supported
- Failed to fetch metadata from Gravitino for metadata: %s
- fail get tableSchema:
- Invalid metalake table id:
AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10).
Data as JSON: /api/errors/00995ac867d67415.
Report an issue: GitHub.