in src/main/java/software/amazon/encryption/s3/internal/ContentMetadataDecodingStrategy.java [227:252]
private ContentMetadata decodeFromInstructionFile(GetObjectRequest request, GetObjectResponse response) {
GetObjectRequest instructionGetObjectRequest = GetObjectRequest.builder()
.bucket(request.bucket())
.key(request.key() + INSTRUCTION_FILE_SUFFIX)
.build();
ResponseInputStream<GetObjectResponse> instruction;
try {
instruction = instructionFileConfig_.getInstructionFile(instructionGetObjectRequest);
} catch (CompletionException | S3EncryptionClientException | NoSuchKeyException exception) {
// This happens when the customer is attempting to decrypt an object
// which is not encrypted with the S3 EC,
// or instruction files are disabled,
// or the instruction file is lost.
throw new S3EncryptionClientException("Exception encountered while fetching Instruction File. Ensure the object you are" +
" attempting to decrypt has been encrypted using the S3 Encryption Client and instruction files are enabled.", exception);
}
Map<String, String> metadata = new HashMap<>();
JsonNodeParser parser = JsonNodeParser.create();
JsonNode objectNode = parser.parse(instruction);
for (Map.Entry<String, JsonNode> entry : objectNode.asObject().entrySet()) {
metadata.put(entry.getKey(), entry.getValue().asString());
}
return readFromMap(metadata, response);
}