org.jets3t.service.utils
Class RestUtils

java.lang.Object
  extended by org.jets3t.service.utils.RestUtils

public class RestUtils
extends Object

Utilities useful for REST/HTTP S3Service implementations.

Author:
James Murty

Field Summary
static List HTTP_HEADER_METADATA_NAMES
          A list of HTTP-specific header names, that may be present in S3Objects as metadata but which should be treated as plain HTTP headers during transmission (ie not converted into S3 Object metadata items).
 
Constructor Summary
RestUtils()
           
 
Method Summary
static Map convertHeadersToMap(org.apache.commons.httpclient.Header[] headers)
           
static String encodeUrlPath(String path, String delimiter)
          Encodes a URL string but leaves a delimiter string unencoded.
static String encodeUrlString(String path)
          Encodes a URL string, and ensures that spaces are encoded as "%20" instead of "+" to keep fussy web browsers happier.
static long getAWSTimeAdjustment()
          Calculates a time offset value to reflect the time difference between your computer's clock and the current time according to an AWS server, and returns the calculated time difference.
static HttpClientAndConnectionManager initHttpConnection(AWSRequestAuthorizer awsRequestAuthorizer, org.apache.commons.httpclient.HostConfiguration hostConfig, Jets3tProperties jets3tProperties, String userAgentDescription, org.apache.commons.httpclient.auth.CredentialsProvider credentialsProvider)
          Initialises, or re-initialises, the underlying HttpConnectionManager and HttpClient objects a service will use to communicate with an AWS service.
static void initHttpProxy(org.apache.commons.httpclient.HttpClient httpClient, Jets3tProperties jets3tProperties)
          Initialises this service's HTTP proxy by auto-detecting the proxy settings.
static void initHttpProxy(org.apache.commons.httpclient.HttpClient httpClient, Jets3tProperties jets3tProperties, String proxyHostAddress, int proxyPort, String proxyUser, String proxyPassword, String proxyDomain)
          Initialises this service's HTTP proxy for authentication using the given proxy settings.
static void initHttpProxy(org.apache.commons.httpclient.HttpClient httpClient, String proxyHostAddress, int proxyPort, Jets3tProperties jets3tProperties)
          Initialises this service's HTTP proxy with the given proxy settings.
static String makeS3CanonicalString(String method, String resource, Map headersMap, String expires)
          Calculate the canonical string for a REST/HTTP request to S3.
static Map renameMetadataKeys(Map metadata)
          Renames metadata property names to be suitable for use as HTTP Headers.
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

HTTP_HEADER_METADATA_NAMES

public static final List HTTP_HEADER_METADATA_NAMES
A list of HTTP-specific header names, that may be present in S3Objects as metadata but which should be treated as plain HTTP headers during transmission (ie not converted into S3 Object metadata items). All items in this list are in lower case.

This list includes the items:

Unchanged metadata names
content-type
content-md5
content-length
content-language
expires
cache-control
content-disposition
content-encoding

Constructor Detail

RestUtils

public RestUtils()
Method Detail

encodeUrlString

public static String encodeUrlString(String path)
                              throws S3ServiceException
Encodes a URL string, and ensures that spaces are encoded as "%20" instead of "+" to keep fussy web browsers happier.

Parameters:
path -
Returns:
encoded URL.
Throws:
S3ServiceException

encodeUrlPath

public static String encodeUrlPath(String path,
                                   String delimiter)
                            throws S3ServiceException
Encodes a URL string but leaves a delimiter string unencoded. Spaces are encoded as "%20" instead of "+".

Parameters:
path -
delimiter -
Returns:
encoded URL string.
Throws:
S3ServiceException

makeS3CanonicalString

public static String makeS3CanonicalString(String method,
                                           String resource,
                                           Map headersMap,
                                           String expires)
Calculate the canonical string for a REST/HTTP request to S3. When expires is non-null, it will be used instead of the Date header.


renameMetadataKeys

public static Map renameMetadataKeys(Map metadata)
Renames metadata property names to be suitable for use as HTTP Headers. This is done by renaming any non-HTTP headers to have the prefix x-amz-meta- and leaving the HTTP header names unchanged. The HTTP header names left unchanged are those found in HTTP_HEADER_METADATA_NAMES

Parameters:
metadata -
Returns:
a map of metadata property name/value pairs renamed to be suitable for use as HTTP headers.

initHttpConnection

public static HttpClientAndConnectionManager initHttpConnection(AWSRequestAuthorizer awsRequestAuthorizer,
                                                                org.apache.commons.httpclient.HostConfiguration hostConfig,
                                                                Jets3tProperties jets3tProperties,
                                                                String userAgentDescription,
                                                                org.apache.commons.httpclient.auth.CredentialsProvider credentialsProvider)
Initialises, or re-initialises, the underlying HttpConnectionManager and HttpClient objects a service will use to communicate with an AWS service. If proxy settings are specified in this service's Jets3tProperties object, these settings will also be passed on to the underlying objects.

Parameters:
hostConfig - Custom HTTP host configuration; e.g to register a custom Protocol Socket Factory. This parameter may be null, in which case a default host configuration will be used.

initHttpProxy

public static void initHttpProxy(org.apache.commons.httpclient.HttpClient httpClient,
                                 Jets3tProperties jets3tProperties)
Initialises this service's HTTP proxy by auto-detecting the proxy settings.


initHttpProxy

public static void initHttpProxy(org.apache.commons.httpclient.HttpClient httpClient,
                                 String proxyHostAddress,
                                 int proxyPort,
                                 Jets3tProperties jets3tProperties)
Initialises this service's HTTP proxy with the given proxy settings.

Parameters:
proxyHostAddress -
proxyPort -

initHttpProxy

public static void initHttpProxy(org.apache.commons.httpclient.HttpClient httpClient,
                                 Jets3tProperties jets3tProperties,
                                 String proxyHostAddress,
                                 int proxyPort,
                                 String proxyUser,
                                 String proxyPassword,
                                 String proxyDomain)
Initialises this service's HTTP proxy for authentication using the given proxy settings.

Parameters:
proxyHostAddress -
proxyPort -
proxyUser -
proxyPassword -
proxyDomain - if a proxy domain is provided, an NTCredentials credential provider will be used. If the proxy domain is null, a UsernamePasswordCredentials credentials provider will be used.

getAWSTimeAdjustment

public static long getAWSTimeAdjustment()
                                 throws Exception
Calculates a time offset value to reflect the time difference between your computer's clock and the current time according to an AWS server, and returns the calculated time difference. Ideally you should not rely on this method to overcome clock-related disagreements between your computer and AWS. If you computer is set to update its clock periodically and has the correct timezone setting you should never have to resort to this work-around.

Throws:
Exception

convertHeadersToMap

public static Map convertHeadersToMap(org.apache.commons.httpclient.Header[] headers)