*/
public AmazonWebServiceResponse<T> handle(HttpResponse response) throws Exception {
log.trace("Parsing service response JSON");
String CRC32Checksum = response.getHeaders().get("x-amz-crc32");
CRC32ChecksumCalculatingInputStream crc32ChecksumInputStream = null;
JsonParser jsonParser = null;
if (!needsConnectionLeftOpen) {
if (CRC32Checksum != null) {
crc32ChecksumInputStream = new CRC32ChecksumCalculatingInputStream(response.getContent());
jsonParser = jsonFactory.createJsonParser(crc32ChecksumInputStream);
} else {
jsonParser = jsonFactory.createJsonParser(response.getContent());
}
}
try {
AmazonWebServiceResponse<T> awsResponse = new AmazonWebServiceResponse<T>();
JsonUnmarshallerContext unmarshallerContext = new JsonUnmarshallerContext(jsonParser, response);
registerAdditionalMetadataExpressions(unmarshallerContext);
T result = responseUnmarshaller.unmarshall(unmarshallerContext);
if (CRC32Checksum != null) {
long serverSideCRC = Long.parseLong(CRC32Checksum);
long clientSideCRC = crc32ChecksumInputStream.getCRC32Checksum();
if (clientSideCRC != serverSideCRC) {
throw new CRC32MismatchException("Client calculated crc32 checksum didn't match that calculated by server side");
}
}