{"record":{"id":"e0f9517ee9c7e24b","repo":"apache/seatunnel","slug":"common-unsupported-operation-e0f951","errorCode":"COMMON_UNSUPPORTED_OPERATION","errorMessage":"error fieldName=%s,fieldValue=%s,seaTunnelDataType=%s,rowRecord=%s","messagePattern":"error fieldName=(.+?),fieldValue=(.+?),seaTunnelDataType=(.+?),rowRecord=(.+?)","errorType":"error_code","errorClass":"ElasticsearchConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-elasticsearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/elasticsearch/serialize/source/DefaultSeaTunnelRowDeserializer.java","lineNumber":136,"sourceCode":"        SeaTunnelDataType seaTunnelDataType = null;\n        try {\n            for (int i = 0; i < rowTypeInfo.getTotalFields(); i++) {\n                fieldName = rowTypeInfo.getFieldName(i);\n                value = recursiveGet(rowRecord.getDoc(), fieldName);\n                if (value != null) {\n                    seaTunnelDataType = rowTypeInfo.getFieldType(i);\n                    if (value instanceof NullNode) {\n                        seaTunnelFields[i] = null;\n                    } else if (value instanceof TextNode) {\n                        seaTunnelFields[i] =\n                                convertValue(seaTunnelDataType, ((TextNode) value).textValue());\n                    } else {\n                        seaTunnelFields[i] = convertValue(seaTunnelDataType, value.toString());\n                    }\n                }\n            }\n        } catch (Exception ex) {\n            throw new ElasticsearchConnectorException(\n                    CommonErrorCodeDeprecated.UNSUPPORTED_OPERATION,\n                    String.format(\n                            \"error fieldName=%s,fieldValue=%s,seaTunnelDataType=%s,rowRecord=%s\",\n                            fieldName, value, seaTunnelDataType, JsonUtils.toJsonString(rowRecord)),\n                    ex);\n        }\n        SeaTunnelRow seaTunnelRow = new SeaTunnelRow(seaTunnelFields);\n        seaTunnelRow.setTableId(rowRecord.getTableId());\n        return seaTunnelRow;\n    }\n\n    Object convertValue(SeaTunnelDataType<?> fieldType, String fieldValue)\n            throws JsonProcessingException {\n        if (STRING_TYPE.equals(fieldType)) {\n            return fieldValue;\n        } else {\n            if (nullDefault.equals(fieldValue)) {\n                return null;","sourceCodeStart":118,"sourceCodeEnd":154,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-elasticsearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/elasticsearch/serialize/source/DefaultSeaTunnelRowDeserializer.java#L118-L154","documentation":"DefaultSeaTunnelRowDeserializer converts Elasticsearch _source JSON fields into SeaTunnelRow fields. Any exception raised while converting a single field is wrapped in ElasticsearchConnectorException (UNSUPPORTED_OPERATION) with context: field name, field value, target SeaTunnel data type, and the full row record serialized as JSON, plus the original cause.","triggerScenarios":"convert(...) catches any Exception from convertValue/parsing while deserializing an ES document field, e.g. a value whose format does not match the declared SeaTunnel type, then wraps and rethrows.","commonSituations":"Elasticsearch mapping drifted from the declared SeaTunnel schema (e.g. a field became a string while SeaTunnel expects LONG); malformed date or numeric values in _source; null-ish or empty values coerced unexpectedly.","solutions":["Read the wrapped cause ('Caused by') to see the actual conversion failure","Compare the ES document value in the message with the declared seaTunnelDataType and align the SeaTunnel schema with the real ES mapping","Fix or clean the offending document value in Elasticsearch","Use a custom deserializer/converter if the ES field format is nonstandard"],"exampleFix":"// before: schema declares price as INT but ES stores \"12.5\" (string)\n// after: align schema or fix data\n// schema: price DOUBLE, or fix document to {\"price\": 12}","handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n    row = deserializer.deserialize(sourceMap, rowType);\n} catch (ElasticsearchConnectorException e) {\n    log.error(\"Field conversion failed, inspect fieldName/fieldValue/seaTunnelDataType in message\", e);\n    throw e;\n}","preventionTips":["Keep the SeaTunnel schema aligned with the real ES index mapping (check with GET index/_mapping)","Validate a sample document against the declared schema before running the job","Watch for mapping drift after ES-side updates"],"tags":["elasticsearch","deserialization","type-conversion","schema-mismatch"],"backgroundTag":"schema-validation-failed","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"}