TableSchema.converterForAttribute() returns wrong generic type
- Lenguaje dominante
- Java
- Estrellas
- 2.6k
- Forks
- 1k
- Merge medio
- 2 d 9 h
- PR fusionados (30 d)
- 51
Descripción
### Describe the bug
The `TableSchema` interface has a method, `converterForAttribute(Object key)`, which returns an `AttributeConverter`. This AttributeConverter is meant to convert the attribute behind the given key. Unfortunately, the generic type here (`T`) is the type for the table record, not for the attribute.
If I have the following DynamoDbBean (non-compilable, just for explanation purposes):
```java
@DynamoDbBean
public class ShoppingCartItem{
public static final String CUSTOMER_ID_SECONDARY_INDEX_NAME = "shopping_cart_item_by_customer_id";
private UUID customerId;
@DynamoDbSecondaryPartitionKey(indexNames = CUSTOMER_ID_SECONDARY_INDEX_NAME)
public UUID getCustomerId() {
return customerId;
}
}
```
If then create a corresponding `DynamoDbTable` and try fetching the converter for the secondary partition key:
```java
DynamoDbTable table = ...;
String partitionKey = table.tableSchema().tableMetadata().indexPartitionKey(ShoppingCartItem.CUSTOMER_ID_SECONDARY_INDEX_NAME);
AttributeConverter converter = table.tableSchema().converterForAttribute(partitionKey);
```
The `AttributeConverter` returned is of type `AttributeConverter` instead of type `AttributeConverter`. This makes it impossible to use the TableSchema to fetch the corresponding AttributeConverter, because it will always return an AttributeConverter scoped to the type of the table, not of the attribute.
### Expected Behavior
`TableSchema.converterForAttribute(Object key)` should return a generic type other than `AttributeConverter` so callers can use it properly.
### Current Behavior
Described above.
### Reproduction Steps
Described above.
### Possible Solution
Change the return type of `TableSchema.converterForAttribute(Object key)`.
### Additional Information/Context
_No response_
### AWS Java SDK version used
dynamodb-enhanced-2.20.56
### JDK version used
1.8
### Operating System and version
macOS 13.3.1
Guía de contribución
Línea de trabajo
Comienza en el punto de entrada TableSchema.converterForAttribute(Object key) y rastrea su declaración, implementaciones y llamadores en el módulo enhanced DynamoDB. Verifica el contrato genérico con el ejemplo ShoppingCartItem: una clave de partición secundaria respaldada por UUID debería proporcionar un AttributeConverter sin afectar a otros usuarios de TableSchema.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- aws, java
- Área
- backend-api-design, databases
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Bastante claro
- Aptitud para principiantes
- 30/100