On 2016-01-22 12:56, Claes Redestad wrote:


On 2016-01-22 12:53, Alan Bateman wrote:


On 22/01/2016 11:34, Claes Redestad wrote:
:

During testing I discovered that EnumSet was missing a serialVersionUID, which needs to be added.
I assume this is not needed, it already has:

@SuppressWarnings("serial") // No serialVersionUID due to usage of serial proxy pattern

That's odd.. there's a jtreg test that fails if I don't explicitly add the serialVersionUID (that's where I got the actual UID from). I'll investigate.

Right... java/util/EnumSet/BogusEnumSet.java fails, which is an explicit test to verify a corrupt EnumSet doesn't deserialize properly:

java.io.InvalidClassException: java.util.EnumSet; local class incompatible: 
stream classdesc serialVersionUID = 1009687484059888093, local class 
serialVersionUID = 4168005130090799668
        at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:618)
        at 
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1626)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
        at 
java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1626)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1521)
        at 
java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1777)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1354)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:368)
        at BogusEnumSet.deserialize(BogusEnumSet.java:91)
        at BogusEnumSet.main(BogusEnumSet.java:78)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:520)
        at 
com.sun.javatest.regtest.agent.MainActionHelper$SameVMRunnable.run(MainActionHelper.java:218)
        at java.lang.Thread.run(Thread.java:804)


It would seem the assessment that serialVersionUID is not needed when using the serial proxy pattern might be misguided (or is this a bug in ObjectInputStream)?

Thanks!

/Claes

Reply via email to