spring-projects / spring-batch

Spring Batch is a framework for writing batch applications using Java and Spring
http://projects.spring.io/spring-batch/
Apache License 2.0
2.69k stars 2.33k forks source link

Can't deserialize class StepContribution #4535

Open iKopranov opened 7 months ago

iKopranov commented 7 months ago

Class StepContribution is Serializable however it doesn't have assigned serialVersionUID field. I encountered an issue when I implemented Spring Batch Remote feature with different spring boot versions in microservices using this feature

https://github.com/spring-projects/spring-batch/blob/ff69215ddc9e213b758889cc55dd00fd2789c8a1/spring-batch-core/src/main/java/org/springframework/batch/core/StepContribution.java#L28

Consumer exception java.io.InvalidClassException: org.springframework.batch.core.StepContribution; local class incompatible: stream classdesc serialVersionUID = 8115798873141271089, local class serialVersionUID = -3004412810934832110 at java.base/java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:728) ~[na:na] at java.base/java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:2060) ~[na:na] at java.base/java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1907) ~[na:na] at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2209) ~[na:na] at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1742) ~[na:na] at java.base/java.io.ObjectInputStream$FieldValues.<init>(ObjectInputStream.java:2584) ~[na:na] at java.base/java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:2442) ~[na:na] at java.base/java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:2242) ~[na:na] at java.base/java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1742) ~[na:na] at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:514) ~[na:na] at java.base/java.io.ObjectInputStream.readObject(ObjectInputStream.java:472) ~[na:na] at org.apache.commons.lang3.SerializationUtils.deserialize(SerializationUtils.java:215) ~[commons-lang3-3.12.0.jar:3.12.0] ... 26 common frames omitted

harishdalm commented 7 months ago

Any update on this ? When this will be resolved

fmbenhassine commented 7 months ago

Can you please elaborate on how/when this issue happens? I don't remember having such issue when implementing remote partitioning. I see org.apache.commons.lang3.SerializationUtils in the stacktrace, but can you tell us which serialisation library/mechanism and which message broker do you use?

We might add a default serialVersionUID to StepContribution, but according to the javadoc of Serializable:

If a serializable class does not explicitly declare a serialVersionUID, then the serialization
runtime will calculate a default serialVersionUID value for that class based on various aspects
of the class

that's why I would like to first know in which situation and with which serialization runtime you have this issue. Thank you.