В методе "io.debezium.relational.TableSchemaBuilder.createValueGenerator" есть несколько кодов, приведенных ниже:
return (row) -> {
Struct result = new Struct(schema);
for (int i = 0; i != numFields; ++i) {
Object value = row[recordIndexes[i]];
ValueConverter converter = converters[i];
if (converter != null) {
value = value == null ? value : converter.convert(value);
try {
result.put(fields[i], value);
} catch (DataException e) {
Column col = columns.get(i);
LOGGER.error("Failed to properly convert key value for '{}.{}' of type {} for row {}:",
columnSetName, col.name(), col.typeName(), row, e);
}
}
}
return result;
};
В крайних случаях row.size не равен numFields, поэтому выбрасывается ArrayIndexOutOfBoundsException.
напр.Если не удалось зафиксировать смещения, и задача соединителя завершается. Перед тем как перезапустить соединитель, добавлен столбец и сгенерирована новая схема таблицы. Так, данные из старого смещения не соответствуют текущей схеме таблицы. Белые коды генерируют исключение ArrayIndexOutOfBoundsException