1
15
16 package software.amazon.awssdk.core.internal.http.loader;
17
18 import software.amazon.awssdk.annotations.SdkInternalApi;
19 import software.amazon.awssdk.core.exception.SdkClientException;
20 import software.amazon.awssdk.http.SdkHttpClient;
21 import software.amazon.awssdk.http.async.SdkAsyncHttpClient;
22 import software.amazon.awssdk.http.async.SdkAsyncHttpService;
23 import software.amazon.awssdk.utils.AttributeMap;
24
25
28 @SdkInternalApi
29 public final class DefaultSdkAsyncHttpClientBuilder implements SdkAsyncHttpClient.Builder {
30
31 private static final SdkHttpServiceProvider<SdkAsyncHttpService> DEFAULT_CHAIN = new CachingSdkHttpServiceProvider<>(
32 new SdkHttpServiceProviderChain<>(
33 SystemPropertyHttpServiceProvider.asyncProvider(),
34 ClasspathSdkHttpServiceProvider.asyncProvider()
35 ));
36
37 @Override
38 public SdkAsyncHttpClient buildWithDefaults(AttributeMap serviceDefaults) {
39
40 return DEFAULT_CHAIN
41 .loadService()
42 .map(SdkAsyncHttpService::createAsyncHttpClientFactory)
43 .map(f -> f.buildWithDefaults(serviceDefaults))
44 .orElseThrow(
45 () -> SdkClientException.builder()
46 .message("Unable to load an HTTP implementation from any provider in the" +
47 "chain. You must declare a dependency on an appropriate HTTP" +
48 "implementation or pass in an SdkHttpClient explicitly to the" +
49 "client builder.")
50 .build());
51 }
52
53 }
54