{"record":{"id":"3e5ea2e9ce97289d","repo":"apache/seatunnel","slug":"unsupported-data-type-3e5ea2","errorCode":"UNSUPPORTED_DATA_TYPE","errorMessage":"Unexpected value: ","messagePattern":"Unexpected value: ","errorType":"error_code","errorClass":"EasysearchConnectorException","httpStatus":null,"severity":"error","filePath":"seatunnel-connectors-v2/connector-easysearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/easysearch/serialize/source/DefaultSeaTunnelRowDeserializer.java","lineNumber":196,"sourceCode":"            MapType<?, ?> mapType = (MapType<?, ?>) fieldType;\n            SeaTunnelDataType<?> keyType = mapType.getKeyType();\n\n            SeaTunnelDataType<?> valueType = mapType.getValueType();\n            Map<String, String> stringMap =\n                    mapper.readValue(fieldValue, new TypeReference<HashMap<String, String>>() {});\n            Map<Object, Object> convertMap = new HashMap<Object, Object>();\n            for (Map.Entry<String, String> entry : stringMap.entrySet()) {\n                Object convertKey = convertValue(keyType, entry.getKey());\n                Object convertValue = convertValue(valueType, entry.getValue());\n                convertMap.put(convertKey, convertValue);\n            }\n            return convertMap;\n        } else if (fieldType instanceof PrimitiveByteArrayType) {\n            return Base64.getDecoder().decode(fieldValue);\n        } else if (VOID_TYPE.equals(fieldType) || fieldType == null) {\n            return null;\n        } else {\n            throw new EasysearchConnectorException(\n                    UNSUPPORTED_DATA_TYPE, \"Unexpected value: \" + fieldType);\n        }\n    }\n\n    private LocalDateTime parseDate(String fieldValue) {\n        // handle strings of timestamp type\n        try {\n            long ts = Long.parseLong(fieldValue);\n            return LocalDateTime.ofInstant(Instant.ofEpochMilli(ts), ZoneId.systemDefault());\n        } catch (NumberFormatException e) {\n            // no op\n        }\n        String formatDate = fieldValue.replace(\"T\", \" \");\n        if (fieldValue.length() == \"yyyyMMdd\".length()\n                || fieldValue.length() == \"yyyy-MM-dd\".length()) {\n            formatDate = fieldValue + \" 00:00:00\";\n        }\n        DateTimeFormatter dateTimeFormatter = dateTimeFormatterMap.get(formatDate.length());","sourceCodeStart":178,"sourceCodeEnd":214,"githubUrl":"https://github.com/apache/seatunnel/blob/cf67b549a7a6c35fa0beb12d83c62892427ea919/seatunnel-connectors-v2/connector-easysearch/src/main/java/org/apache/seatunnel/connectors/seatunnel/easysearch/serialize/source/DefaultSeaTunnelRowDeserializer.java#L178-L214","documentation":"DefaultSeaTunnelRowDeserializer.convertValue converts an Easysearch string/JSON field value into the target SeaTunnelDataType via an if/else chain over known types (primitives, arrays, maps, byte arrays, VOID/null). If the field's type instance matches none of the branches, it throws UNSUPPORTED_DATA_TYPE 'Unexpected value: <type>'.","triggerScenarios":"A SeaTunnelDataType that is not in convertValue's chain (e.g. an unusual/custom or newly added SeaTunnel type such as a TimeType variant or a connector-specific type) passed as the target type while deserializing an Easysearch document.","commonSituations":"Using a newly introduced SeaTunnel data type in the schema with an older easysearch connector; declaring a custom type; typos in mapping config that resolve to an exotic type class.","solutions":["Use a supported SeaTunnel type (STRING, INT, BIGINT, BOOLEAN, FLOAT, DOUBLE, DATE, TIME, TIMESTAMP, MAP, ARRAY, BYTES) in the schema.","Upgrade the connector version if the type you need was recently added to SeaTunnel API.","As a workaround declare the field as STRING/BYTES and convert downstream.","Extend convertValue with a branch for the missing SeaTunnelDataType if implementing support."],"exampleFix":"// before\nSeaTunnelDataType<?> t = new UnknownCustomType();\n// after\nSeaTunnelDataType<?> t = BasicType.STRING_TYPE;","handlingStrategy":"validation","validationCode":"// Java: restrict schema to supported types\nSet<SeaTunnelDataType<?>> supported = Set.of(BasicType.STRING_TYPE, BasicType.INT_TYPE, BasicType.LONG_TYPE, BasicType.BOOLEAN_TYPE, BasicType.FLOAT_TYPE, BasicType.DOUBLE_TYPE, LocalTimeType.LOCAL_DATE_TYPE, MapType.STRING_MAP_TYPE);\nif (!supported.contains(fieldType)) throw new IllegalArgumentException(\"Type not supported by easysearch deserializer: \" + fieldType);","typeGuard":"boolean isSupported(SeaTunnelDataType<?> t) { return t == null || VOID_TYPE.equals(t) || t instanceof BasicType || t instanceof MapType || t instanceof ArrayType || t instanceof PrimitiveByteArrayType; }","tryCatchPattern":null,"preventionTips":["Only declare well-known SeaTunnel basic/map/array/bytes types in the schema","Pin connector and SeaTunnel API versions together to avoid type drift","Declare exotic fields as STRING and convert downstream"],"tags":["easysearch","deserialization","unsupported-type"],"backgroundTag":"unsupported-dtype","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"}