Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .changes/next-release/feature-AWSSDKforJavav2-f449613.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"category": "AWS SDK for Java v2",
"contributor": "",
"type": "feature",
"description": "Exposes endpointOverride in SdkClient through ServiceClientConfiguration"
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeSpec;
import java.net.URI;
import javax.lang.model.element.Modifier;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.auth.token.credentials.SdkTokenProvider;
Expand Down Expand Up @@ -120,13 +121,21 @@ private MethodSpec endpointProviderMethod() {
private MethodSpec buildClientMethod() {
return MethodSpec.methodBuilder("buildClient")
.addAnnotation(Override.class)
.addModifiers(Modifier.PROTECTED, Modifier.FINAL)
.addModifiers(Modifier.PROTECTED)
.returns(clientInterfaceName)
.addStatement("$T clientConfiguration = super.asyncClientConfiguration()", SdkClientConfiguration.class)
.addStatement("this.validateClientOptions(clientConfiguration)")
.addStatement("$T endpointOverride = null", URI.class)
.addCode("if (clientConfiguration.option($T.ENDPOINT_OVERRIDDEN) != null"
+ "&& clientConfiguration.option($T.ENDPOINT_OVERRIDDEN)) {"
Copy link
Contributor

@millems millems Apr 10, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Boolean.TRUE.equals(clientConfiguration.option($T.ENDPOINT_OVERRIDDEN))?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated

+ "endpointOverride = clientConfiguration.option($T.ENDPOINT);"
+ "}",
SdkClientOption.class, SdkClientOption.class, SdkClientOption.class)
.addStatement("$T serviceClientConfiguration = $T.builder()"
+ ".overrideConfiguration(overrideConfiguration())"
+ ".region(clientConfiguration.option($T.AWS_REGION)).build()",
+ ".region(clientConfiguration.option($T.AWS_REGION))"
+ ".endpointOverride(endpointOverride)"
+ ".build()",
serviceConfigClassName, serviceConfigClassName, AwsClientOption.class)
.addStatement("return new $T(serviceClientConfiguration, clientConfiguration)", clientClassName)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeSpec;
import java.net.URI;
import javax.lang.model.element.Modifier;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.auth.token.credentials.SdkTokenProvider;
Expand Down Expand Up @@ -120,13 +121,21 @@ private MethodSpec endpointProviderMethod() {
private MethodSpec buildClientMethod() {
return MethodSpec.methodBuilder("buildClient")
.addAnnotation(Override.class)
.addModifiers(Modifier.PROTECTED, Modifier.FINAL)
.addModifiers(Modifier.PROTECTED)
.returns(clientInterfaceName)
.addStatement("$T clientConfiguration = super.syncClientConfiguration()", SdkClientConfiguration.class)
.addStatement("this.validateClientOptions(clientConfiguration)")
.addStatement("$T endpointOverride = null", URI.class)
.addCode("if (clientConfiguration.option($T.ENDPOINT_OVERRIDDEN) != null"
+ "&& clientConfiguration.option($T.ENDPOINT_OVERRIDDEN)) {"
+ "endpointOverride = clientConfiguration.option($T.ENDPOINT);"
+ "}",
SdkClientOption.class, SdkClientOption.class, SdkClientOption.class)
.addStatement("$T serviceClientConfiguration = $T.builder()"
+ ".overrideConfiguration(overrideConfiguration())"
+ ".region(clientConfiguration.option($T.AWS_REGION)).build()",
+ ".region(clientConfiguration.option($T.AWS_REGION))"
+ ".endpointOverride(endpointOverride)"
+ ".build()",
serviceConfigClassName, serviceConfigClassName, AwsClientOption.class)
.addStatement("return new $T(serviceClientConfiguration, clientConfiguration)", clientClassName)
.build();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import java.net.URI;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.awscore.AwsServiceClientConfiguration;
import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel;
Expand Down Expand Up @@ -89,12 +90,21 @@ private TypeSpec builderInterfaceSpec() {
.returns(className())
.build())
.addMethod(MethodSpec.methodBuilder("region")
.addAnnotation(Override.class)
.addModifiers(PUBLIC, ABSTRACT)
.addParameter(Region.class, "region")
.returns(className().nestedClass("Builder"))
.addJavadoc("Configure the region")
.build())
.addMethod(MethodSpec.methodBuilder("endpointOverride")
.addAnnotation(Override.class)
.addModifiers(PUBLIC, ABSTRACT)
.addParameter(URI.class, "endpointOverride")
.returns(className().nestedClass("Builder"))
.addJavadoc("Configure the endpointOverride")
.build())
.addMethod(MethodSpec.methodBuilder("overrideConfiguration")
.addAnnotation(Override.class)
.addModifiers(PUBLIC, ABSTRACT)
.addParameter(ClientOverrideConfiguration.class, "clientOverrideConfiguration")
.returns(className().nestedClass("Builder"))
Expand Down Expand Up @@ -132,6 +142,14 @@ private TypeSpec builderImplSpec() {
.addStatement("this.overrideConfiguration = clientOverrideConfiguration")
.addStatement("return this")
.build())
.addMethod(MethodSpec.methodBuilder("endpointOverride")
.addAnnotation(Override.class)
.addModifiers(PUBLIC)
.addParameter(URI.class, "endpointOverride")
.returns(className().nestedClass("Builder"))
.addStatement("this.endpointOverride = endpointOverride")
.addStatement("return this")
.build())
.addMethod(MethodSpec.methodBuilder("build")
.addAnnotation(Override.class)
.addModifiers(PUBLIC)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package software.amazon.awssdk.services.json;

import java.net.URI;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.auth.token.credentials.SdkTokenProvider;
Expand Down Expand Up @@ -28,12 +29,17 @@ public DefaultJsonAsyncClientBuilder tokenProvider(SdkTokenProvider tokenProvide
}

@Override
protected final JsonAsyncClient buildClient() {
protected JsonAsyncClient buildClient() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why remove final?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

intellij suggested to remove it i wasn't sure, added it back

SdkClientConfiguration clientConfiguration = super.asyncClientConfiguration();
this.validateClientOptions(clientConfiguration);
URI endpointOverride = null;
if (clientConfiguration.option(SdkClientOption.ENDPOINT_OVERRIDDEN) != null
&& clientConfiguration.option(SdkClientOption.ENDPOINT_OVERRIDDEN)) {
endpointOverride = clientConfiguration.option(SdkClientOption.ENDPOINT);
}
JsonServiceClientConfiguration serviceClientConfiguration = JsonServiceClientConfiguration.builder()
.overrideConfiguration(overrideConfiguration()).region(clientConfiguration.option(AwsClientOption.AWS_REGION))
.build();
.endpointOverride(endpointOverride).build();
return new DefaultJsonAsyncClient(serviceClientConfiguration, clientConfiguration);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package software.amazon.awssdk.services.json;

import java.net.URI;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkInternalApi;
import software.amazon.awssdk.auth.token.credentials.SdkTokenProvider;
Expand Down Expand Up @@ -28,12 +29,17 @@ public DefaultJsonClientBuilder tokenProvider(SdkTokenProvider tokenProvider) {
}

@Override
protected final JsonClient buildClient() {
protected JsonClient buildClient() {
SdkClientConfiguration clientConfiguration = super.syncClientConfiguration();
this.validateClientOptions(clientConfiguration);
URI endpointOverride = null;
if (clientConfiguration.option(SdkClientOption.ENDPOINT_OVERRIDDEN) != null
&& clientConfiguration.option(SdkClientOption.ENDPOINT_OVERRIDDEN)) {
endpointOverride = clientConfiguration.option(SdkClientOption.ENDPOINT);
}
JsonServiceClientConfiguration serviceClientConfiguration = JsonServiceClientConfiguration.builder()
.overrideConfiguration(overrideConfiguration()).region(clientConfiguration.option(AwsClientOption.AWS_REGION))
.build();
.endpointOverride(endpointOverride).build();
return new DefaultJsonClient(serviceClientConfiguration, clientConfiguration);
}
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package software.amazon.awssdk.services.jsonprotocoltests;

import java.net.URI;
import software.amazon.awssdk.annotations.Generated;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.awscore.AwsServiceClientConfiguration;
Expand Down Expand Up @@ -30,11 +31,19 @@ public interface Builder extends AwsServiceClientConfiguration.Builder {
/**
* Configure the region
*/
@Override
Builder region(Region region);

/**
* Configure the endpointOverride
*/
@Override
Builder endpointOverride(URI endpointOverride);

/**
* Configure the client override configuration
*/
@Override
Builder overrideConfiguration(ClientOverrideConfiguration clientOverrideConfiguration);
}

Expand All @@ -58,6 +67,12 @@ public Builder overrideConfiguration(ClientOverrideConfiguration clientOverrideC
return this;
}

@Override
public Builder endpointOverride(URI endpointOverride) {
this.endpointOverride = endpointOverride;
return this;
}

@Override
public JsonProtocolTestsServiceClientConfiguration build() {
return new JsonProtocolTestsServiceClientConfiguration(this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

package software.amazon.awssdk.awscore;

import java.net.URI;
import java.util.Objects;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.core.SdkServiceClientConfiguration;
Expand Down Expand Up @@ -81,6 +82,7 @@ public interface Builder extends SdkServiceClientConfiguration.Builder {
protected abstract static class BuilderImpl implements Builder {
protected ClientOverrideConfiguration overrideConfiguration;
protected Region region;
protected URI endpointOverride;

protected BuilderImpl() {
}
Expand All @@ -90,19 +92,6 @@ protected BuilderImpl(AwsServiceClientConfiguration awsServiceClientConfiguratio
this.region = awsServiceClientConfiguration.region();
}


@Override
public Builder overrideConfiguration(ClientOverrideConfiguration clientOverrideConfiguration) {
this.overrideConfiguration = clientOverrideConfiguration;
return this;
}
Comment on lines -93 to -98
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't we have this on the interface?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added in Builder interface


@Override
public Builder region(Region region) {
this.region = region;
return this;
}

@Override
public final ClientOverrideConfiguration overrideConfiguration() {
return overrideConfiguration;
Expand All @@ -112,6 +101,11 @@ public final ClientOverrideConfiguration overrideConfiguration() {
public final Region region() {
return region;
}

@Override
public final URI endpointOverride() {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't we have a setter on the interface to override the return type?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added overridden setters for endpointOverride and overrideConfiguration

return endpointOverride;
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,9 @@

package software.amazon.awssdk.core;

import java.net.URI;
import java.util.Objects;
import java.util.Optional;
import software.amazon.awssdk.annotations.SdkPublicApi;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;

Expand All @@ -26,9 +28,11 @@
public abstract class SdkServiceClientConfiguration {

private final ClientOverrideConfiguration overrideConfiguration;
private final URI endpointOverride;

protected SdkServiceClientConfiguration(Builder builder) {
this.overrideConfiguration = builder.overrideConfiguration();
this.endpointOverride = builder.endpointOverride();
}

/**
Expand All @@ -40,6 +44,15 @@ public ClientOverrideConfiguration overrideConfiguration() {
return this.overrideConfiguration;
}

/**
*
* @return The configured endpoint override of the SdkClient. If the endpoint was not overridden, an empty Optional will be
* returned
*/
public Optional<URI> endpointOverride() {
return Optional.ofNullable(this.endpointOverride);
}

@Override
public boolean equals(Object o) {
if (this == o) {
Expand Down Expand Up @@ -67,11 +80,21 @@ public interface Builder {
*/
ClientOverrideConfiguration overrideConfiguration();

/**
* Return the endpoint override
*/
URI endpointOverride();

/**
* Configure the client override configuration
*/
Builder overrideConfiguration(ClientOverrideConfiguration clientOverrideConfiguration);

/**
* Configure the endpoint override
*/
Builder endpointOverride(URI endpointOverride);

/**
* Build the service client configuration using the configuration on this builder
*/
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@

import static org.assertj.core.api.Assertions.assertThat;

import java.net.URI;
import java.time.Duration;
import org.junit.jupiter.api.Test;
import software.amazon.awssdk.core.client.config.ClientOverrideConfiguration;
Expand All @@ -36,6 +37,26 @@ public void syncClient_serviceClientConfiguration_shouldReturnCorrectRegion() {
assertThat(region).isEqualTo(Region.ME_SOUTH_1);
}

@Test
public void syncClientWithEndpointOverride_serviceClientConfiguration_shouldReturnCorrectEndpointOverride() {
URI uri = URI.create("https://www.amazon.com/");
ProtocolRestXmlClient client = ProtocolRestXmlClient.builder()
.endpointOverride(uri)
.build();

URI endpointOverride = client.serviceClientConfiguration().endpointOverride().orElse(null);
assertThat(endpointOverride).isEqualTo(uri);
}

@Test
public void syncClientWithoutEndpointOverride_serviceClientConfiguration_shouldReturnEmptyOptional() {
ProtocolRestXmlClient client = ProtocolRestXmlClient.builder()
.build();

URI endpointOverride = client.serviceClientConfiguration().endpointOverride().orElse(null);
assertThat(endpointOverride).isNull();
}

@Test
public void syncClient_serviceClientConfiguration_shouldReturnCorrectClientOverrideConfigurationFields() {
ClientOverrideConfiguration overrideConfiguration = ClientOverrideConfiguration.builder()
Expand Down Expand Up @@ -80,6 +101,26 @@ public void asyncClient_serviceClientConfiguration_shouldReturnCorrectRegion() {
assertThat(region).isEqualTo(Region.ME_SOUTH_1);
}

@Test
public void asyncClientWithEndpointOverride_serviceClientConfiguration_shouldReturnCorrectEndpointOverride() {
URI uri = URI.create("https://www.amazon.com/");
ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder()
.endpointOverride(uri)
.build();

URI endpointOverride = client.serviceClientConfiguration().endpointOverride().orElse(null);
assertThat(endpointOverride).isEqualTo(uri);
}

@Test
public void asyncClientWithoutEndpointOverride_serviceClientConfiguration_shouldReturnEmptyOptional() {
ProtocolRestXmlAsyncClient client = ProtocolRestXmlAsyncClient.builder()
.build();

URI endpointOverride = client.serviceClientConfiguration().endpointOverride().orElse(null);
assertThat(endpointOverride).isNull();
}

@Test
public void asyncClient_serviceClientConfiguration_shouldReturnCorrectClientOverrideConfigurationFields() {
ClientOverrideConfiguration overrideConfiguration = ClientOverrideConfiguration.builder()
Expand Down