diff --git a/.changes/next-release/bugfix-AWSSDKforJavav2-238f31f.json b/.changes/next-release/bugfix-AWSSDKforJavav2-238f31f.json new file mode 100644 index 000000000000..fa5fbf52a05d --- /dev/null +++ b/.changes/next-release/bugfix-AWSSDKforJavav2-238f31f.json @@ -0,0 +1,6 @@ +{ + "type": "bugfix", + "category": "AWS SDK for Java v2", + "contributor": "Techno3d", + "description": "Fix a bug where an SDK Client that has a plugin which supplies a region would throw an SdkClientException stating that no region was set." +} diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java index 34f165dd1767..1ff44b3e31d4 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/builder/SdkDefaultClientBuilder.java @@ -202,14 +202,14 @@ protected final SdkClientConfiguration syncClientConfiguration() { configuration = mergeChildDefaults(configuration); configuration = mergeGlobalDefaults(configuration); + // Invoke the plugins + configuration = invokePlugins(configuration); + // Create additional configuration from the default-applied configuration configuration = finalizeChildConfiguration(configuration); configuration = finalizeSyncConfiguration(configuration); configuration = finalizeConfiguration(configuration); - // Invoke the plugins - configuration = invokePlugins(configuration); - return configuration; } @@ -233,14 +233,14 @@ protected final SdkClientConfiguration asyncClientConfiguration() { configuration = mergeChildDefaults(configuration); configuration = mergeGlobalDefaults(configuration); + // Invoke the plugins + configuration = invokePlugins(configuration); + // Create additional configuration from the default-applied configuration configuration = finalizeChildConfiguration(configuration); configuration = finalizeAsyncConfiguration(configuration); configuration = finalizeConfiguration(configuration); - // Invoke the plugins - configuration = invokePlugins(configuration); - return configuration; } diff --git a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/SdkPluginTest.java b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/SdkPluginTest.java index f36061fe8583..1b3bd4240582 100644 --- a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/SdkPluginTest.java +++ b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/SdkPluginTest.java @@ -40,6 +40,7 @@ import java.util.stream.Stream; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.api.Test; import org.mockito.Mockito; import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; @@ -595,6 +596,15 @@ public void beforeTransmission(Context.BeforeTransmission context, ExecutionAttr assertThat(timesInterceptorCalled).hasValueGreaterThanOrEqualTo(1); } + @Test + public void pluginSetRegionIsUsed() { + ProtocolRestJsonClient client = ProtocolRestJsonClient.builder() + .addPlugin(config -> ((ProtocolRestJsonServiceClientConfiguration.Builder) config).region(Region.US_EAST_1)) + .credentialsProvider(DEFAULT_CREDENTIALS) + .build(); + assertThat(client.serviceClientConfiguration().region()).isEqualTo(Region.US_EAST_1); + } + private static ProtocolRestJsonClientBuilder defaultClientBuilder() { return ProtocolRestJsonClient.builder().region(Region.US_WEST_2).credentialsProvider(DEFAULT_CREDENTIALS); }