{"record":{"id":"dcafe8b3d8445818","repo":"apache/seatunnel","slug":"unsupported-operation-dcafe8","errorCode":"UNSUPPORTED_OPERATION","errorMessage":"error fieldName=%s,fieldValue=%s,seaTunnelDataType=%s,rowRecord=%s","messagePattern":"error fieldName=(.+?),fieldValue=(.+?),seaTunnelDataType=(.+?),rowRecord=(.+?)","errorType":"error_code","errorClass":"TypesenseConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-typesense/src/main/java/org/apache/seatunnel/connectors/seatunnel/typesense/serialize/source/DefaultSeaTunnelRowDeserializer.java","lineNumber":126,"sourceCode":"\n    SeaTunnelRow convert(TypesenseRecord rowRecord) {\n        Object[] seaTunnelFields = new Object[rowTypeInfo.getTotalFields()];\n        String fieldName = null;\n        Object value = null;\n        SeaTunnelDataType seaTunnelDataType = null;\n        Map<String, Object> doc = rowRecord.getDoc();\n        try {\n            for (int i = 0; i < rowTypeInfo.getTotalFields(); i++) {\n                fieldName = rowTypeInfo.getFieldName(i);\n                value = doc.get(fieldName);\n                if (value != null) {\n                    // seaTunnelDataType is the SeaTunnel type\n                    seaTunnelDataType = rowTypeInfo.getFieldType(i);\n                    seaTunnelFields[i] = convertValue(seaTunnelDataType, value);\n                }\n            }\n        } catch (Exception ex) {\n            throw new TypesenseConnectorException(\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        return new SeaTunnelRow(seaTunnelFields);\n    }\n\n    Object convertValue(SeaTunnelDataType<?> fieldType, Object fieldValue)\n            throws JsonProcessingException {\n        if (STRING_TYPE.equals(fieldType)) {\n            return fieldValue.toString();\n        } else {\n            if (nullDefault.equals(fieldValue.toString())) {\n                return null;\n            }\n            if (BOOLEAN_TYPE.equals(fieldType)) {","sourceCodeStart":108,"sourceCodeEnd":144,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-typesense/src/main/java/org/apache/seatunnel/connectors/seatunnel/typesense/serialize/source/DefaultSeaTunnelRowDeserializer.java#L108-L144","documentation":"DefaultSeaTunnelRowDeserializer.convert maps a Typesense document field value into the target SeaTunnel type. Any exception during per-field conversion is rethrown as TypesenseConnectorException(UNSUPPORTED_OPERATION) with a formatted diagnostic string containing the field name, value, target SeaTunnel type, and the whole row record as JSON.","triggerScenarios":"Deserializing a Typesense document (search/index result) where a field's raw value cannot be converted to the declared SeaTunnel type — e.g. null vs primitive mismatch, a string where a number is declared, malformed date/time strings, or nested value shapes the converter doesn't handle.","commonSituations":"Typesense document schema drifted from the configured SeaTunnel schema; a field is missing or null in some documents; date strings in unexpected formats; user edited the schema option without re-indexing documents.","solutions":["Read the embedded message fields (fieldName/fieldValue/seaTunnelDataType) to identify exactly which field and value failed.","Align the configured SeaTunnel schema with the actual Typesense document schema (types and names).","Fix or backfill the offending document value in Typesense (e.g. reformat the date, correct the type).","Add a null/absent-field guard in the deserializer path if some documents legitimately lack the field."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// align declared schema with actual Typesense document fields\nMap<String, Object> doc = /* fetched document */;\nfor (String field : declaredFieldNames) {\n    Object v = doc.get(field);\n    if (v == null) { /* handle or exclude field */ }\n}","typeGuard":null,"tryCatchPattern":"try {\n    SeaTunnelRow row = deserializer.convert(doc);\n} catch (TypesenseConnectorException e) {\n    // message embeds fieldName/fieldValue/seaTunnelDataType — log and skip/requeue the record\n}","preventionTips":["Keep the configured SeaTunnel schema in sync with the Typesense collection schema.","Normalize date fields to 'yyyy-MM-dd[ HH:mm:ss]' when indexing.","Guard against null/missing fields in documents."],"tags":["typesense","deserialization","type-mismatch","row-conversion"],"backgroundTag":"type-mismatch","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"}