schema = fixedSchema;
}
Record outputRecord = inputRecord.copy();
AbstractParser.removeAttachments(outputRecord);
IndexedRecord avroRecord = new GenericData.Record(schema);
for (Field field : schema.getFields()) {
String morphlineFieldName = mappings.get(field.name());
if (morphlineFieldName == null) {
morphlineFieldName = field.name();
}
List list = inputRecord.get(morphlineFieldName);
Object avroResult = AvroConversions.ERROR;
if (field.schema().getType() == Schema.Type.ARRAY) {
avroResult = AvroConversions.toAvro(list, field);
} else if (list.size() == 0) {
try { // this will fail if there is no default value
avroResult = ReflectData.get().getDefaultValue(field);
} catch (AvroRuntimeException e) {
avroResult = AvroConversions.ERROR;
}
} else if (list.size() == 1) {
avroResult = AvroConversions.toAvro(list.get(0), field);
}
if (avroResult == AvroConversions.ERROR) {
LOG.debug("Cannot convert item: {} to schema: {}", list, schema);
return false;
}
avroRecord.put(field.pos(), avroResult);
}
outputRecord.put(Fields.ATTACHMENT_BODY, avroRecord);
// pass record to next command in chain: