{"record":{"id":"3742f40b4a8e3d2a","repo":"apache/seatunnel","slug":"reconvert-not-support","errorCode":null,"errorMessage":"reconvert not support","messagePattern":"reconvert not support","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/DataConverter.java","lineNumber":103,"sourceCode":"        for (int i = 0; i < fields.length; i++) {\n            fields[i] = convert(hasTypeDefine ? typeDefine[i] : null, columnDefine[i], fields[i]);\n        }\n        return fields;\n    }\n\n    default Object reconvert(T typeDefine, Column columnDefine, Object value) {\n        return reconvert(typeDefine, value);\n    }\n\n    /**\n     * Convert object to an external system's data type.\n     *\n     * @param typeDefine\n     * @param value\n     * @return\n     */\n    default Object reconvert(T typeDefine, Object value) {\n        throw new UnsupportedOperationException(\"reconvert not support\");\n    }\n\n    default Object reconvert(Column columnDefine, Object value) {\n        return reconvert(columnDefine.getDataType(), value);\n    }\n\n    /**\n     * Convert {@link SeaTunnelDataType#getTypeClass()} to an external system's data type.\n     *\n     * @param typeDefine\n     * @param value\n     * @return\n     */\n    default Object reconvert(SeaTunnelDataType typeDefine, Object value) {\n        throw new UnsupportedOperationException(\"reconvert not support\");\n    }\n}\n","sourceCodeStart":85,"sourceCodeEnd":121,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/DataConverter.java#L85-L121","documentation":"DataConverter.reconvert(T typeDefine, Object value) is a default method that converters may override to convert data back from SeaTunnel internal types to external/source types. The default implementation does nothing but throw this UnsupportedOperationException, meaning the concrete converter does not support reverse conversion.","triggerScenarios":"Calling reconvert(typeDefine, value) (including via the Column overload which delegates here) on a converter that has not overridden the method.","commonSituations":"Using a write-back or echo feature that assumes bidirectional conversion with a converter that only implements forward conversion.","solutions":["Implement/override reconvert(T, Object) in the converter if reverse conversion is required","Avoid the reconvert code path for this converter and convert externally","Switch to a converter implementation that supports reconvert"],"exampleFix":"// before\n// default: throws\ndefault Object reconvert(T typeDefine, Object value) { throw new UnsupportedOperationException(\"reconvert not support\"); }\n// after\n@Override\npublic Object reconvert(MyTypeDefine typeDefine, Object value) {\n    return externalFormat((SeaTunnelRow) value, typeDefine);\n}","handlingStrategy":"try-catch","validationCode":"// probe once at startup whether reconvert is supported\ntry {\n    converter.reconvert(typeDefine, sampleValue);\n    reconvertSupported = true;\n} catch (UnsupportedOperationException e) {\n    reconvertSupported = false;\n}","typeGuard":null,"tryCatchPattern":"try {\n    Object nativeValue = converter.reconvert(typeDefine, value);\n} catch (UnsupportedOperationException e) {\n    // fall back to external reverse conversion or skip\n    nativeValue = fallbackReconvert(value);\n}","preventionTips":["Check whether the converter class overrides reconvert before relying on it","Document forward-only converters in your pipeline design","Implement reconvert in custom converters used for write-back"],"tags":["java","data-conversion","unsupported-operation"],"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-14T11:17:12.474Z"}