if (byteRangeStart != null || byteRangeEnd != null) {
// Partial data responses have a status code of 206.
expectedStatusCode = 206;
}
if (result.getStatus().getCode() != expectedStatusCode) {
throw new S3ServiceException("Precondition failed when getting object "
+ objectKey + ": " + result.getStatus().getDescription());
}
} else {
log.debug("Using standard GET (no constraints to apply)");
String signature = ServiceUtils.signWithHmacSha1(getAWSSecretKey(),
Constants.SOAP_SERVICE_NAME + "GetObject" + convertDateToString(timestamp));
result = s3SoapBinding.getObject(
bucketName, objectKey, true, withData, false,
getAWSAccessKey(), timestamp, signature, null);
}
S3Object object = new S3Object(objectKey);
object.setETag(result.getETag());
object.setLastModifiedDate(result.getLastModified().getTime());
object.setBucketName(bucketName);
// Get data details from the SOAP attachment.
if (withData) {
Object[] attachments = s3SoapBinding.getAttachments();
log.debug("SOAP attachment count for " + object.getKey() + ": " + attachments.length);
for (int i = 0; i < attachments.length; i++) {
if (i > 0) {
throw new S3ServiceException(
"Received multiple SOAP attachment parts, this shouldn't happen");
}
AttachmentPart part = (AttachmentPart) attachments[i];
object.setContentType(part.getContentType());
object.setContentLength(part.getSize());
object.setDataInputStream(part.getDataHandler().getInputStream());
}
}
// Populate object's metadata details.
MetadataEntry[] metadata = result.getMetadata();
for (int i = 0; i < metadata.length; i++) {
MetadataEntry entry = metadata[i];
object.addMetadata(entry.getName(), entry.getValue());
}
object.setMetadataComplete(true);
return object;
} catch (RuntimeException e) {
throw e;
} catch (Exception e) {
throw new S3ServiceException("Unable to Get Object: " + objectKey, e);
}
}