Skip to content

Commit 55cba42

Browse files
committed
Updated serialization to accept classloaders
1 parent 8929f09 commit 55cba42

File tree

4 files changed

+31
-13
lines changed

4 files changed

+31
-13
lines changed

src/main/resources/index.html

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<html>
2+
<head>
3+
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
4+
<title id='title'>Scales Code Coverage</title>
5+
<link rel="stylesheet" href="http://yui.yahooapis.com/pure/0.3.0/pure-min.css">
6+
</head>
7+
<frameset cols="25%,*">
8+
<frame src="packages.html" name="packagesFrame">
9+
<frame src="overview.html" name="mainFrame">
10+
</frameset>
11+
</html>

src/main/scala/scales/IOUtils.scala

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
}

src/main/scala/scales/coverage.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import scala.collection.mutable.ListBuffer
44

55
/**
66
* @author Stephen Samuel */
7-
class Coverage
7+
case class Coverage()
88
extends CoverageMetrics
99
with MethodBuilders
1010
with java.io.Serializable

src/main/scala/scales/report/ScalesHtmlWriter.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ object ScalesHtmlWriter extends CoverageWriter {
1515
val packageFile = new File(dir.getAbsolutePath + "/packages.html")
1616
val overviewFile = new File(dir.getAbsolutePath + "/overview.html")
1717

18-
FileUtils.copyInputStreamToFile(getClass.getResourceAsStream("/org/scalescc/reporters/index.html"), indexFile)
18+
FileUtils.copyInputStreamToFile(getClass.getResourceAsStream("index.html"), indexFile)
1919
FileUtils.write(packageFile, packages(coverage).toString())
2020
FileUtils.write(overviewFile, overview(coverage).toString())
2121

0 commit comments

Comments
 (0)