@@ -114,6 +114,8 @@ public abstract class SdkDefaultClientBuilder<B extends SdkClientBuilder<B, C>,
114
114
private final SdkHttpClient .Builder defaultHttpClientBuilder ;
115
115
private final SdkAsyncHttpClient .Builder defaultAsyncHttpClientBuilder ;
116
116
117
+ private ClientOverrideConfiguration clientOverrideConfiguration ;
118
+
117
119
private SdkHttpClient .Builder httpClientBuilder ;
118
120
private SdkAsyncHttpClient .Builder asyncHttpClientBuilder ;
119
121
@@ -150,6 +152,7 @@ public final C build() {
150
152
/**
151
153
* Return a client configuration object, populated with the following chain of priorities.
152
154
* <ol>
155
+ * <li>Client Configuration Overrides</li>
153
156
* <li>Customer Configuration</li>
154
157
* <li>Service-Specific Defaults</li>
155
158
* <li>Global Defaults</li>
@@ -158,6 +161,9 @@ public final C build() {
158
161
protected final SdkClientConfiguration syncClientConfiguration () {
159
162
SdkClientConfiguration configuration = clientConfiguration .build ();
160
163
164
+ // Apply overrides
165
+ configuration = setOverrides (configuration );
166
+
161
167
// Apply defaults
162
168
configuration = mergeChildDefaults (configuration );
163
169
configuration = mergeGlobalDefaults (configuration );
@@ -173,6 +179,7 @@ protected final SdkClientConfiguration syncClientConfiguration() {
173
179
/**
174
180
* Return a client configuration object, populated with the following chain of priorities.
175
181
* <ol>
182
+ * <li>Client Configuration Overrides</li>
176
183
* <li>Customer Configuration</li>
177
184
* <li>Implementation/Service-Specific Configuration</li>
178
185
* <li>Global Default Configuration</li>
@@ -181,6 +188,9 @@ protected final SdkClientConfiguration syncClientConfiguration() {
181
188
protected final SdkClientConfiguration asyncClientConfiguration () {
182
189
SdkClientConfiguration configuration = clientConfiguration .build ();
183
190
191
+ // Apply overrides
192
+ configuration = setOverrides (configuration );
193
+
184
194
// Apply defaults
185
195
configuration = mergeChildDefaults (configuration );
186
196
configuration = mergeGlobalDefaults (configuration );
@@ -193,6 +203,39 @@ protected final SdkClientConfiguration asyncClientConfiguration() {
193
203
return configuration ;
194
204
}
195
205
206
+ private SdkClientConfiguration setOverrides (SdkClientConfiguration configuration ) {
207
+ if (clientOverrideConfiguration == null ) {
208
+ return configuration ;
209
+ }
210
+
211
+ SdkClientConfiguration .Builder builder = configuration .toBuilder ();
212
+
213
+ builder .option (EXECUTION_INTERCEPTORS , clientOverrideConfiguration .executionInterceptors ());
214
+ builder .option (RETRY_POLICY , clientOverrideConfiguration .retryPolicy ().orElse (null ));
215
+ builder .option (ADDITIONAL_HTTP_HEADERS , clientOverrideConfiguration .headers ());
216
+ builder .option (SIGNER , clientOverrideConfiguration .advancedOption (SIGNER ).orElse (null ));
217
+ builder .option (USER_AGENT_SUFFIX , clientOverrideConfiguration .advancedOption (USER_AGENT_SUFFIX ).orElse (null ));
218
+ builder .option (USER_AGENT_PREFIX , clientOverrideConfiguration .advancedOption (USER_AGENT_PREFIX ).orElse (null ));
219
+ builder .option (API_CALL_TIMEOUT , clientOverrideConfiguration .apiCallTimeout ().orElse (null ));
220
+ builder .option (API_CALL_ATTEMPT_TIMEOUT , clientOverrideConfiguration .apiCallAttemptTimeout ().orElse (null ));
221
+ builder .option (DISABLE_HOST_PREFIX_INJECTION ,
222
+ clientOverrideConfiguration .advancedOption (DISABLE_HOST_PREFIX_INJECTION ).orElse (null ));
223
+ builder .option (PROFILE_FILE , clientOverrideConfiguration .defaultProfileFile ().orElse (null ));
224
+ builder .option (PROFILE_NAME , clientOverrideConfiguration .defaultProfileName ().orElse (null ));
225
+ builder .option (METRIC_PUBLISHERS , clientOverrideConfiguration .metricPublishers ());
226
+ builder .option (EXECUTION_ATTRIBUTES , clientOverrideConfiguration .executionAttributes ());
227
+
228
+ clientOverrideConfiguration .advancedOption (ENDPOINT_OVERRIDDEN_OVERRIDE ).ifPresent (value -> {
229
+ builder .option (ENDPOINT_OVERRIDDEN , value );
230
+ });
231
+
232
+ clientOverrideConfiguration .advancedOption (SIGNER ).ifPresent (s -> {
233
+ builder .option (SIGNER_OVERRIDDEN , true );
234
+ });
235
+
236
+ return builder .build ();
237
+ }
238
+
196
239
/**
197
240
* Optionally overridden by child implementations to apply implementation-specific default configuration.
198
241
* (eg. AWS's default credentials providers)
@@ -399,31 +442,24 @@ public final void setAsyncConfiguration(ClientAsyncConfiguration asyncConfigurat
399
442
400
443
@ Override
401
444
public final B overrideConfiguration (ClientOverrideConfiguration overrideConfig ) {
402
- clientConfiguration .option (EXECUTION_INTERCEPTORS , overrideConfig .executionInterceptors ());
403
- clientConfiguration .option (RETRY_POLICY , overrideConfig .retryPolicy ().orElse (null ));
404
- clientConfiguration .option (ADDITIONAL_HTTP_HEADERS , overrideConfig .headers ());
405
- clientConfiguration .option (SIGNER , overrideConfig .advancedOption (SIGNER ).orElse (null ));
406
- clientConfiguration .option (USER_AGENT_SUFFIX , overrideConfig .advancedOption (USER_AGENT_SUFFIX ).orElse (null ));
407
- clientConfiguration .option (USER_AGENT_PREFIX , overrideConfig .advancedOption (USER_AGENT_PREFIX ).orElse (null ));
408
- clientConfiguration .option (API_CALL_TIMEOUT , overrideConfig .apiCallTimeout ().orElse (null ));
409
- clientConfiguration .option (API_CALL_ATTEMPT_TIMEOUT , overrideConfig .apiCallAttemptTimeout ().orElse (null ));
410
- clientConfiguration .option (DISABLE_HOST_PREFIX_INJECTION ,
411
- overrideConfig .advancedOption (DISABLE_HOST_PREFIX_INJECTION ).orElse (null ));
412
- clientConfiguration .option (PROFILE_FILE , overrideConfig .defaultProfileFile ().orElse (null ));
413
- clientConfiguration .option (PROFILE_NAME , overrideConfig .defaultProfileName ().orElse (null ));
414
- clientConfiguration .option (METRIC_PUBLISHERS , overrideConfig .metricPublishers ());
415
- clientConfiguration .option (EXECUTION_ATTRIBUTES , overrideConfig .executionAttributes ());
416
- overrideConfig .advancedOption (ENDPOINT_OVERRIDDEN_OVERRIDE ).ifPresent (value -> {
417
- clientConfiguration .option (ENDPOINT_OVERRIDDEN , value );
418
- });
419
- overrideConfig .advancedOption (SIGNER ).ifPresent (s -> clientConfiguration .option (SIGNER_OVERRIDDEN , true ));
445
+ clientOverrideConfiguration = overrideConfig ;
446
+
420
447
return thisBuilder ();
421
448
}
422
449
423
450
public final void setOverrideConfiguration (ClientOverrideConfiguration overrideConfiguration ) {
424
451
overrideConfiguration (overrideConfiguration );
425
452
}
426
453
454
+ @ Override
455
+ public final ClientOverrideConfiguration overrideConfiguration () {
456
+ if (clientOverrideConfiguration == null ) {
457
+ return ClientOverrideConfiguration .builder ().build ();
458
+ }
459
+
460
+ return clientOverrideConfiguration ;
461
+ }
462
+
427
463
public final B httpClient (SdkHttpClient httpClient ) {
428
464
clientConfiguration .option (SdkClientOption .SYNC_HTTP_CLIENT , httpClient );
429
465
return thisBuilder ();
0 commit comments