spring-cloud / spring-cloud/spring-cloud-function

UPDATED: Type resolution with deep generic hierarchies still fail in 2025.1.1 (regression from issue #1312)

Aperta
#1,325 3 commenti 2 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Lingua principale
Java
Stelle
1.1k
Fork
641
Merge medio
11h 2m
PR unite (30g)
8

Descrizione

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 as byte[........]
  • productBatchListConsumer2 (Consumer<List<ProductCompleteDTO>>): ✅ Works
  • productBatchListMessageConsumer (GenericBatchMessageListConsumer<ProductCompleteDTO>): ✅ Works
  • productBatchListMessageConsumer2 (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
  1. Clone the demo repository
  2. Update pom.xml with:
    • Spring Cloud BOM: 2025.1.1
    • Spring Boot: 4.0.3
  3. Run ./mvnw spring-boot:run (Kafka starts automatically via Docker Compose)
  4. Send the same test messages from the original issue
  5. 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)

Guida per i contributori

Apri la guida per i contributori

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Direzione di ricerca

Inizia eseguendo la demo con ./mvnw spring-boot:run dopo aver verificato le modifiche alla versione in pom.xml, quindi segui il bean productBatchListConsumer e la firma di GenericBatchListConsumer descritti nell’issue. Confronta il suo payload batch con quello dei consumer funzionanti; il lavoro è completato quando viene deserializzato in valori ProductCompleteDTO anziché in byte grezzi, mentre i consumer esistenti in modalità singola e batch continuano a funzionare.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Valutazione

Stack tecnologico
docker-compose, java, kafka, spring, spring-boot
Ambito
backend, distributed-systems
Tipo di issue
Bug
Difficoltà
4/5
Tempo stimato
3-5 giorni
Stato di attività
Attiva
Chiarezza
Abbastanza chiara
Idoneità per principianti
48/100

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.