{"record":{"id":"990837e327d23db8","repo":"apache/seatunnel","slug":"the-factory-has-not-been-implemented-and-the-depre-990837","errorCode":null,"errorMessage":"The Factory has not been implemented and the deprecated Plugin will be used.","messagePattern":"The Factory has not been implemented and the deprecated Plugin will be used\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/table/factory/TableTransformFactory.java","lineNumber":36,"sourceCode":"package org.apache.seatunnel.api.table.factory;\n\nimport org.apache.seatunnel.api.table.connector.TableTransform;\n\n/**\n * This is an SPI interface, used to create {@link\n * org.apache.seatunnel.api.table.connector.TableTransform}. Each plugin need to have it own\n * implementation.\n */\npublic interface TableTransformFactory extends Factory {\n\n    /**\n     * We will never use this method now. So gave a default implement and return null.\n     *\n     * @param context TableFactoryContext\n     * @return\n     */\n    default <T> TableTransform<T> createTransform(TableTransformFactoryContext context) {\n        throw new UnsupportedOperationException(\n                \"The Factory has not been implemented and the deprecated Plugin will be used.\");\n    }\n}\n","sourceCodeStart":18,"sourceCodeEnd":40,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/factory/TableTransformFactory.java#L18-L40","documentation":"Default implementation of TableTransformFactory.createTransform throws UnsupportedOperationException when the transform factory has not implemented the new Factory API, meaning the deprecated legacy Plugin (SeaTunnelTransform) path should be used. Seeing the exception directly means the factory is incomplete or the caller skipped the fallback.","triggerScenarios":"Calling createTransform(TableTransformFactoryContext) on a transform factory that only implements the deprecated plugin interface, or invoking it from a path (custom engine glue, tests) that does not fall back to legacy discovery.","commonSituations":"Custom transforms still on the old SeaTunnelTransform API; older connector jars on the classpath not migrated to the Factory API; direct factory invocation in tests or tooling.","solutions":["Implement createTransform(TableTransformFactoryContext) in the transform factory.","Use the framework discovery path that falls back to the deprecated plugin.","Migrate the transform to the TableTransformFactory API.","Upgrade the transform plugin to a version implementing the new method."],"exampleFix":"// before\npublic class MyTransformFactory implements TableTransformFactory { /* legacy only */ }\n// after\npublic class MyTransformFactory implements TableTransformFactory {\n    @Override\n    public <T> TableTransform<T> createTransform(TableTransformFactoryContext context) {\n        return new MyTableTransform<>(context);\n    }\n}","handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"try { return factory.createTransform(context); } catch (UnsupportedOperationException e) { return createTransformFromDeprecatedPlugin(context); }","preventionTips":["Implement createTransform in custom transform factories","Upgrade transform plugins to Factory API versions","Use framework discovery paths"],"tags":["factory","transform","deprecated-api","spi"],"backgroundTag":"method-not-implemented","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"}