@@ -20,18 +20,25 @@ object IOUtils {
2020 }
2121
2222 def serialize (coverage : Coverage ): Array [Byte ] = {
23- val baos = new ByteArrayOutputStream
24- val oos = new ObjectOutputStream (baos )
25- oos .writeObject(coverage)
26- oos .close()
27- baos .toByteArray
23+ val bos = new ByteArrayOutputStream
24+ val out = new ObjectOutputStream (bos )
25+ out .writeObject(coverage)
26+ out .close()
27+ bos .toByteArray
2828 }
2929
30- def deserialize (file : File ): Coverage = deserialize(new FileInputStream (file))
31- def deserialize (in : InputStream ): Coverage = {
32- val oos = new ObjectInputStream ( in)
33- val coverage = oos .readObject(). asInstanceOf [ Coverage ]
34- oos .close()
35- coverage
30+ def deserialize (classLoader : ClassLoader , file : File ): Coverage = deserialize(classLoader, new FileInputStream (file))
31+ def deserialize (classLoader : ClassLoader , in : InputStream ): Coverage = {
32+ val ois = new ClassLoaderObjectInputStream (classLoader, in)
33+ val obj = ois .readObject
34+ in .close()
35+ obj. asInstanceOf [ Coverage ]
3636 }
3737}
38+
39+ class ClassLoaderObjectInputStream (classLoader : ClassLoader , is : InputStream ) extends ObjectInputStream (is) {
40+ override protected def resolveClass (objectStreamClass : ObjectStreamClass ): Class [_] =
41+ try Class .forName(objectStreamClass.getName, false , classLoader) catch {
42+ case cnfe : ClassNotFoundException ⇒ super .resolveClass(objectStreamClass)
43+ }
44+ }
0 commit comments