apache/seatunnel · error · EasysearchConnectorException

UNSUPPORTED_OPERATION

UNSUPPORTED_OPERATION

Error message

error fieldName=%s,fieldValue=%s,seaTunnelDataType=%s,rowRecord=%s

What it means

DefaultSeaTunnelRowDeserializer.convert wraps per-field value conversion in a catch-all that rethrows any failure as an UNSUPPORTED_OPERATION EasysearchConnectorException, including the field name, raw value, target data type, and the full source record JSON. It is a diagnostic wrapper meaning 'this document field could not be converted to the declared SeaTunnel type'.

Source

Thrown at seatunnel-connectors-v2/connector-easysearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/easysearch/serialize/source/DefaultSeaTunnelRowDeserializer.java:129

        SeaTunnelDataType seaTunnelDataType = null;
        try {
            for (int i = 0; i < rowTypeInfo.getTotalFields(); i++) {
                fieldName = rowTypeInfo.getFieldName(i);
                value = recursiveGet(rowRecord.getDoc(), fieldName);
                if (value != null) {
                    seaTunnelDataType = rowTypeInfo.getFieldType(i);
                    if (value instanceof NullNode) {
                        seaTunnelFields[i] = null;
                    } else if (value instanceof TextNode) {
                        seaTunnelFields[i] =
                                convertValue(seaTunnelDataType, ((TextNode) value).textValue());
                    } else {
                        seaTunnelFields[i] = convertValue(seaTunnelDataType, value.toString());
                    }
                }
            }
        } catch (Exception ex) {
            throw new EasysearchConnectorException(
                    UNSUPPORTED_OPERATION,
                    String.format(
                            "error fieldName=%s,fieldValue=%s,seaTunnelDataType=%s,rowRecord=%s",
                            fieldName, value, seaTunnelDataType, JsonUtils.toJsonString(rowRecord)),
                    ex);
        }
        return new SeaTunnelRow(seaTunnelFields);
    }

    Object convertValue(SeaTunnelDataType<?> fieldType, String fieldValue)
            throws JsonProcessingException {
        if (BOOLEAN_TYPE.equals(fieldType)) {
            return Boolean.parseBoolean(fieldValue);
        } else if (BYTE_TYPE.equals(fieldType)) {
            return Byte.valueOf(fieldValue);
        } else if (SHORT_TYPE.equals(fieldType)) {
            return Short.parseShort(fieldValue);
        } else if (INT_TYPE.equals(fieldType)) {

View on GitHub (pinned to cf67b549a7)

Solutions

  1. Inspect the logged fieldName/fieldValue and fix the data in the index (clean dirty values) or adjust the declared schema.
  2. Change the SeaTunnel data type for the offending field to STRING and parse downstream.
  3. Add a Transform to filter/repair malformed documents before they reach the deserializer.
  4. If conversion should legitimately support the value, extend convertValue's parsing logic.

Example fix

// before
{"age": {"type": "INT"}}   // index has age="unknown"
// after
{"age": {"type": "STRING"}} // read as string, cast later
Defensive patterns

Strategy: try-catch

Try / catch

try { rows = deserializer.deserialize(hit); } catch (EasysearchConnectorException e) { if (e.getSeaTunnelErrorCode() == UNSUPPORTED_OPERATION && e.getMessage().startsWith("error fieldName=")) { log.warn("Skipping bad document: {}", e.getMessage()); return null; /* or dead-letter */ } throw e; }

Prevention

When it happens

Trigger: Calling deserialize on an Easysearch hit where convertValue (or any parsing step) throws for a field — e.g. a string that cannot parse to the declared SeaTunnelDataType, or a nested map access failing.

Common situations: ES documents whose field values don't match the configured schema (string "abc" in an INT column, malformed dates), dirty/optional fields present in one document but typed differently in others, schema manually declared in the source config that diverges from actual index mapping.

Understand the failure class

Background: Type mismatch errors: IllegalArgumentException, TypeError and type guards across 150 open-source libraries — this error's family across 150 libraries.

Related errors


AI-assisted analysis of apache/seatunnel@cf67b549a7 (2026-09-10). Data as JSON: /api/errors/a11e8da75ca14e71. Report an issue: GitHub.