diff --git a/.changes/next-release/bugfix-AWSSDKforJavav2-b5091ac.json b/.changes/next-release/bugfix-AWSSDKforJavav2-b5091ac.json new file mode 100644 index 000000000000..953b057f0c3e --- /dev/null +++ b/.changes/next-release/bugfix-AWSSDKforJavav2-b5091ac.json @@ -0,0 +1,6 @@ +{ + "type": "bugfix", + "category": "AWS SDK for Java v2", + "contributor": "", + "description": "Expose the metadata key on SDK client interfaces for use with `ServiceMetadataProvider`" +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientInterface.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientInterface.java index e9f023701841..230a1b17fa8e 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientInterface.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/AsyncClientInterface.java @@ -48,6 +48,7 @@ import software.amazon.awssdk.core.SdkClient; import software.amazon.awssdk.core.async.AsyncRequestBody; import software.amazon.awssdk.core.async.AsyncResponseTransformer; +import software.amazon.awssdk.regions.ServiceMetadataProvider; import software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain; public class AsyncClientInterface implements ClassSpec { @@ -78,6 +79,12 @@ public TypeSpec poetSpec() { .addField(FieldSpec.builder(String.class, "SERVICE_NAME") .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) .initializer("$S", model.getMetadata().getSigningName()) + .build()) + .addField(FieldSpec.builder(String.class, "SERVICE_METADATA_ID") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) + .initializer("$S", model.getMetadata().getEndpointPrefix()) + .addJavadoc("Value for looking up the service's metadata from the {@link $T}.", + ServiceMetadataProvider.class) .build()); PoetUtils.addJavadoc(result::addJavadoc, getJavadoc()); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/SyncClientInterface.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/SyncClientInterface.java index c1e95a7d43c2..9b4453f45ebe 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/SyncClientInterface.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/SyncClientInterface.java @@ -54,6 +54,7 @@ import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.core.sync.ResponseTransformer; import software.amazon.awssdk.regions.ServiceMetadata; +import software.amazon.awssdk.regions.ServiceMetadataProvider; import software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain; public final class SyncClientInterface implements ClassSpec { @@ -78,7 +79,13 @@ public TypeSpec poetSpec() { .addField(FieldSpec.builder(String.class, "SERVICE_NAME") .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) .initializer("$S", model.getMetadata().getSigningName()) - .build()); + .build()) + .addField(FieldSpec.builder(String.class, "SERVICE_METADATA_ID") + .addModifiers(Modifier.PUBLIC, Modifier.STATIC, Modifier.FINAL) + .initializer("$S", model.getMetadata().getEndpointPrefix()) + .addJavadoc("Value for looking up the service's metadata from the {@link $T}.", + ServiceMetadataProvider.class) + .build()); PoetUtils.addJavadoc(result::addJavadoc, getJavadoc()); @@ -148,7 +155,7 @@ private MethodSpec serviceMetadata() { return MethodSpec.methodBuilder("serviceMetadata") .returns(ServiceMetadata.class) .addModifiers(Modifier.STATIC, Modifier.PUBLIC) - .addStatement("return $T.of($S)", ServiceMetadata.class, model.getMetadata().getEndpointPrefix()) + .addStatement("return $T.of(SERVICE_METADATA_ID)", ServiceMetadata.class) .build(); } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-class.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-class.java index 9621075e01f7..9885e9fe4e7b 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-class.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/builder/test-client-builder-class.java @@ -24,7 +24,7 @@ abstract class DefaultJsonBaseClientBuilder, C> extends AwsDefaultClientBuilder { @Override protected final String serviceEndpointPrefix() { - return "json-service"; + return "json-service-endpoint"; } @Override diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/json/service-2.json b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/json/service-2.json index d15964037f42..3b4cb21eb7ed 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/json/service-2.json +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/json/service-2.json @@ -2,12 +2,13 @@ "version": "2.0", "metadata": { "apiVersion": "2010-05-08", - "endpointPrefix": "json-service", + "endpointPrefix": "json-service-endpoint", "globalEndpoint": "json-service.amazonaws.com", "protocol": "rest-json", "serviceAbbreviation": "Json Service", "serviceFullName": "Some Service That Uses Json Protocol", - "serviceId":"Json Service", + "serviceId": "Json Service", + "signingName": "json-service", "signatureVersion": "v4", "uid": "json-service-2010-05-08", "xmlNamespace": "https://json-service.amazonaws.com/doc/2010-05-08/" diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-async-client-interface.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-async-client-interface.java index 64dff6752896..d57bfb0ea4b1 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-async-client-interface.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-async-client-interface.java @@ -47,6 +47,12 @@ public interface JsonAsyncClient extends SdkClient { String SERVICE_NAME = "json-service"; + /** + * Value for looking up the service's metadata from the + * {@link software.amazon.awssdk.regions.ServiceMetadataProvider}. + */ + String SERVICE_METADATA_ID = "json-service-endpoint"; + /** * Create a {@link JsonAsyncClient} with the region loaded from the * {@link software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain} and credentials loaded from the diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-client-interface.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-client-interface.java index f5db39d5a610..1653d7241aed 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-client-interface.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-json-client-interface.java @@ -43,6 +43,12 @@ public interface JsonClient extends SdkClient { String SERVICE_NAME = "json-service"; + /** + * Value for looking up the service's metadata from the + * {@link software.amazon.awssdk.regions.ServiceMetadataProvider}. + */ + String SERVICE_METADATA_ID = "json-service-endpoint"; + /** * Create a {@link JsonClient} with the region loaded from the * {@link software.amazon.awssdk.regions.providers.DefaultAwsRegionProviderChain} and credentials loaded from the @@ -1358,7 +1364,7 @@ default ResponseBytes streamingOutputOperation } static ServiceMetadata serviceMetadata() { - return ServiceMetadata.of("json-service"); + return ServiceMetadata.of(SERVICE_METADATA_ID); } /**