spring-cloud / spring-cloud/spring-cloud-function
UPDATED: Type resolution with deep generic hierarchies still fail in 2025.1.1 (regression from issue #1312)
Personne n'a encore pris cette issue.
- Langage dominant
- Java
- Étoiles
- 1.1k
- Forks
- 641
- Merge moyen
- 11 h 2 min
- PR mergées (30 j)
- 8
Description
Description
This is a follow-up to issue #1312 ("Type resolution with deep generic hierarchies is incorrect"). After upgrading Spring Cloud BOM from 2025.0.0 to 2025.1.1 and Spring Boot to 4.0.3, type resolution issues persist in batch mode consumption.
The demo repository (ferblaca/demoStreamGenerics/tree/upgrade_to_2025_0_0) was re-tested to confirm the behavior.
Current Behavior
Single Mode - All Consumers Work ✅
productConsumer(GenericConsumer<ProductCompleteDTO>)productConsumer2(Consumer<ProductCompleteDTO>)productMessageConsumer(GenericMessageConsumer<ProductCompleteDTO>)productMessageConsumer2(Consumer<Message<ProductCompleteDTO>>)
Batch Mode - Partial Failure ⚠️
productBatchListConsumer(GenericBatchListConsumer<ProductCompleteDTO>): ❌ Fails — payload arrives asbyte[........]productBatchListConsumer2(Consumer<List<ProductCompleteDTO>>): ✅ WorksproductBatchListMessageConsumer(GenericBatchMessageListConsumer<ProductCompleteDTO>): ✅ WorksproductBatchListMessageConsumer2(Consumer<Message<List<ProductCompleteDTO>>>): ✅ Works
Root Cause
Only the productBatchListConsumer bean with the following signature fails to deserialize correctly:
@Bean
public GenericBatchListConsumer<ProductCompleteDTO> productBatchListConsumer() {
return new GenericBatchListConsumer<>("productBatchListConsumer");
}
Where GenericBatchListConsumer is defined as:
public class GenericBatchListConsumer<T> implements Consumer<List<T>> {
// ...
}
Instead of deserializing to the expected type, the message payload arrives as raw bytes:
Received Batch List productBatchListConsumer Consumer: [123, 34, 105, 100, 34, 58, 49, ...]
Steps to Reproduce
- Clone the demo repository
- Update
pom.xmlwith:- Spring Cloud BOM:
2025.1.1 - Spring Boot:
4.0.3
- Spring Cloud BOM:
- Run
./mvnw spring-boot:run(Kafka starts automatically via Docker Compose) - Send the same test messages from the original issue
- Check the logs for the byte array payload symptom
Environment
| Component | Version |
|---|---|
| Spring Boot | 4.0.3 |
| Spring Cloud Stream | 5.0.1 |
| Spring Cloud Function | 5.0.1 |
| Message Broker | Kafka (KRaft mode via Docker Compose) |
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par exécuter la démo avec ./mvnw spring-boot:run après avoir vérifié les changements de version dans pom.xml, puis suivez le bean productBatchListConsumer et la signature de GenericBatchListConsumer décrits dans l’issue. Comparez son payload de batch avec celui des consumers fonctionnels ; le travail est considéré comme terminé lorsqu’il est désérialisé en valeurs ProductCompleteDTO au lieu de bytes bruts, tandis que les consumers existants en mode individuel et batch continuent de fonctionner.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- docker-compose, java, kafka, spring, spring-boot
- Domaine
- backend, distributed-systems
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Active
- Clarté
- Plutôt claire
- Accessibilité débutants
- 48/100