- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
/**
* Workaround ObjectInputStream for maintaining backward compatibility with serialization.
*
* In the future, please, please, PLEASE assign each serializable class an explicit serialVersionUID.
*
*/
public final class DecompressibleInputStream extends ObjectInputStream {
private static final Logger logger = Logger.getLogger(DecompressibleInputStream.class);
public DecompressibleInputStream(InputStream in) throws IOException {
super(in);
}
protected ObjectStreamClass readClassDescriptor() throws IOException, ClassNotFoundException {
ObjectStreamClass resultClassDescriptor = super.readClassDescriptor();
Class<?> localClass;
try {
localClass = Class.forName(resultClassDescriptor.getName());
} catch (ClassNotFoundException e) {
logger.error("No local class for " + resultClassDescriptor.getName(), e);
return resultClassDescriptor;
}
ObjectStreamClass localClassDescriptor = ObjectStreamClass.lookup(localClass);
if (localClassDescriptor != null) { // only if class implements serializable
final long localSUID = localClassDescriptor.getSerialVersionUID();
final long streamSUID = resultClassDescriptor.getSerialVersionUID();
if (streamSUID != localSUID &&
(localClass == ByteArraySerial.class || localClass == Vector2D.class)) {
// Workaround: check for serialVersionUID mismatch with two specific classes
logger.error(String.format("Overriding serialized class version mismatch for %s: " +
"local serialVersionUID = %s, stream serialVersionUID = %s",
localClass.getName(), localSUID, streamSUID));
resultClassDescriptor = localClassDescriptor; // Use local class descriptor for deserialization
}
}
return resultClassDescriptor;
}
}
Продукт использует в качестве бинарного формата сохранённых файлов встроенную сериализацию. При этом ранние версии полагались на встроенный serialVersionUID.
Вот теперь приходится расхлёбывать. Наши воркэраунды - самые воркэраундные воркэраунды в мире.
bot-minurast 24.10.2011 13:28 # +1
roman-kashitsyn 24.10.2011 13:34 # +1
PLEASE READ "Effective Java" before you start working on this project!
roman-kashitsyn 24.10.2011 13:40 # 0
Lure Of Chaos 24.10.2011 14:06 # +2