Package org.jets3t.service.utils
Class ServiceUtils
java.lang.Object
org.jets3t.service.utils.ServiceUtils
General utility methods used throughout the jets3t project.
- Author:
- James Murty
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic S3ObjectbuildObjectFromUrl(String host, String urlPath, String s3Endpoint) Builds an object based on the bucket name and object key information available in the components of a URL.From a map of metadata returned from a REST GET or HEAD request, returns a map of metadata with the HTTP-connection-specific metadata items removed.static byte[]computeMD5Hash(byte[] data) Computes the MD5 hash of the given data and returns it as a hex string.static byte[]Computes the MD5 hash of the data in the given input stream and returns it as a hex string.static longcountBytesInObjects(S3Object[] objects) Counts the total number of bytes in a set of S3Objects by summing the content length of each.static StringfindBucketNameInHostname(String host, String s3Endpoint) Identifies the name of a bucket from a given host name, if available.static StringformatIso8601Date(Date date) static StringformatRfc822Date(Date date) static byte[]fromBase64(String b64Data) Converts a Base64-encoded string to the original byte data.static byte[]Converts a Hex-encoded data string to the original byte data.static StringgenerateS3HostnameForBucket(String bucketName, boolean isDnsBucketNamingDisabled, String s3Endpoint) static StringgetUserAgentDescription(String applicationDescription) Returns a user agent string describing the jets3t library, and optionally the application using it, to server-side services.static booleanisBucketNameValidDNSName(String bucketName) Returns true if the given bucket name can be used as a component of a valid DNS name.static booleanisEtagAlsoAnMD5Hash(String etag) Guess whether the given ETag value is also an MD5 hash of an underlying object in a storage service, as opposed to being some other kind of opaque hash.static StringJoins a list of ints into a delimiter-separated string.static StringJoins a list of items into a delimiter-separated string.static StringJoins a list of items into a delimiter-separated string.static XMLReaderFind a SAX XMLReader by hook or by crook, with work-arounds for non-standard platforms.static DateparseIso8601Date(String dateString) static DateparseRfc822Date(String dateString) static StringreadInputStreamLineToString(InputStream is, String encoding) Reads from an input stream until a newline character or the end of the stream is reached.static byte[]Reads binary data from an input stream and returns it as a byte array.static StringreadInputStreamToString(InputStream is, String encoding) Reads text data from an input stream and returns it as a String.static StringsignWithHmacSha1(String awsSecretKey, String canonicalString) Calculate the HMAC/SHA1 on a string.static StringtoBase64(byte[] data) Converts byte data to a Base64-encoded string.static StringtoHex(byte[] data) Converts byte data to a Hex-encoded string.
-
Constructor Details
-
ServiceUtils
public ServiceUtils()
-
-
Method Details
-
parseIso8601Date
- Throws:
ParseException
-
formatIso8601Date
-
parseRfc822Date
- Throws:
ParseException
-
formatRfc822Date
-
signWithHmacSha1
public static String signWithHmacSha1(String awsSecretKey, String canonicalString) throws ServiceException Calculate the HMAC/SHA1 on a string.- Parameters:
awsSecretKey- AWS secret key.canonicalString- canonical string representing the request to sign.- Returns:
- Signature
- Throws:
ServiceException
-
readInputStreamToString
Reads text data from an input stream and returns it as a String.- Parameters:
is- input stream from which text data is read.encoding- the character encoding of the textual data in the input stream. If this parameter is null, the default system encoding will be used.- Returns:
- text data read from the input stream.
- Throws:
IOException
-
readInputStreamLineToString
public static String readInputStreamLineToString(InputStream is, String encoding) throws IOException Reads from an input stream until a newline character or the end of the stream is reached.- Parameters:
is-- Returns:
- text data read from the input stream, not including the newline character.
- Throws:
IOException
-
readInputStreamToBytes
Reads binary data from an input stream and returns it as a byte array.- Parameters:
is- input stream from which data is read.- Returns:
- byte array containing data read from the input stream.
- Throws:
IOException
-
countBytesInObjects
Counts the total number of bytes in a set of S3Objects by summing the content length of each.- Parameters:
objects-- Returns:
- total number of bytes in all S3Objects.
-
cleanRestMetadataMap
public static Map<String,Object> cleanRestMetadataMap(Map<String, Object> metadata, String headerPrefix, String metadataPrefix) From a map of metadata returned from a REST GET or HEAD request, returns a map of metadata with the HTTP-connection-specific metadata items removed.- Parameters:
metadata-- Returns:
- metadata map with HTTP-connection-specific items removed.
-
toHex
Converts byte data to a Hex-encoded string.- Parameters:
data- data to hex encode.- Returns:
- hex-encoded string.
-
fromHex
Converts a Hex-encoded data string to the original byte data.- Parameters:
hexData- hex-encoded data to decode.- Returns:
- decoded data from the hex string.
-
toBase64
Converts byte data to a Base64-encoded string.- Parameters:
data- data to Base64 encode.- Returns:
- encoded Base64 string.
-
join
Joins a list of items into a delimiter-separated string. Each item is converted to a string value with the toString() method before being added to the final delimited list.- Parameters:
items- the items to include in a delimited stringdelimiter- the delimiter character or string to insert between each item in the list- Returns:
- a delimited string
-
join
Joins a list of items into a delimiter-separated string. Each item is converted to a string value with the toString() method before being added to the final delimited list.- Parameters:
items- the items to include in a delimited stringdelimiter- the delimiter character or string to insert between each item in the list- Returns:
- a delimited string
-
join
Joins a list of ints into a delimiter-separated string.- Parameters:
ints- the ints to include in a delimited stringdelimiter- the delimiter character or string to insert between each item in the list- Returns:
- a delimited string
-
fromBase64
Converts a Base64-encoded string to the original byte data.- Parameters:
b64Data- a Base64-encoded string to decode.- Returns:
- bytes decoded from a Base64 string.
-
computeMD5Hash
Computes the MD5 hash of the data in the given input stream and returns it as a hex string. The provided input stream is consumed and closed by this method.- Parameters:
is-- Returns:
- MD5 hash
- Throws:
NoSuchAlgorithmExceptionIOException
-
computeMD5Hash
Computes the MD5 hash of the given data and returns it as a hex string.- Parameters:
data-- Returns:
- MD5 hash.
- Throws:
NoSuchAlgorithmExceptionIOException
-
isEtagAlsoAnMD5Hash
Guess whether the given ETag value is also an MD5 hash of an underlying object in a storage service, as opposed to being some other kind of opaque hash.This test was made necessary by Amazon S3's multipart upload feature, where the ETag value returned after a re-assembled multipart upload is completed is no longer the same as an MD5 hash of the assembled data.
An ETag is considered also an MD5 when:
- The length is exactly 16 characters (excluding surrounding quote characters)
- All characters in the string are hexadecimal values, i.e. [0-9a-f] when lowercased
These rules are drawn from the post by Carl@AWS on Nov 11, 2010 10:40 AM here: https://forums.aws.amazon.com/thread.jspa?messageID=222158invalid input: '&tstart'=0
- Returns:
- true if the ETag value can be assumed to also be an MD5 hash.
-
findBucketNameInHostname
Identifies the name of a bucket from a given host name, if available. Returns null if the bucket name cannot be identified, as might happen when a bucket name is represented by the path component of a URL instead of the host name component.- Parameters:
host- the host name component of a URL that may include the bucket name, if an alternative host name is in use.- Returns:
- The S3 bucket name represented by the DNS host name, or null if none.
-
buildObjectFromUrl
public static S3Object buildObjectFromUrl(String host, String urlPath, String s3Endpoint) throws UnsupportedEncodingException Builds an object based on the bucket name and object key information available in the components of a URL.- Parameters:
host- the host name component of a URL that may include the bucket name, if an alternative host name is in use.urlPath- the path of a URL that references an S3 object, and which may or may not include the bucket name.- Returns:
- the object referred to by the URL components.
- Throws:
UnsupportedEncodingException
-
isBucketNameValidDNSName
Returns true if the given bucket name can be used as a component of a valid DNS name. If so, the bucket can be accessed using requests with the bucket name as part of an S3 sub-domain. If not, the old-style bucket reference URLs must be used, in which case the bucket name must be the first component of the resource path.- Parameters:
bucketName- the name of the bucket to test for DNS compatibility.
-
generateS3HostnameForBucket
-
getUserAgentDescription
Returns a user agent string describing the jets3t library, and optionally the application using it, to server-side services.- Parameters:
applicationDescription- a description of the application using the jets3t toolkit, included at the end of the user agent string. This value may be null.- Returns:
- a string built with the following components (some elements may not be available):
JetS3t/
Constants.JETS3T_VERSION(os.name/os.version; os.arch; user.region; user.region; user.language) applicationDescription
-
loadXMLReader
Find a SAX XMLReader by hook or by crook, with work-arounds for non-standard platforms.- Returns:
- an initialized XML SAX reader
- Throws:
ServiceException
-