Consider the following situation:
There is a serialization file, created by the older version of the application. Unfortunately, the package has changed for the class, that has been serialized. And now I need to load the information from this file into the same class, but located in different package. This class has serialVersionUID defined and has not changed (i.e. is compatible).
Question: Is it possible to load the new class instances from this file using any tricks (except trivial copying the class into old package and then using the deserialization wrapper logic)? It is possible to use readResolve() to recover from moving/renaming the class? If not, please, explain why.
I don’t think there are any other "tricks" you could use that don’t involve at least a partial reimplementation of the serialization protocol.
Edit: there is in fact a hook that allows this if you control the deserialization process, see the other answer.
No, because the deserialization mechanism will fail much earlier, at the stage where it tries to locate the class that’s being deserialized – it has no way of knowing that a class in a different package has a
readResolve()method it’s supposed to use.