diff --git a/codegen-lite-maven-plugin/src/main/java/software/amazon/awssdk/codegen/lite/maven/plugin/DefaultsModeGenerationMojo.java b/codegen-lite-maven-plugin/src/main/java/software/amazon/awssdk/codegen/lite/maven/plugin/DefaultsModeGenerationMojo.java index 369595e1a246..f75936f95794 100644 --- a/codegen-lite-maven-plugin/src/main/java/software/amazon/awssdk/codegen/lite/maven/plugin/DefaultsModeGenerationMojo.java +++ b/codegen-lite-maven-plugin/src/main/java/software/amazon/awssdk/codegen/lite/maven/plugin/DefaultsModeGenerationMojo.java @@ -34,8 +34,8 @@ @Mojo(name = "generate-defaults-mode") public class DefaultsModeGenerationMojo extends AbstractMojo { - private static final String DEFAULTS_MODE_BASE = "software.amazon.awssdk.defaultsmode"; - private static final String DEFAULTS_MODE_CONFIGURATION_BASE = "software.amazon.awssdk.internal.defaultsmode"; + private static final String DEFAULTS_MODE_BASE = "software.amazon.awssdk.awscore.defaultsmode"; + private static final String DEFAULTS_MODE_CONFIGURATION_BASE = "software.amazon.awssdk.awscore.internal.defaultsmode"; @Parameter(property = "outputDirectory", defaultValue = "${project.build.directory}") private String outputDirectory; @@ -44,7 +44,7 @@ public class DefaultsModeGenerationMojo extends AbstractMojo { private MavenProject project; @Parameter(property = "defaultConfigurationFile", defaultValue = - "${basedir}/src/main/resources/software/amazon/awssdk/internal/defaults/sdk-default-configuration.json") + "${basedir}/src/main/resources/software/amazon/awssdk/awscore/internal/defaults/sdk-default-configuration.json") private File defaultConfigurationFile; public void execute() { diff --git a/codegen-lite/src/main/java/software/amazon/awssdk/codegen/lite/defaultsmode/DefaultsModeGenerator.java b/codegen-lite/src/main/java/software/amazon/awssdk/codegen/lite/defaultsmode/DefaultsModeGenerator.java index 0a318e1f69c9..3ce48e8d4a72 100644 --- a/codegen-lite/src/main/java/software/amazon/awssdk/codegen/lite/defaultsmode/DefaultsModeGenerator.java +++ b/codegen-lite/src/main/java/software/amazon/awssdk/codegen/lite/defaultsmode/DefaultsModeGenerator.java @@ -140,7 +140,7 @@ private CodeBlock documentation() { .add("

The defaults mode can be configured:") .add(System.lineSeparator()) .add("

    ") - .add("
  1. Directly on a client via {@code ClientOverrideConfiguration.Builder#defaultsMode" + .add("
  2. Directly on a client via {@code AwsClientBuilder.Builder#defaultsMode" + "(DefaultsMode)}.
  3. ") .add(System.lineSeparator()) .add("
  4. On a configuration profile via the \"defaults_mode\" profile file property.
  5. ") diff --git a/codegen-lite/src/test/resources/software/amazon/awssdk/codegen/lite/defaultsmode/defaults-mode.java b/codegen-lite/src/test/resources/software/amazon/awssdk/codegen/lite/defaultsmode/defaults-mode.java index 7b75cebc3134..01c77d2f12d4 100644 --- a/codegen-lite/src/test/resources/software/amazon/awssdk/codegen/lite/defaultsmode/defaults-mode.java +++ b/codegen-lite/src/test/resources/software/amazon/awssdk/codegen/lite/defaultsmode/defaults-mode.java @@ -27,7 +27,7 @@ *

    * The defaults mode can be configured: *

      - *
    1. Directly on a client via {@code ClientOverrideConfiguration.Builder#defaultsMode(DefaultsMode)}.
    2. + *
    3. Directly on a client via {@code AwsClientBuilder.Builder#defaultsMode(DefaultsMode)}.
    4. *
    5. On a configuration profile via the "defaults_mode" profile file property.
    6. *
    7. Globally via the "aws.defaultsMode" system property.
    8. *
    9. Globally via the "AWS_DEFAULTS_MODE" environment variable.
    10. diff --git a/core/aws-core/pom.xml b/core/aws-core/pom.xml index b19b018d5811..3c05d0edbe5c 100644 --- a/core/aws-core/pom.xml +++ b/core/aws-core/pom.xml @@ -164,6 +164,19 @@ + + software.amazon.awssdk + codegen-lite-maven-plugin + ${awsjavasdk.version} + + + generate-sources + + generate-defaults-mode + + + + diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java index e8b22a8b28d7..5d972544c1aa 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsClientBuilder.java @@ -17,6 +17,7 @@ import software.amazon.awssdk.annotations.SdkPublicApi; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.core.client.builder.SdkClientBuilder; import software.amazon.awssdk.regions.Region; @@ -64,4 +65,24 @@ public interface AwsClientBuilder */ BuilderT region(Region region); + + /** + * Sets the {@link DefaultsMode} that will be used to determine how certain default configuration options are resolved in + * the SDK. + * + *

      + * If this is not specified, the SDK will attempt to identify the defaults mode automatically using the following logic: + *

        + *
      1. Check the "defaults_mode" profile file property.
      2. + *
      3. Check "aws.defaultsMode" system property.
      4. + *
      5. Check the "AWS_DEFAULTS_MODE" environment variable.
      6. + *
      + * + * @param defaultsMode the defaultsMode to use + * @return This object for method chaining. + * @see DefaultsMode + */ + default BuilderT defaultsMode(DefaultsMode defaultsMode) { + throw new UnsupportedOperationException(); + } } diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsDefaultClientBuilder.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsDefaultClientBuilder.java index c512ed49e1cd..0c798391d6a5 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsDefaultClientBuilder.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/builder/AwsDefaultClientBuilder.java @@ -15,7 +15,7 @@ package software.amazon.awssdk.awscore.client.builder; -import static software.amazon.awssdk.core.client.config.SdkClientOption.DEFAULTS_MODE; +import static software.amazon.awssdk.awscore.client.config.AwsClientOption.DEFAULTS_MODE; import java.net.URI; import java.util.Arrays; @@ -27,23 +27,23 @@ import software.amazon.awssdk.auth.credentials.DefaultCredentialsProvider; import software.amazon.awssdk.awscore.client.config.AwsAdvancedClientOption; import software.amazon.awssdk.awscore.client.config.AwsClientOption; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.awscore.endpoint.DefaultServiceEndpointBuilder; import software.amazon.awssdk.awscore.eventstream.EventStreamInitialRequestInterceptor; import software.amazon.awssdk.awscore.interceptor.HelpfulUnknownHostExceptionInterceptor; import software.amazon.awssdk.awscore.internal.defaultsmode.AutoDefaultsModeDiscovery; +import software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeConfiguration; +import software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeResolver; import software.amazon.awssdk.awscore.retry.AwsRetryPolicy; import software.amazon.awssdk.core.client.builder.SdkDefaultClientBuilder; import software.amazon.awssdk.core.client.config.SdkAdvancedClientOption; import software.amazon.awssdk.core.client.config.SdkClientConfiguration; import software.amazon.awssdk.core.client.config.SdkClientOption; import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; -import software.amazon.awssdk.core.internal.defaultsmode.DefaultsModeResolver; import software.amazon.awssdk.core.retry.RetryMode; import software.amazon.awssdk.core.retry.RetryPolicy; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.async.SdkAsyncHttpClient; -import software.amazon.awssdk.internal.defaultsmode.DefaultsModeConfiguration; import software.amazon.awssdk.profiles.ProfileFile; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.regions.ServiceMetadata; @@ -125,7 +125,7 @@ protected final AttributeMap childHttpConfig() { @Override protected final AttributeMap childHttpConfig(SdkClientConfiguration configuration) { AttributeMap attributeMap = serviceHttpConfig(); - return attributeMap.merge(httpConfigFromDefaultsMode(configuration)); + return mergeSmartHttpDefaults(configuration, attributeMap); } /** @@ -160,6 +160,13 @@ protected SdkClientConfiguration mergeInternalDefaults(SdkClientConfiguration co return configuration; } + /** + * Return a client configuration object, populated with the following chain of priorities. + *
        + *
      1. Defaults vended from {@link DefaultsMode}
      2. + *
      3. AWS Global Defaults
      4. + *
      + */ @Override protected final SdkClientConfiguration finalizeChildConfiguration(SdkClientConfiguration configuration) { configuration = finalizeServiceConfiguration(configuration); @@ -168,9 +175,7 @@ protected final SdkClientConfiguration finalizeChildConfiguration(SdkClientConfi .option(AwsClientOption.AWS_REGION, resolveRegion(configuration)) .build(); - configuration = configuration.toBuilder() - .option(SdkClientOption.DEFAULTS_MODE, resolveDefaultsMode(configuration)) - .build(); + configuration = mergeSmartDefaults(configuration); return configuration.toBuilder() .option(AwsClientOption.CREDENTIALS_PROVIDER, resolveCredentials(configuration)) @@ -181,6 +186,16 @@ protected final SdkClientConfiguration finalizeChildConfiguration(SdkClientConfi .build(); } + private SdkClientConfiguration mergeSmartDefaults(SdkClientConfiguration configuration) { + DefaultsMode defaultsMode = resolveDefaultsMode(configuration); + RetryMode retryMode = DefaultsModeConfiguration.defaultConfig(defaultsMode).get(SdkClientOption.DEFAULT_RETRY_MODE); + + return configuration.toBuilder() + .option(DEFAULTS_MODE, defaultsMode) + .build() + .merge(c -> c.option(SdkClientOption.DEFAULT_RETRY_MODE, retryMode)); + } + /** * Optionally overridden by child classes to derive service-specific configuration from the default-applied configuration. */ @@ -189,11 +204,11 @@ protected SdkClientConfiguration finalizeServiceConfiguration(SdkClientConfigura } /** - * Return the defaults specified for each {@link DefaultsMode} + * Merged the HTTP defaults specified for each {@link DefaultsMode} */ - private AttributeMap httpConfigFromDefaultsMode(SdkClientConfiguration sdkClientConfiguration) { - DefaultsMode defaultsMode = sdkClientConfiguration.option(DEFAULTS_MODE); - return DefaultsModeConfiguration.defaultHttpConfig(defaultsMode); + private AttributeMap mergeSmartHttpDefaults(SdkClientConfiguration configuration, AttributeMap attributeMap) { + DefaultsMode defaultsMode = configuration.option(DEFAULTS_MODE); + return attributeMap.merge(DefaultsModeConfiguration.defaultHttpConfig(defaultsMode)); } /** @@ -248,12 +263,13 @@ private Region regionFromDefaultProvider(SdkClientConfiguration config) { } private DefaultsMode resolveDefaultsMode(SdkClientConfiguration config) { - DefaultsMode defaultsMode = config.option(DEFAULTS_MODE) != null ? - config.option(DEFAULTS_MODE) : - DefaultsModeResolver.create() - .profileFile(() -> config.option(SdkClientOption.PROFILE_FILE)) - .profileName(config.option(SdkClientOption.PROFILE_NAME)) - .resolve(); + DefaultsMode defaultsMode = + config.option(AwsClientOption.DEFAULTS_MODE) != null ? + config.option(AwsClientOption.DEFAULTS_MODE) : + DefaultsModeResolver.create() + .profileFile(() -> config.option(SdkClientOption.PROFILE_FILE)) + .profileName(config.option(SdkClientOption.PROFILE_NAME)) + .resolve(); if (defaultsMode == DefaultsMode.AUTO) { defaultsMode = autoDefaultsModeDiscovery.discover(config.option(AwsClientOption.AWS_REGION)); @@ -291,18 +307,11 @@ private RetryPolicy resolveAwsRetryPolicy(SdkClientConfiguration config) { RetryMode retryMode = RetryMode.resolver() .profileFile(() -> config.option(SdkClientOption.PROFILE_FILE)) .profileName(config.option(SdkClientOption.PROFILE_NAME)) - .defaultRetryMode(resolveDefaultRetryMode(config)) + .defaultRetryMode(config.option(SdkClientOption.DEFAULT_RETRY_MODE)) .resolve(); return AwsRetryPolicy.forRetryMode(retryMode); } - private RetryMode resolveDefaultRetryMode(SdkClientConfiguration config) { - DefaultsMode defaultsMode = config.option(DEFAULTS_MODE); - RetryMode retryMode = config.option(SdkClientOption.DEFAULT_RETRY_MODE); - return retryMode != null ? retryMode : - DefaultsModeConfiguration.defaultConfig(defaultsMode).get(SdkClientOption.DEFAULT_RETRY_MODE); - } - @Override public final BuilderT region(Region region) { clientConfiguration.option(AwsClientOption.AWS_REGION, region); @@ -333,4 +342,14 @@ private List awsInterceptors() { return Arrays.asList(new HelpfulUnknownHostExceptionInterceptor(), new EventStreamInitialRequestInterceptor()); } + + @Override + public final BuilderT defaultsMode(DefaultsMode defaultsMode) { + clientConfiguration.option(DEFAULTS_MODE, defaultsMode); + return thisBuilder(); + } + + public final void setDefaultsMode(DefaultsMode defaultsMode) { + defaultsMode(defaultsMode); + } } diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java index 44e6f69851c8..47965708145a 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/client/config/AwsClientOption.java @@ -18,6 +18,7 @@ import software.amazon.awssdk.annotations.SdkProtectedApi; import software.amazon.awssdk.auth.credentials.AwsCredentialsProvider; import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.core.client.config.ClientOption; import software.amazon.awssdk.regions.Region; @@ -53,6 +54,11 @@ public final class AwsClientOption extends ClientOption { */ public static final AwsClientOption ENDPOINT_PREFIX = new AwsClientOption<>(String.class); + /** + * Option to specify the {@link DefaultsMode} + */ + public static final AwsClientOption DEFAULTS_MODE = new AwsClientOption<>(DefaultsMode.class); + private AwsClientOption(Class valueClass) { super(valueClass); } diff --git a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscovery.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscovery.java index 7ace28d39667..5adc6ab7a092 100644 --- a/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscovery.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscovery.java @@ -17,8 +17,8 @@ import java.util.Optional; import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.core.SdkSystemSetting; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.regions.internal.util.EC2MetadataUtils; import software.amazon.awssdk.utils.JavaSystemSetting; diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeResolver.java b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeResolver.java similarity index 96% rename from core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeResolver.java rename to core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeResolver.java index f0a71f5df37d..c20ceebd04f9 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeResolver.java +++ b/core/aws-core/src/main/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeResolver.java @@ -13,15 +13,15 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.core.internal.defaultsmode; +package software.amazon.awssdk.awscore.internal.defaultsmode; import java.util.Locale; import java.util.Optional; import java.util.function.Supplier; import software.amazon.awssdk.annotations.SdkInternalApi; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.core.SdkSystemSetting; import software.amazon.awssdk.core.retry.RetryMode; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.profiles.ProfileFile; import software.amazon.awssdk.profiles.ProfileFileSystemSetting; import software.amazon.awssdk.profiles.ProfileProperty; diff --git a/core/sdk-core/src/main/resources/software/amazon/awssdk/internal/defaults/sdk-default-configuration.json b/core/aws-core/src/main/resources/software/amazon/awssdk/awscore/internal/defaults/sdk-default-configuration.json similarity index 100% rename from core/sdk-core/src/main/resources/software/amazon/awssdk/internal/defaults/sdk-default-configuration.json rename to core/aws-core/src/main/resources/software/amazon/awssdk/awscore/internal/defaults/sdk-default-configuration.json diff --git a/core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultAwsClientBuilderTest.java b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultAwsClientBuilderTest.java index 6d973f2467d9..227e406ceac4 100644 --- a/core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultAwsClientBuilderTest.java +++ b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultAwsClientBuilderTest.java @@ -42,12 +42,12 @@ import org.mockito.runners.MockitoJUnitRunner; import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider; import software.amazon.awssdk.auth.signer.Aws4Signer; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.awscore.internal.defaultsmode.AutoDefaultsModeDiscovery; import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; import software.amazon.awssdk.core.client.config.SdkClientConfiguration; import software.amazon.awssdk.core.client.config.SdkClientOption; import software.amazon.awssdk.core.signer.Signer; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.SdkHttpConfigurationOption; import software.amazon.awssdk.http.async.SdkAsyncHttpClient; diff --git a/core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultsModeTest.java b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultsModeTest.java index f069f6bf35ba..258ff046e9cc 100644 --- a/core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultsModeTest.java +++ b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/client/builder/DefaultsModeTest.java @@ -20,7 +20,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static software.amazon.awssdk.awscore.client.config.AwsAdvancedClientOption.ENABLE_DEFAULT_REGION_DETECTION; -import static software.amazon.awssdk.core.client.config.SdkClientOption.DEFAULTS_MODE; +import static software.amazon.awssdk.awscore.client.config.AwsClientOption.DEFAULTS_MODE; import static software.amazon.awssdk.core.client.config.SdkClientOption.DEFAULT_RETRY_MODE; import static software.amazon.awssdk.core.client.config.SdkClientOption.RETRY_POLICY; @@ -30,15 +30,15 @@ import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import software.amazon.awssdk.auth.credentials.AnonymousCredentialsProvider; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.awscore.internal.defaultsmode.AutoDefaultsModeDiscovery; +import software.amazon.awssdk.awscore.internal.defaultsmode.DefaultsModeConfiguration; import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; import software.amazon.awssdk.core.client.config.SdkClientConfiguration; import software.amazon.awssdk.core.retry.RetryMode; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.SdkHttpConfigurationOption; import software.amazon.awssdk.http.async.SdkAsyncHttpClient; -import software.amazon.awssdk.internal.defaultsmode.DefaultsModeConfiguration; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.utils.AttributeMap; @@ -83,7 +83,7 @@ public void nonLegacyDefaultsMode_shouldApplySdkDefaultsAndHttpDefaults() { TestClient client = testClientBuilder().region(Region.US_WEST_1) - .overrideConfiguration(o -> o.defaultsMode(targetMode)) + .defaultsMode(targetMode) .httpClientBuilder((SdkHttpClient.Builder) serviceDefaults -> { AttributeMap defaultHttpConfig = DefaultsModeConfiguration.defaultHttpConfig(targetMode); AttributeMap mergedDefaults = SERVICE_DEFAULTS.merge(defaultHttpConfig); @@ -104,7 +104,7 @@ public void nonLegacyDefaultsModeAsyncClient_shouldApplySdkDefaultsAndHttpDefaul TestAsyncClient client = testAsyncClientBuilder().region(Region.US_WEST_1) - .overrideConfiguration(o -> o.defaultsMode(targetMode)) + .defaultsMode(targetMode) .httpClientBuilder((SdkHttpClient.Builder) serviceDefaults -> { AttributeMap defaultHttpConfig = DefaultsModeConfiguration.defaultHttpConfig(targetMode); AttributeMap mergedDefaults = SERVICE_DEFAULTS.merge(defaultHttpConfig); @@ -123,8 +123,8 @@ public void nonLegacyDefaultsModeAsyncClient_shouldApplySdkDefaultsAndHttpDefaul public void clientOverrideRetryMode_shouldTakePrecedence() { TestClient client = testClientBuilder().region(Region.US_WEST_1) - .overrideConfiguration(o -> o.defaultsMode(DefaultsMode.IN_REGION) - .retryPolicy(RetryMode.LEGACY)) + .defaultsMode(DefaultsMode.IN_REGION) + .overrideConfiguration(o -> o.retryPolicy(RetryMode.LEGACY)) .build(); assertThat(client.clientConfiguration.option(DEFAULTS_MODE)).isEqualTo(DefaultsMode.IN_REGION); assertThat(client.clientConfiguration.option(RETRY_POLICY).retryMode()).isEqualTo(RetryMode.LEGACY); @@ -136,7 +136,7 @@ public void autoMode_shouldResolveDefaultsMode() { when(autoModeDiscovery.discover(any(Region.class))).thenReturn(expectedMode); TestClient client = testClientBuilder().region(Region.US_WEST_1) - .overrideConfiguration(o -> o.defaultsMode(DefaultsMode.AUTO)) + .defaultsMode(DefaultsMode.AUTO) .build(); assertThat(client.clientConfiguration.option(DEFAULTS_MODE)).isEqualTo(expectedMode); diff --git a/core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/AutoDefaultsModeDiscoveryTest.java b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscoveryTest.java similarity index 98% rename from core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/AutoDefaultsModeDiscoveryTest.java rename to core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscoveryTest.java index ae3cd7bc7e12..0170dfc39da4 100644 --- a/core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/AutoDefaultsModeDiscoveryTest.java +++ b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/AutoDefaultsModeDiscoveryTest.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.awscore.internal; +package software.amazon.awssdk.awscore.internal.defaultsmode; import static com.github.tomakehurst.wiremock.client.WireMock.aResponse; import static com.github.tomakehurst.wiremock.client.WireMock.get; @@ -31,9 +31,8 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import software.amazon.awssdk.awscore.internal.defaultsmode.AutoDefaultsModeDiscovery; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.core.SdkSystemSetting; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.regions.internal.util.EC2MetadataUtils; import software.amazon.awssdk.testutils.EnvironmentVariableHelper; diff --git a/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeConfigurationTest.java b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeConfigurationTest.java similarity index 88% rename from core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeConfigurationTest.java rename to core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeConfigurationTest.java index 6a1e3e12faae..e7a2ba9f7b9b 100644 --- a/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeConfigurationTest.java +++ b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeConfigurationTest.java @@ -13,14 +13,13 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.core.internal.defaultsmode; +package software.amazon.awssdk.awscore.internal.defaultsmode; import static org.assertj.core.api.Assertions.assertThat; import java.util.Arrays; import org.junit.Test; -import software.amazon.awssdk.defaultsmode.DefaultsMode; -import software.amazon.awssdk.internal.defaultsmode.DefaultsModeConfiguration; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.utils.AttributeMap; public class DefaultsModeConfigurationTest { diff --git a/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeTest.java b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeResolverTest.java similarity index 97% rename from core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeTest.java rename to core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeResolverTest.java index 60e1538c83f9..a0df1ee0c562 100644 --- a/core/sdk-core/src/test/java/software/amazon/awssdk/core/internal/defaultsmode/DefaultsModeTest.java +++ b/core/aws-core/src/test/java/software/amazon/awssdk/awscore/internal/defaultsmode/DefaultsModeResolverTest.java @@ -13,7 +13,7 @@ * permissions and limitations under the License. */ -package software.amazon.awssdk.core.internal.defaultsmode; +package software.amazon.awssdk.awscore.internal.defaultsmode; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; @@ -28,14 +28,14 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.core.SdkSystemSetting; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.profiles.ProfileFileSystemSetting; import software.amazon.awssdk.testutils.EnvironmentVariableHelper; import software.amazon.awssdk.utils.Validate; @RunWith(Parameterized.class) -public class DefaultsModeTest { +public class DefaultsModeResolverTest { private static final EnvironmentVariableHelper ENVIRONMENT_VARIABLE_HELPER = new EnvironmentVariableHelper(); @Parameterized.Parameter diff --git a/core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertyMixedCase b/core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertyMixedCase similarity index 100% rename from core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertyMixedCase rename to core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertyMixedCase diff --git a/core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertyNotSet b/core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertyNotSet similarity index 100% rename from core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertyNotSet rename to core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertyNotSet diff --git a/core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertySetToAuto b/core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertySetToAuto similarity index 100% rename from core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertySetToAuto rename to core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertySetToAuto diff --git a/core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertySetToLegacy b/core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertySetToLegacy similarity index 100% rename from core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertySetToLegacy rename to core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertySetToLegacy diff --git a/core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertySetToStandard b/core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertySetToStandard similarity index 100% rename from core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertySetToStandard rename to core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertySetToStandard diff --git a/core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertySetToUnsupportedValue b/core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertySetToUnsupportedValue similarity index 100% rename from core/sdk-core/src/test/resources/software/amazon/awssdk/core/internal/defaultsmode/PropertySetToUnsupportedValue rename to core/aws-core/src/test/resources/software/amazon/awssdk/awscore/internal/defaultsmode/PropertySetToUnsupportedValue diff --git a/core/sdk-core/pom.xml b/core/sdk-core/pom.xml index a9461be0655d..1f7a1604caad 100644 --- a/core/sdk-core/pom.xml +++ b/core/sdk-core/pom.xml @@ -238,19 +238,6 @@ - - software.amazon.awssdk - codegen-lite-maven-plugin - ${awsjavasdk.version} - - - generate-sources - - generate-defaults-mode - - - - diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkSystemSetting.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkSystemSetting.java index be9ba3629161..896f72277495 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkSystemSetting.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkSystemSetting.java @@ -19,7 +19,6 @@ import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration; import software.amazon.awssdk.core.retry.RetryMode; import software.amazon.awssdk.core.retry.RetryPolicy; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.utils.SystemSetting; /** @@ -170,8 +169,7 @@ public enum SdkSystemSetting implements SystemSetting { AWS_MAX_ATTEMPTS("aws.maxAttempts", null), /** - * Which {@link DefaultsMode} to use, case insensitive - * @see DefaultsMode + * Which {@code DefaultsMode} to use, case insensitive */ AWS_DEFAULTS_MODE("aws.defaultsMode", null), 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 64d588b95cae..0f4e7f075890 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 @@ -27,7 +27,6 @@ import static software.amazon.awssdk.core.client.config.SdkClientOption.API_CALL_TIMEOUT; import static software.amazon.awssdk.core.client.config.SdkClientOption.ASYNC_HTTP_CLIENT; import static software.amazon.awssdk.core.client.config.SdkClientOption.CRC32_FROM_COMPRESSED_DATA_ENABLED; -import static software.amazon.awssdk.core.client.config.SdkClientOption.DEFAULTS_MODE; import static software.amazon.awssdk.core.client.config.SdkClientOption.ENDPOINT_OVERRIDDEN; import static software.amazon.awssdk.core.client.config.SdkClientOption.EXECUTION_ATTRIBUTES; import static software.amazon.awssdk.core.client.config.SdkClientOption.EXECUTION_INTERCEPTORS; @@ -69,7 +68,6 @@ import software.amazon.awssdk.core.retry.RetryMode; import software.amazon.awssdk.core.retry.RetryPolicy; import software.amazon.awssdk.core.util.SdkUserAgent; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.ExecutableHttpRequest; import software.amazon.awssdk.http.HttpExecuteRequest; import software.amazon.awssdk.http.SdkHttpClient; @@ -149,7 +147,6 @@ public final C build() { *
        *
      1. Customer Configuration
      2. *
      3. Service-Specific Defaults
      4. - *
      5. Defaults vended by {@link DefaultsMode}
      6. *
      7. Global Defaults
      8. *
      */ @@ -173,7 +170,6 @@ protected final SdkClientConfiguration syncClientConfiguration() { *
        *
      1. Customer Configuration
      2. *
      3. Implementation/Service-Specific Configuration
      4. - *
      5. Defaults vended by {@link DefaultsMode}
      6. *
      7. Global Default Configuration
      8. *
      */ @@ -405,7 +401,6 @@ public final B overrideConfiguration(ClientOverrideConfiguration overrideConfig) overrideConfig.advancedOption(ENDPOINT_OVERRIDDEN_OVERRIDE).ifPresent(value -> { clientConfiguration.option(ENDPOINT_OVERRIDDEN, value); }); - clientConfiguration.option(DEFAULTS_MODE, overrideConfig.defaultsMode().orElse(null)); overrideConfig.advancedOption(SIGNER).ifPresent(s -> clientConfiguration.option(SIGNER_OVERRIDDEN, true)); return thisBuilder(); } diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.java index a2602105612f..81b99d999667 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/ClientOverrideConfiguration.java @@ -31,7 +31,6 @@ import software.amazon.awssdk.core.retry.RetryMode; import software.amazon.awssdk.core.retry.RetryPolicy; import software.amazon.awssdk.core.sync.ResponseTransformer; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.metrics.MetricPublisher; import software.amazon.awssdk.profiles.ProfileFile; import software.amazon.awssdk.profiles.ProfileFileSystemSetting; @@ -61,7 +60,6 @@ public final class ClientOverrideConfiguration private final String defaultProfileName; private final List metricPublishers; private final ExecutionAttributes executionAttributes; - private final DefaultsMode defaultsMode; /** * Initialize this configuration. Private to require use of {@link #builder()}. @@ -77,7 +75,6 @@ private ClientOverrideConfiguration(Builder builder) { this.defaultProfileName = builder.defaultProfileName(); this.metricPublishers = Collections.unmodifiableList(new ArrayList<>(builder.metricPublishers())); this.executionAttributes = ExecutionAttributes.unmodifiableExecutionAttributes(builder.executionAttributes()); - this.defaultsMode = builder.defaultsMode(); } @Override @@ -204,15 +201,6 @@ public List metricPublishers() { return metricPublishers; } - /** - * The optional defaults mode that should be used to determine the default configuration - * @return the optional defaults mode - * @see Builder#defaultsMode(DefaultsMode) - */ - public Optional defaultsMode() { - return Optional.ofNullable(defaultsMode); - } - /** * Returns the additional execution attributes to be added for this client. * @@ -481,16 +469,6 @@ default Builder retryPolicy(RetryMode retryMode) { Builder putExecutionAttribute(ExecutionAttribute attribute, T value); ExecutionAttributes executionAttributes(); - - /** - * Sets the defaults mode that will be used to determine the default configuration - * @param defaultsMode the defaultsMode to use - * @return This object for method chaining. - * @see DefaultsMode - */ - Builder defaultsMode(DefaultsMode defaultsMode); - - DefaultsMode defaultsMode(); } /** @@ -507,7 +485,6 @@ private static final class DefaultClientOverrideConfigurationBuilder implements private String defaultProfileName; private List metricPublishers = new ArrayList<>(); private ExecutionAttributes.Builder executionAttributesBuilder = ExecutionAttributes.builder(); - private DefaultsMode defaultsMode; @Override public Builder headers(Map> headers) { @@ -690,21 +667,6 @@ public ExecutionAttributes executionAttributes() { return executionAttributesBuilder.build(); } - @Override - public Builder defaultsMode(DefaultsMode mode) { - this.defaultsMode = mode; - return this; - } - - @Override - public DefaultsMode defaultsMode() { - return defaultsMode; - } - - public void setDefaultsMode(DefaultsMode mode) { - defaultsMode(mode); - } - @Override public ClientOverrideConfiguration build() { return new ClientOverrideConfiguration(this); diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkClientOption.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkClientOption.java index 9930299d90ea..01a45c683b8a 100644 --- a/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkClientOption.java +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/client/config/SdkClientOption.java @@ -27,7 +27,6 @@ import software.amazon.awssdk.core.interceptor.ExecutionInterceptor; import software.amazon.awssdk.core.retry.RetryMode; import software.amazon.awssdk.core.retry.RetryPolicy; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.http.SdkHttpClient; import software.amazon.awssdk.http.async.SdkAsyncHttpClient; import software.amazon.awssdk.metrics.MetricPublisher; @@ -158,11 +157,6 @@ public final class SdkClientOption extends ClientOption { */ public static final SdkClientOption DEFAULT_RETRY_MODE = new SdkClientOption<>(RetryMode.class); - /** - * Option to specify the {@link DefaultsMode} - */ - public static final SdkClientOption DEFAULTS_MODE = new SdkClientOption<>(DefaultsMode.class); - private SdkClientOption(Class valueClass) { super(valueClass); } diff --git a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/defaultsmode/ClientDefaultsModeTestSuite.java b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/defaultsmode/ClientDefaultsModeTestSuite.java index 9d99daee4ad9..a407de097528 100644 --- a/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/defaultsmode/ClientDefaultsModeTestSuite.java +++ b/test/codegen-generated-classes-test/src/test/java/software/amazon/awssdk/services/defaultsmode/ClientDefaultsModeTestSuite.java @@ -32,8 +32,8 @@ import software.amazon.awssdk.auth.credentials.AwsBasicCredentials; import software.amazon.awssdk.auth.credentials.StaticCredentialsProvider; import software.amazon.awssdk.awscore.client.builder.AwsClientBuilder; +import software.amazon.awssdk.awscore.defaultsmode.DefaultsMode; import software.amazon.awssdk.core.retry.RetryMode; -import software.amazon.awssdk.defaultsmode.DefaultsMode; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.protocolrestjson.model.AllTypesResponse; @@ -58,7 +58,7 @@ public void legacyDefaultsMode_shouldUseLegacySetting() { @Test public void standardDefaultsMode_shouldApplyStandardDefaults() { stubResponse(); - ClientT client = clientBuilder().overrideConfiguration(o -> o.defaultsMode(DefaultsMode.STANDARD)).build(); + ClientT client = clientBuilder().defaultsMode(DefaultsMode.STANDARD).build(); callAllTypes(client); WireMock.verify(postRequestedFor(anyUrl()).withHeader("User-Agent", containing("cfg/retry-mode/standard"))); @@ -68,7 +68,7 @@ public void standardDefaultsMode_shouldApplyStandardDefaults() { public void retryModeOverridden_shouldTakePrecedence() { stubResponse(); ClientT client = - clientBuilder().overrideConfiguration(o -> o.defaultsMode(DefaultsMode.STANDARD).retryPolicy(RetryMode.LEGACY)).build(); + clientBuilder().defaultsMode(DefaultsMode.STANDARD).overrideConfiguration(o -> o.retryPolicy(RetryMode.LEGACY)).build(); callAllTypes(client); WireMock.verify(postRequestedFor(anyUrl()).withHeader("User-Agent", containing("cfg/retry-mode/legacy")));