Core framework for creating and configuring AWS service clients with credential management, regional configuration, and HTTP settings.
Abstract base class providing the builder pattern for all AWS service clients with fluent configuration API.
/**
* Abstract base class for all AWS service client builders
* @param <Subclass> The concrete builder subclass
* @param <TypeToBuild> The service client type to build
*/
public abstract class AwsClientBuilder<Subclass extends AwsClientBuilder<Subclass, TypeToBuild>, TypeToBuild> {
/**
* Creates a new builder instance with default configuration
* @return New builder instance
*/
public static AwsClientBuilder<?, ?> standard();
/**
* Sets the credentials provider for the client
* @param credentialsProvider Credentials provider implementation
* @return Builder instance for method chaining
*/
public Subclass withCredentials(AWSCredentialsProvider credentialsProvider);
/**
* Sets the AWS region for the client
* @param region AWS region enum value
* @return Builder instance for method chaining
*/
public Subclass withRegion(Regions region);
/**
* Sets the client configuration for HTTP settings
* @param clientConfiguration Configuration container
* @return Builder instance for method chaining
*/
public Subclass withClientConfiguration(ClientConfiguration clientConfiguration);
/**
* Sets a custom endpoint configuration
* @param endpointConfiguration Custom endpoint and signing region
* @return Builder instance for method chaining
*/
public Subclass withEndpointConfiguration(EndpointConfiguration endpointConfiguration);
/**
* Builds the immutable service client instance
* @return Configured service client
*/
public TypeToBuild build();
}
/**
* Custom endpoint configuration for non-standard endpoints
*/
public static class EndpointConfiguration {
public EndpointConfiguration(String serviceEndpoint, String signingRegion);
public String getServiceEndpoint();
public String getSigningRegion();
}Usage Examples:
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.regions.Regions;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
// Standard client creation
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new DefaultAWSCredentialsProviderChain())
.withRegion(Regions.US_WEST_2)
.build();
// Default client (uses default credential chain and region detection)
AmazonS3 defaultS3Client = AmazonS3ClientBuilder.defaultClient();
// Custom endpoint configuration
AmazonS3 customS3Client = AmazonS3ClientBuilder.standard()
.withEndpointConfiguration(new EndpointConfiguration(
"https://s3.custom-domain.com",
"us-west-2"
))
.build();Container class for HTTP client settings, retry policies, proxy configuration, and connection management.
/**
* Configuration container for AWS service clients
*/
public class ClientConfiguration {
/**
* Creates a new client configuration with default settings
*/
public ClientConfiguration();
/**
* Sets the connection timeout in milliseconds (default: 10000)
* @param connectionTimeout Timeout for establishing connections
*/
public void setConnectionTimeout(int connectionTimeout);
public int getConnectionTimeout();
/**
* Sets the socket timeout in milliseconds (default: 50000)
* @param socketTimeout Timeout for socket read operations
*/
public void setSocketTimeout(int socketTimeout);
public int getSocketTimeout();
/**
* Sets the maximum number of HTTP connections (default: 50)
* @param maxConnections Maximum concurrent connections
*/
public void setMaxConnections(int maxConnections);
public int getMaxConnections();
/**
* Sets the retry policy for failed requests
* @param retryPolicy Retry policy implementation
*/
public void setRetryPolicy(RetryPolicy retryPolicy);
public RetryPolicy getRetryPolicy();
/**
* Configures proxy server settings
*/
public void setProxyHost(String proxyHost);
public String getProxyHost();
public void setProxyPort(int proxyPort);
public int getProxyPort();
public void setProxyUsername(String proxyUsername);
public String getProxyUsername();
public void setProxyPassword(String proxyPassword);
public String getProxyPassword();
/**
* Sets custom user agent string
* @param userAgent Custom user agent identifier
*/
public void setUserAgent(String userAgent);
public String getUserAgent();
/**
* Configures SSL/TLS settings
*/
public void setProtocol(Protocol protocol);
public Protocol getProtocol();
}
/**
* Protocol enumeration for HTTP/HTTPS
*/
public enum Protocol {
HTTP, HTTPS
}Usage Examples:
import com.amazonaws.ClientConfiguration;
import com.amazonaws.retry.RetryPolicy;
// Custom configuration
ClientConfiguration config = new ClientConfiguration();
config.setConnectionTimeout(15000); // 15 seconds
config.setSocketTimeout(60000); // 60 seconds
config.setMaxConnections(100); // 100 concurrent connections
config.setRetryPolicy(RetryPolicy.DEFAULT_BACKOFF_STRATEGY);
// Proxy configuration
config.setProxyHost("proxy.company.com");
config.setProxyPort(8080);
config.setProxyUsername("user");
config.setProxyPassword("password");
// Use with client builder
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withClientConfiguration(config)
.build();Abstract base class providing common functionality for all AWS service clients.
/**
* Abstract base class for all AWS service clients
*/
public abstract class AmazonWebServiceClient {
/**
* Sets the AWS region for this client
* @param region AWS region for service endpoints
*/
public void setRegion(Region region);
/**
* Sets a custom service endpoint
* @param endpoint Custom endpoint URL
*/
public void setEndpoint(String endpoint);
/**
* Shuts down the client and releases resources
* Call this method when done using the client
*/
public void shutdown();
/**
* Gets the service name for this client
* @return AWS service name
*/
public abstract String getServiceName();
}Built-in retry policies for handling transient failures and service throttling.
/**
* Retry policy interface for controlling request retry behavior
*/
public interface RetryPolicy {
/**
* Determines if a request should be retried
* @param originalRequest The original request
* @param exception The exception that occurred
* @param retriesAttempted Number of retries already attempted
* @return true if the request should be retried
*/
boolean shouldRetry(AmazonWebServiceRequest originalRequest,
AmazonServiceException exception,
int retriesAttempted);
/**
* Calculates the delay before the next retry attempt
* @param originalRequest The original request
* @param exception The exception that occurred
* @param retriesAttempted Number of retries already attempted
* @return Delay in milliseconds
*/
long getDelayBeforeNextRetry(AmazonWebServiceRequest originalRequest,
AmazonServiceException exception,
int retriesAttempted);
/** Default retry policy with exponential backoff */
RetryPolicy DEFAULT = new DefaultRetryPolicy();
/** No retry policy */
RetryPolicy NO_RETRY = new NoRetryPolicy();
}Usage Examples:
import com.amazonaws.retry.RetryPolicy;
import com.amazonaws.retry.PredefinedRetryPolicies;
// Use default retry policy
ClientConfiguration config = new ClientConfiguration();
config.setRetryPolicy(RetryPolicy.DEFAULT);
// Use custom retry policy with higher retry count
RetryPolicy customRetry = PredefinedRetryPolicies.getDefaultRetryPolicyWithCustomMaxRetries(5);
config.setRetryPolicy(customRetry);
// Disable retries
config.setRetryPolicy(RetryPolicy.NO_RETRY);/**
* AWS region representation
*/
public class Region {
public static Region getRegion(Regions region);
public String getName();
public String getDomain();
}
/**
* Request metrics collector interface
*/
public interface RequestMetricCollector {
void collectMetrics(Request<?> request, Response<?> response);
}
/**
* Progress listener for tracking request progress
*/
public interface ProgressListener {
void progressChanged(ProgressEvent progressEvent);
}