{"record":{"id":"fd098b6ea9d6777b","repo":"apache/seatunnel","slug":"cannot-convert-to-long","errorCode":null,"errorMessage":"Cannot convert to long: ","messagePattern":"Cannot convert to long: ","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-iceberg/src/main/java/org/apache/seatunnel/connectors/seatunnel/iceberg/data/RowConverter.java","lineNumber":296,"sourceCode":"        return result;\n    }\n\n    protected int convertInt(Object value) {\n        if (value instanceof Number) {\n            return ((Number) value).intValue();\n        } else if (value instanceof String) {\n            return Integer.parseInt((String) value);\n        }\n        throw new IllegalArgumentException(\"Cannot convert to int: \" + value.getClass().getName());\n    }\n\n    protected long convertLong(Object value) {\n        if (value instanceof Number) {\n            return ((Number) value).longValue();\n        } else if (value instanceof String) {\n            return Long.parseLong((String) value);\n        }\n        throw new IllegalArgumentException(\"Cannot convert to long: \" + value.getClass().getName());\n    }\n\n    protected float convertFloat(Object value) {\n        if (value instanceof Number) {\n            return ((Number) value).floatValue();\n        } else if (value instanceof String) {\n            return Float.parseFloat((String) value);\n        }\n        throw new IllegalArgumentException(\n                \"Cannot convert to float: \" + value.getClass().getName());\n    }\n\n    protected double convertDouble(Object value) {\n        if (value instanceof Number) {\n            return ((Number) value).doubleValue();\n        } else if (value instanceof String) {\n            return Double.parseDouble((String) value);\n        }","sourceCodeStart":278,"sourceCodeEnd":314,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-iceberg/src/main/java/org/apache/seatunnel/connectors/seatunnel/iceberg/data/RowConverter.java#L278-L314","documentation":"A generic type-guard in RowConverter.convertLong, hit when converting an Iceberg field value to a long. The method only supports values that are Number or String; any other runtime type (e.g. Boolean, java.util.Date, or an unexpected object) falls through the instanceof checks and this sentinel IllegalArgumentException is thrown, naming the offending value's class. It is raised via convertValue, meaning an incoming record contained a field whose runtime type is incompatible with the long conversion path.","triggerScenarios":"Writing to an Iceberg LongType field via convertValue when the value is, e.g., a Boolean, byte[], or temporal object.","commonSituations":"Timestamps represented as java.util.Date instead of epoch millis, booleans in BIGINT columns, JSON parsers emitting unexpected types.","solutions":["Ensure the field value is numeric or numeric-string (convert Dates to epoch millis manually).","Pre-cast in a transform: CAST(col AS BIGINT).","Change the Iceberg column type (e.g. to TIMESTAMP) to match real data.","Catch IllegalArgumentException for bad-record handling."],"exampleFix":"// before\nrow.setField(0, new Date()); // bigint field\n// after\nrow.setField(0, date.getTime());","handlingStrategy":"type-guard","validationCode":"if (!(v instanceof Number) && !(v instanceof String)) { throw new IllegalArgumentException(\"long field expects Number/String, got \" + v.getClass()); }","typeGuard":"Long safeToLong(Object v) { if (v instanceof Number) return ((Number) v).longValue(); if (v instanceof String) return Long.valueOf((String) v); if (v instanceof Date) return ((Date) v).getTime(); return null; }","tryCatchPattern":"try { value = convertLong(raw); } catch (IllegalArgumentException e) { log.warn(\"Bad long value: {}\", e.getMessage()); }","preventionTips":["Convert temporal types to epoch millis before sink","Use transform CAST to BIGINT","Align source and Iceberg column types"],"tags":["iceberg","type-conversion","type-mismatch"],"backgroundTag":"type-mismatch","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"}