Class ServiceUtils

java.lang.Object
org.jets3t.service.utils.ServiceUtils

public class ServiceUtils extends Object
General utility methods used throughout the jets3t project.
Author:
James Murty
  • Constructor Details

    • ServiceUtils

      public ServiceUtils()
  • Method Details

    • parseIso8601Date

      public static Date parseIso8601Date(String dateString) throws ParseException
      Throws:
      ParseException
    • formatIso8601Date

      public static String formatIso8601Date(Date date)
    • parseRfc822Date

      public static Date parseRfc822Date(String dateString) throws ParseException
      Throws:
      ParseException
    • formatRfc822Date

      public static String formatRfc822Date(Date date)
    • 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

      public static String readInputStreamToString(InputStream is, String encoding) throws IOException
      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

      public static byte[] readInputStreamToBytes(InputStream is) throws IOException
      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

      public static long countBytesInObjects(S3Object[] objects)
      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

      public static String toHex(byte[] data)
      Converts byte data to a Hex-encoded string.
      Parameters:
      data - data to hex encode.
      Returns:
      hex-encoded string.
    • fromHex

      public static byte[] fromHex(String hexData)
      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

      public static String toBase64(byte[] data)
      Converts byte data to a Base64-encoded string.
      Parameters:
      data - data to Base64 encode.
      Returns:
      encoded Base64 string.
    • join

      public static String join(List<?> items, String delimiter)
      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 string
      delimiter - the delimiter character or string to insert between each item in the list
      Returns:
      a delimited string
    • join

      public static String join(Object[] items, String delimiter)
      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 string
      delimiter - the delimiter character or string to insert between each item in the list
      Returns:
      a delimited string
    • join

      public static String join(int[] ints, String delimiter)
      Joins a list of ints into a delimiter-separated string.
      Parameters:
      ints - the ints to include in a delimited string
      delimiter - the delimiter character or string to insert between each item in the list
      Returns:
      a delimited string
    • fromBase64

      public static byte[] fromBase64(String b64Data)
      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

      public static byte[] computeMD5Hash(InputStream is) throws NoSuchAlgorithmException, IOException
      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:
      NoSuchAlgorithmException
      IOException
    • computeMD5Hash

      public static byte[] computeMD5Hash(byte[] data) throws NoSuchAlgorithmException, IOException
      Computes the MD5 hash of the given data and returns it as a hex string.
      Parameters:
      data -
      Returns:
      MD5 hash.
      Throws:
      NoSuchAlgorithmException
      IOException
    • isEtagAlsoAnMD5Hash

      public static boolean isEtagAlsoAnMD5Hash(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.

      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=222158&tstart=0

      Returns:
      true if the ETag value can be assumed to also be an MD5 hash.
    • findBucketNameInHostname

      public static String findBucketNameInHostname(String host, String s3Endpoint)
      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

      public static boolean isBucketNameValidDNSName(String bucketName)
      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

      public static String generateS3HostnameForBucket(String bucketName, boolean isDnsBucketNamingDisabled, String s3Endpoint)
    • getUserAgentDescription

      public static String getUserAgentDescription(String applicationDescription)
      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

      public static XMLReader loadXMLReader() throws ServiceException
      Find a SAX XMLReader by hook or by crook, with work-arounds for non-standard platforms.
      Returns:
      an initialized XML SAX reader
      Throws:
      ServiceException