{"record":{"id":"29774219b6d0eb2b","repo":"apache/seatunnel","slug":"file-format-markdown-does-not-support-writing","errorCode":null,"errorMessage":"File format 'markdown' does not support writing.","messagePattern":"File format 'markdown' does not support writing\\.","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/config/FileFormat.java","lineNumber":179,"sourceCode":"                    \"File format 'debezium_json' does not support reading.\");\n        }\n    },\n    MAXWELL_JSON(\"maxwell_json\") {\n        @Override\n        public WriteStrategy getWriteStrategy(FileSinkConfig fileSinkConfig) {\n            return new MaxWellJsonWriteStrategy(fileSinkConfig);\n        }\n\n        @Override\n        public ReadStrategy getReadStrategy() {\n            throw new UnsupportedOperationException(\n                    \"File format 'maxwell_json' does not support reading.\");\n        }\n    },\n    MARKDOWN(\"md\", \"markdown\") {\n        @Override\n        public WriteStrategy getWriteStrategy(FileSinkConfig fileSinkConfig) {\n            throw new UnsupportedOperationException(\n                    \"File format 'markdown' does not support writing.\");\n        }\n\n        @Override\n        public ReadStrategy getReadStrategy() {\n            return new MarkdownReadStrategy();\n        }\n    },\n    PDF(\"pdf\") {\n        @Override\n        public WriteStrategy getWriteStrategy(FileSinkConfig fileSinkConfig) {\n            throw new UnsupportedOperationException(\"File format 'pdf' does not support writing.\");\n        }\n\n        @Override\n        public ReadStrategy getReadStrategy() {\n            return new PdfReadStrategy();\n        }","sourceCodeStart":161,"sourceCodeEnd":197,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-file/connector-file-base/src/main/java/org/apache/seatunnel/connectors/seatunnel/file/config/FileFormat.java#L161-L197","documentation":"The MARKDOWN FileFormat enum member only supports reading (MarkdownReadStrategy). Calling getWriteStrategy() on it throws UnsupportedOperationException because writing markdown output files is not supported by the file sink.","triggerScenarios":"Configuring a file sink with format = \"md\" or \"markdown\"; write-strategy resolution invokes FileFormat.MARKDOWN.getWriteStrategy().","commonSituations":"Reusing a markdown source config for a sink; assuming all readable formats are also writable; exporting query results to markdown via the file sink.","solutions":["Change the sink format to a writable format (text, csv, json, parquet, orc, canal_json, debezium_json, maxwell_json).","If markdown output is needed, write as 'text' and format the content, or generate markdown downstream.","Check the FileFormat capability matrix (read vs write) before configuring a sink.","Keep 'md'/'markdown' only in source configurations."],"exampleFix":"// before\nsink {\n  LocalFile {\n    format = \"markdown\"\n  }\n}\n// after\nsink {\n  LocalFile {\n    format = \"text\"\n  }\n}","handlingStrategy":"validation","validationCode":"FileFormat fmt = FileFormat.valueOf(config.get(\"format\"));\ntry {\n    fmt.getWriteStrategy(fileSinkConfig);\n} catch (UnsupportedOperationException e) {\n    throw new IllegalArgumentException(\"markdown is read-only; choose a writable format\");\n}","typeGuard":"boolean isWritable(FileFormat fmt, FileSinkConfig cfg) {\n    try { fmt.getWriteStrategy(cfg); return true; }\n    catch (UnsupportedOperationException e) { return false; }\n}","tryCatchPattern":"try {\n    fmt.getWriteStrategy(fileSinkConfig);\n} catch (UnsupportedOperationException e) {\n    log.error(\"markdown cannot be used as a file sink format; use text/csv/json/parquet\", e);\n    throw new IllegalArgumentException(e);\n}","preventionTips":["Treat 'md'/'markdown' strictly as a source format.","Probe FileFormat.getWriteStrategy during sink config validation.","Use 'text' plus post-processing when markdown-like output is required.","Audit format fields when converting source configs into sink configs."],"tags":["file-connector","file-format","unsupported-write","markdown"],"backgroundTag":"operation-not-supported","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}