Caused by: org.apache.commons.lang.SerializationException: java.lang.ClassNotFoundException:

1,395 views
Skip to first unread message

jbezza

unread,
Jan 17, 2014, 6:50:49 AM1/17/14
to play-fr...@googlegroups.com
Hi - I'm getting a ClassNotFoundException when running PlayFramework:

Caused by: org.apache.commons.lang.SerializationException: java.lang.ClassNotFoundException: org.my.MyClass
at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:165)
at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:192)

Looking a bit deeper I find that the commons-lang-2.4.jar is loaded by the PlayDependencyClassLoader, whereas my classes are loaded by the ReloadableClassLoader(v1):

Class loader org.apache.commons.lang.SerializationUtils = PlayDependencyClassLoader
Class loader org.my.MyClass = ReloadableClassLoader(v1)

Any help appreciated.
Thanks,
jbezza

jbezza

unread,
Jan 18, 2014, 5:49:58 AM1/18/14
to play-fr...@googlegroups.com
Ok...it works using "play start" instead of "play run", I'm new to Play Framework but this seems weird to me...

Johan Andren

unread,
Jan 18, 2014, 9:34:48 AM1/18/14
to play-fr...@googlegroups.com
Play start never hot-reloads stuff but 'run' does when you change classes and reload a page so this could explain why it can be different.

Is it a vanilla project or have you added any libraries that might do monkey business with classloaders?

jbezza

unread,
Jan 26, 2014, 11:36:13 AM1/26/14
to play-fr...@googlegroups.com
Hi Johan - thanks for the reply, and sorry for the delay in responding.  It is a fairly standard project, I'm not doing anything extra-ordinary.

To test, I created this basic project, and I get the same error with "play run" but it works fine with "play start" (stack trace below).

public class Application extends Controller {

       private static byte[] myObj;

       static {

               myObj = SerializationUtils.serialize(new A("Hello, World"));

       }

   public static Result index() {

       A myA = (A) SerializationUtils.deserialize(myObj);

       return ok(index.render("My value = " + myA.getValue()));

   }

}

class A implements Serializable {

      private String value;

      public A(String value) {

               this.value = value;

       }

       public String getValue() {
                return value;

       }

}



play.api.Application$$anon$1: Execution exception[[SerializationException: java.lang.ClassNotFoundException: controllers.A]]
at play.api.Application$class.handleError(Application.scala:293) ~[play_2.10.jar:2.2.1]
at play.api.DefaultApplication.handleError(Application.scala:399) [play_2.10.jar:2.2.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2$$anonfun$applyOrElse$3.apply(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
at scala.Option.map(Option.scala:145) [scala-library.jar:na]
at play.core.server.netty.PlayDefaultUpstreamHandler$$anonfun$2.applyOrElse(PlayDefaultUpstreamHandler.scala:261) [play_2.10.jar:2.2.1]
Caused by: org.apache.commons.lang.SerializationException: java.lang.ClassNotFoundException: controllers.A
at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:165) ~[commons-lang-2.4.jar:2.4]
at org.apache.commons.lang.SerializationUtils.deserialize(SerializationUtils.java:192) ~[commons-lang-2.4.jar:2.4]
at controllers.Application.index(Application.java:18) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(routes_routing.scala:49) ~[na:na]
at Routes$$anonfun$routes$1$$anonfun$applyOrElse$1$$anonfun$apply$1.apply(routes_routing.scala:49) ~[na:na]
at play.core.Router$HandlerInvoker$$anon$7$$anon$2.invocation(Router.scala:183) ~[play_2.10.jar:2.2.1]
Caused by: java.lang.ClassNotFoundException: controllers.A
at java.net.URLClassLoader$1.run(URLClassLoader.java:366) ~[na:1.7.0_45]
at java.net.URLClassLoader$1.run(URLClassLoader.java:355) ~[na:1.7.0_45]
at java.security.AccessController.doPrivileged(Native Method) ~[na:1.7.0_45]
at java.net.URLClassLoader.findClass(URLClassLoader.java:354) ~[na:1.7.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:425) ~[na:1.7.0_45]
at java.lang.ClassLoader.loadClass(ClassLoader.java:358) ~[na:1.7.0_45]
Reply all
Reply to author
Forward
0 new messages