{"record":{"id":"00995ac867d67415","repo":"apache/seatunnel","slug":"unknown-metalaketypemapper-type","errorCode":null,"errorMessage":"Unknown MetaLakeTypeMapper type: ","messagePattern":"Unknown MetaLakeTypeMapper type: ","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/metalake/MetaLakeFactory.java","lineNumber":59,"sourceCode":"        CLIENT_REGISTRY.put(type.toLowerCase(), GravitinoClient::new);\n        MAPPER_REGISTRY.put(type.toLowerCase(), GravitinoTableSchemaConvertor::new);\n    }\n\n    public static MetalakeClient createClient(MetaLakeType metaLakeType) {\n        String type = metaLakeType.name().toLowerCase();\n        Supplier<MetalakeClient> constructor = CLIENT_REGISTRY.get(type.toLowerCase());\n        if (constructor == null) {\n            throw new IllegalArgumentException(\"Unknown MetalakeClient type: \" + type);\n        }\n        return constructor.get();\n    }\n\n    public static MetaLakeTableSchemaConvertor createTypeMapper(MetaLakeType metaLakeType) {\n        String type = metaLakeType.name().toLowerCase();\n        Supplier<MetaLakeTableSchemaConvertor> constructor =\n                MAPPER_REGISTRY.get(type.toLowerCase());\n        if (constructor == null) {\n            throw new IllegalArgumentException(\"Unknown MetaLakeTypeMapper type: \" + type);\n        }\n        return constructor.get();\n    }\n}\n","sourceCodeStart":41,"sourceCodeEnd":64,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/metalake/MetaLakeFactory.java#L41-L64","documentation":"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.","triggerScenarios":"Calling createTypeMapper(MetaLakeType.X) where X.name().toLowerCase() is absent from MAPPER_REGISTRY — a MetaLakeType added without a corresponding convertor registration.","commonSituations":"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.","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."],"exampleFix":"// before\nSupplier<MetaLakeTableSchemaConvertor> mapper = MAPPER_REGISTRY.get(type);\n// after (registration side)\nMAPPER_REGISTRY.put(\"gravitino\", GravitinoTableSchemaConvertor::new);","handlingStrategy":"validation","validationCode":"// registry-coverage test\ntest void allTypesHaveMappers() {\n    for (MetaLakeType t : MetaLakeType.values()) {\n        assertNotNull(MetaLakeFactory.createTypeMapper(t));\n    }\n}","typeGuard":null,"tryCatchPattern":"try {\n    return MetaLakeFactory.createTypeMapper(type);\n} catch (IllegalArgumentException e) {\n    throw new IllegalStateException(\"No MetaLakeTableSchemaConvertor registered for \" + type, e);\n}","preventionTips":["Register a convertor for every MetaLakeType value.","Match registry keys exactly to enum names lowercased.","Include mapper coverage in CI tests."],"tags":["enum","registry","gravitino","type-mapping"],"backgroundTag":"unsupported-enum-value","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}