Skip to content

Commit cbe0d9d

Browse files
committed
SerializationProxy pattern in SBT: j.u.TreeMap vs s.c.i.List
``` > test:run [info] Compiling 1 Scala source to /Users/jason/code/minimized-list-serialization/target/scala-2.11.7-342e71e-SNAPSHOT/test-classes... [info] Running issue.Test -------------------------------------------------------------------------------- URLClassLoader with NativeCopyLoader with RawResources( urls = List(/Users/jason/code/minimized-list-serialization/target/scala-2.11.7-342e71e-SNAPSHOT/test-classes, /Users/jason/code/minimized-list-serialization/target/scala-2.11.7-342e71e-SNAPSHOT/classes, /Users/jason/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.7-342e71e-SNAPSHOT.jar), parent = java.net.URLClassLoader@483b0e70, resourceMap = Set(app.class.path, boot.class.path), nativeTemp = /var/folders/s2/g6fgtpk52hl8njjvx8vyzr9r0000gn/T/sbt_750f428b ) (class sbt.classpath.ClasspathUtilities$$anon$1) file:/Users/jason/code/minimized-list-serialization/target/scala-2.11.7-342e71e-SNAPSHOT/test-classes/ file:/Users/jason/code/minimized-list-serialization/target/scala-2.11.7-342e71e-SNAPSHOT/classes/ file:/Users/jason/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.7-342e71e-SNAPSHOT.jar java.net.URLClassLoader@483b0e70 (class java.net.URLClassLoader) file:/Users/jason/.ivy2/cache/org.scala-lang/scala-library/jars/scala-library-2.11.7-342e71e-SNAPSHOT.jar file:/Users/jason/.ivy2/cache/org.scala-lang/scala-compiler/jars/scala-compiler-2.11.7-342e71e-SNAPSHOT.jar file:/Users/jason/.ivy2/cache/org.scala-lang/scala-reflect/jars/scala-reflect-2.11.7-342e71e-SNAPSHOT.jar file:/Users/jason/.ivy2/cache/org.scala-lang.modules/scala-xml_2.11/bundles/scala-xml_2.11-1.0.3.jar file:/Users/jason/.ivy2/cache/org.scala-lang.modules/scala-parser-combinators_2.11/bundles/scala-parser-combinators_2.11-1.0.3.jar file:/Users/jason/.ivy2/cache/jline/jline/jars/jline-2.12.1.jar xsbt.boot.BootFilteredLoader@2b1cd346 (class xsbt.boot.BootFilteredLoader) sun.misc.Launcher$AppClassLoader@2503dbd3 (class sun.misc.Launcher$AppClassLoader) file:/usr/local/Cellar/sbt/0.13.7/libexec/sbt-launch.jar sun.misc.Launcher$ExtClassLoader@5cea6cde (class sun.misc.Launcher$ExtClassLoader) file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/cldrdata.jar file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/dnsns.jar file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/jfxrt.jar file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/localedata.jar file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/nashorn.jar file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/sunec.jar file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/sunjce_provider.jar file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/sunpkcs11.jar file:/Library/Java/JavaVirtualMachines/jdk1.8.0_25.jdk/Contents/Home/jre/lib/ext/zipfs.jar file:/System/Library/Java/Extensions/AppleScriptEngine.jar file:/System/Library/Java/Extensions/dns_sd.jar file:/System/Library/Java/Extensions/j3daudio.jar file:/System/Library/Java/Extensions/j3dcore.jar file:/System/Library/Java/Extensions/j3dutils.jar file:/System/Library/Java/Extensions/jai_codec.jar file:/System/Library/Java/Extensions/jai_core.jar file:/System/Library/Java/Extensions/libAppleScriptEngine.jnilib file:/System/Library/Java/Extensions/libJ3D.jnilib file:/System/Library/Java/Extensions/libJ3DAudio.jnilib file:/System/Library/Java/Extensions/libJ3DUtils.jnilib file:/System/Library/Java/Extensions/libmlib_jai.jnilib file:/System/Library/Java/Extensions/mlibwrapper_jai.jar file:/System/Library/Java/Extensions/MRJToolkit.jar file:/System/Library/Java/Extensions/vecmath.jar file:/usr/lib/java/libjdns_sd.jnilib -------------------------------------------------------------------------------- {a=Meh(ay), b=Meh(bee)} : Success(true) List(Meh(2345)) : Failure(java.lang.ClassNotFoundException: issue.Meh) [success] Total time: 1 s, completed 09/04/2015 2:57:33 PM ```
1 parent f72d01a commit cbe0d9d

File tree

5 files changed

+43
-14
lines changed

5 files changed

+43
-14
lines changed

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
/target
2+
/project/target

build.sbt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
name := "minimized-list-serialization"
22

3-
scalaVersion := "2.10.5"
3+
scalaVersion := "2.11.7-342e71e-SNAPSHOT"
44

5-
libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4"
5+
// libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4"
66

77
//fork in Test := true

project/build.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
sbt.version=0.13.8-RC1
1+
sbt.version=0.13.7

src/main/scala/issue/Issue.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,4 @@ package issue
22

33
case class Meh(s: String)
44

5-
case class Issue(n: String, list: List[Meh])
5+
case class Issue(n: String, list: Any)

src/test/scala/issue/IssueTest.scala

Lines changed: 37 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,54 @@
11
package issue
22

3-
import org.scalatest._
43
import java.io.{ObjectOutputStream, ObjectInputStream, ByteArrayOutputStream, ByteArrayInputStream}
4+
import java.net.URLClassLoader
5+
import java.util
6+
import java.util.Comparator
57

6-
class IssueTest extends FunSuite with Matchers {
7-
test("serialization issue") {
8-
val obj = Issue("meh", List(Meh("2345")))
9-
val arr = serialize(obj)
10-
val obj2 = deserialize(arr)
11-
assert(obj === obj2)
12-
}
8+
object Test {
9+
def main(args: Array[String]): Unit = {
10+
classloaderDiagnostic()
11+
12+
val treeMap = new util.TreeMap[String, Meh]()
13+
treeMap.put("a", new Meh("ay"))
14+
treeMap.put("b", new Meh("bee"))
15+
test(treeMap)
1316

17+
val list = List(Meh("2345"))
18+
test(List(Meh("2345")))
19+
}
20+
def test(obj: Any) = {
21+
val result = scala.util.Try {
22+
val arr = serialize(obj)
23+
val obj2 = deserialize[Any](arr)
24+
obj == obj2
25+
}
26+
println(s"$obj : $result")
27+
}
1428

15-
def serialize[A <: Serializable](obj: A): Array[Byte] = {
29+
def serialize[A](obj: A): Array[Byte] = {
1630
val o = new ByteArrayOutputStream()
1731
val os = new ObjectOutputStream(o)
1832
os.writeObject(obj)
1933
o.toByteArray()
2034
}
2135

22-
def deserialize[A <: Serializable](bytes: Array[Byte]): A = {
36+
def deserialize[A](bytes: Array[Byte]): A = {
2337
val s = new ByteArrayInputStream(bytes)
2438
val is = new ObjectInputStream(s)
2539
is.readObject().asInstanceOf[A]
2640
}
41+
42+
def classloaderDiagnostic(): Unit = {
43+
def classLoaderChain(loader: ClassLoader) = collection.Iterator.iterate(loader)(_.getParent).takeWhile(_ != null)
44+
def showLoader(cl: ClassLoader) = {
45+
cl.toString + " (" + cl.getClass + ")\n" + {
46+
cl match {
47+
case url: URLClassLoader => url.getURLs.mkString("\n")
48+
case _ => ""
49+
}
50+
}
51+
}
52+
println(classLoaderChain(classOf[Meh].getClassLoader).toList.map(showLoader).mkString("-" * 80 + "\n", "\n\n", "\n" + ("-" * 80)))
53+
}
2754
}

0 commit comments

Comments
 (0)