{"record":{"id":"765fe9b60a26b5be","repo":"apache/seatunnel","slug":"unsupported-convert-value-getclass-to-double-765fe9","errorCode":null,"errorMessage":"Unsupported convert ${value.getClass()} to Double","messagePattern":"Unsupported convert (.+?) to Double","errorType":"exception","errorClass":"UnsupportedOperationException","httpStatus":null,"severity":"error","filePath":"seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/BasicDataConverter.java","lineNumber":894,"sourceCode":"    default double convertDouble(T typeDefine, Number value) {\n        return convertDouble(value);\n    }\n\n    default double convertDouble(T typeDefine, String value) {\n        return convertDouble(value);\n    }\n\n    default double convertDouble(Object value) throws UnsupportedOperationException {\n        if (value instanceof Double) {\n            return (double) value;\n        }\n        if (value instanceof Number) {\n            return convertDouble((Number) value);\n        }\n        if (value instanceof String) {\n            return convertDouble((String) value);\n        }\n        throw new UnsupportedOperationException(\n                \"Unsupported convert \" + value.getClass() + \" to Double\");\n    }\n\n    default double convertDouble(Number value) {\n        return value.doubleValue();\n    }\n\n    default double convertDouble(String value) {\n        return Double.parseDouble(value);\n    }\n\n    default float convertFloat(T typeDefine, Object value) throws UnsupportedOperationException {\n        if (value instanceof Float) {\n            return (float) value;\n        }\n        if (value instanceof Number) {\n            return convertFloat(typeDefine, (Number) value);\n        }","sourceCodeStart":876,"sourceCodeEnd":912,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-api/src/main/java/org/apache/seatunnel/api/table/converter/BasicDataConverter.java#L876-L912","documentation":"The typeDefine-less convertDouble(Object) accepts Number and String; an unhandled class causes UnsupportedOperationException naming the value's class. It signals there is no double conversion rule for the supplied runtime type.","triggerScenarios":"Calling convert()/convertDouble(Object) with classes like byte[], char[], Boolean, or domain objects for a DOUBLE column.","commonSituations":"Custom transforms forwarding raw Objects; upstream format changes altering the deserialized class; mistakenly passing structured or boolean values where scalars are expected.","solutions":["Pre-convert the value to a Number or numeric String before calling convert","Add a custom converter branch for the offending class","Correct the source mapping so the field deserializes as a numeric type"],"exampleFix":"// before\nconverter.convert(flag); // Boolean, throws\n// after\ndouble d = ((Boolean) flag) ? 1.0 : 0.0;\nconverter.convert(d);","handlingStrategy":"type-guard","validationCode":"if (!(v instanceof Number) && !(v instanceof String)) {\n    throw new IllegalStateException(\"Unsupported double class: \" + v.getClass());\n}","typeGuard":"boolean isConvertibleToDouble(Object v) {\n    return v instanceof Number || v instanceof String;\n}","tryCatchPattern":"try {\n    converter.convert(value);\n} catch (UnsupportedOperationException e) {\n    LOG.warn(\"Double convert failed, class={}\", value.getClass(), e);\n    value = normalizeToNumber(value);\n}","preventionTips":["Convert Boolean/structured values to numbers before conversion","Cover all field classes in conversion unit tests","Keep transform outputs scalar-typed to match target columns"],"tags":["java","type-conversion","double","numeric"],"backgroundTag":"type-mismatch","analyzedSha":"cf67b549a7a6c35fa0beb12d83c62892427ea919","analyzedAt":"2026-09-10T21:44:55.265Z","contentChangedAt":"2026-09-10T21:44:55.265Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}