Skip to content

Commit e0f52f3

Browse files
authored
Expose underlying DynamoDbClient from DynamoDbEnhancedClient interface (#6772)
* Expose underlying DynamoDbClient from DynamoDbEnhancedClient interface * Aditional changes in tests * Modify changelog
1 parent 429d7aa commit e0f52f3

File tree

7 files changed

+81
-0
lines changed

7 files changed

+81
-0
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "feature",
3+
"category": "Amazon DynamoDB Enhanced Client",
4+
"contributor": "",
5+
"description": "Added dynamoDbClient() and dynamoDbAsyncClient() default methods to DynamoDbEnhancedClient and DynamoDbEnhancedAsyncClient interfaces to allow access to the underlying low-level client. Fixes [#6654](https://github.com/aws/aws-sdk-java-v2/issues/6654)"
6+
}

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedAsyncClient.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,20 @@ default CompletableFuture<TransactWriteItemsEnhancedResponse> transactWriteItems
527527
throw new UnsupportedOperationException();
528528
}
529529

530+
/**
531+
* Returns the underlying low-level {@link DynamoDbAsyncClient} that this enhanced client uses to make API calls.
532+
* <p>
533+
* The returned client is the same instance that was provided during construction via
534+
* {@link Builder#dynamoDbClient(DynamoDbAsyncClient)}, or the internally-created one if {@link #create()} was used.
535+
* It is <b>not</b> a copy — any operations performed on it (including {@code close()}) will affect this
536+
* enhanced client as well.
537+
*
538+
* @return the underlying {@link DynamoDbAsyncClient}
539+
* @throws UnsupportedOperationException if the implementation does not support this operation
540+
*/
541+
default DynamoDbAsyncClient dynamoDbAsyncClient() {
542+
throw new UnsupportedOperationException();
543+
}
530544

531545
/**
532546
* Creates a default builder for {@link DynamoDbEnhancedAsyncClient}.

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedClient.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -537,6 +537,21 @@ default TransactWriteItemsEnhancedResponse transactWriteItemsWithResponse(
537537
throw new UnsupportedOperationException();
538538
}
539539

540+
/**
541+
* Returns the underlying low-level {@link DynamoDbClient} that this enhanced client uses to make API calls.
542+
* <p>
543+
* The returned client is the same instance that was provided during construction via
544+
* {@link Builder#dynamoDbClient(DynamoDbClient)}, or the internally-created one if {@link #create()} was used.
545+
* It is <b>not</b> a copy — any operations performed on it (including {@code close()}) will affect this
546+
* enhanced client as well.
547+
*
548+
* @return the underlying {@link DynamoDbClient}
549+
* @throws UnsupportedOperationException if the implementation does not support this operation
550+
*/
551+
default DynamoDbClient dynamoDbClient() {
552+
throw new UnsupportedOperationException();
553+
}
554+
540555
/**
541556
* Creates a default builder for {@link DynamoDbEnhancedClient}.
542557
*/

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/client/DefaultDynamoDbEnhancedAsyncClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ public CompletableFuture<TransactWriteItemsEnhancedResponse> transactWriteItemsW
132132
return transactWriteItemsWithResponse(builder.build());
133133
}
134134

135+
@Override
135136
public DynamoDbAsyncClient dynamoDbAsyncClient() {
136137
return dynamoDbClient;
137138
}

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/client/DefaultDynamoDbEnhancedClient.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,7 @@ public TransactWriteItemsEnhancedResponse transactWriteItemsWithResponse(
126126
return transactWriteItemsWithResponse(builder.build());
127127
}
128128

129+
@Override
129130
public DynamoDbClient dynamoDbClient() {
130131
return dynamoDbClient;
131132
}

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/client/DefaultDynamoDbEnhancedAsyncClientTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
package software.amazon.awssdk.enhanced.dynamodb.internal.client;
1717

18+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
19+
import static org.assertj.core.api.Assertions.assertThat;
1820
import static org.hamcrest.MatcherAssert.assertThat;
1921
import static org.hamcrest.Matchers.instanceOf;
2022
import static org.hamcrest.Matchers.is;
@@ -26,6 +28,8 @@
2628
import org.junit.runner.RunWith;
2729
import org.mockito.Mock;
2830
import org.mockito.junit.MockitoJUnitRunner;
31+
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbAsyncTable;
32+
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedAsyncClient;
2933
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension;
3034
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
3135
import software.amazon.awssdk.enhanced.dynamodb.extensions.VersionedRecordExtension;
@@ -117,4 +121,22 @@ public void toBuilder() {
117121

118122
assertThat(copiedObject, is(dynamoDbEnhancedAsyncClient));
119123
}
124+
125+
@Test
126+
public void dynamoDbAsyncClient_viaInterface_returnsSameInstance() {
127+
DynamoDbEnhancedAsyncClient client = dynamoDbEnhancedAsyncClient;
128+
assertThat(client.dynamoDbAsyncClient()).isSameAs(mockDynamoDbAsyncClient);
129+
}
130+
131+
@Test
132+
public void dynamoDbAsyncClient_defaultMethod_throwsUnsupportedOperationException() {
133+
DynamoDbEnhancedAsyncClient bareClient = new DynamoDbEnhancedAsyncClient() {
134+
@Override
135+
public <T> DynamoDbAsyncTable<T> table(String tableName, TableSchema<T> tableSchema) {
136+
return null;
137+
}
138+
};
139+
assertThatThrownBy(() -> bareClient.dynamoDbAsyncClient())
140+
.isInstanceOf(UnsupportedOperationException.class);
141+
}
120142
}

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/internal/client/DefaultDynamoDbEnhancedClientTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515

1616
package software.amazon.awssdk.enhanced.dynamodb.internal.client;
1717

18+
import static org.assertj.core.api.Assertions.assertThatThrownBy;
19+
import static org.assertj.core.api.Assertions.assertThat;
1820
import static org.hamcrest.MatcherAssert.assertThat;
1921
import static org.hamcrest.Matchers.instanceOf;
2022
import static org.hamcrest.Matchers.is;
@@ -25,7 +27,9 @@
2527
import org.junit.runner.RunWith;
2628
import org.mockito.Mock;
2729
import org.mockito.junit.MockitoJUnitRunner;
30+
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClient;
2831
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension;
32+
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbTable;
2933
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
3034
import software.amazon.awssdk.enhanced.dynamodb.extensions.VersionedRecordExtension;
3135
import software.amazon.awssdk.enhanced.dynamodb.internal.extensions.ChainExtension;
@@ -116,4 +120,22 @@ public void toBuilder() {
116120

117121
assertThat(copiedObject, is(dynamoDbEnhancedClient));
118122
}
123+
124+
@Test
125+
public void dynamoDbClient_viaInterface_returnsSameInstance() {
126+
DynamoDbEnhancedClient client = dynamoDbEnhancedClient;
127+
assertThat(client.dynamoDbClient()).isSameAs(mockDynamoDbClient);
128+
}
129+
130+
@Test
131+
public void dynamoDbClient_defaultMethod_throwsUnsupportedOperationException() {
132+
DynamoDbEnhancedClient bareClient = new DynamoDbEnhancedClient() {
133+
@Override
134+
public <T> DynamoDbTable<T> table(String tableName, TableSchema<T> tableSchema) {
135+
return null;
136+
}
137+
};
138+
assertThatThrownBy(() -> bareClient.dynamoDbClient())
139+
.isInstanceOf(UnsupportedOperationException.class);
140+
}
119141
}

0 commit comments

Comments
 (0)