in c3r-sdk-core/src/main/java/com/amazonaws/c3r/action/RowUnmarshaller.java [80:109]
public void unmarshal() {
while (inputReader.hasNext()) {
final Row<T> marshalledRow = inputReader.next();
final Row<T> unmarshalledRow = valueFactory.newRow();
for (ColumnHeader header : marshalledRow.getHeaders()) {
final byte[] valueBytes = marshalledRow.getValue(header).getBytes();
Transformer transformer = transformers.get(ColumnType.CLEARTEXT); // Default to pass through
Function<byte[], byte[]> decode = x -> x;
if (Transformer.hasDescriptor(transformers.get(ColumnType.SEALED), valueBytes)) {
transformer = transformers.get(ColumnType.SEALED);
decode = valueFactory::getValueBytesFromEncodedBytes;
} else if (Transformer.hasDescriptor(transformers.get(ColumnType.FINGERPRINT), valueBytes)) {
transformer = transformers.get(ColumnType.FINGERPRINT);
}
try {
unmarshalledRow.putBytes(
header,
decode.apply(transformer.unmarshal(valueBytes)));
} catch (Exception e) {
throw new C3rRuntimeException("Failed while unmarshalling data for column `"
+ header + "` on row " + inputReader.getReadRowCount() + ". Error message received: " + e.getMessage(), e);
}
}
outputWriter.writeRow(unmarshalledRow);
if (inputReader.getReadRowCount() % RowMarshaller.LOG_ROW_UPDATE_FREQUENCY == 0) {
log.info("{} rows decrypted.", inputReader.getReadRowCount());
}
}
outputWriter.flush();
}