akka/akka-core
View on GitHubBetter error message when JavaSerializer.currentSystem is not set
Open
#27,418 opened on Jul 25, 2019
1 - triagedhelp wanted
Repository metrics
- Stars
- (13,277 stars)
- PR merge metrics
- (Avg merge 8d 19h) (10 merged PRs in 30d)
Description
Version:
val akkaVersion = "2.6.0-M4"
libraryDependencies ++= Seq(
"com.typesafe.akka" %% "akka-actor" % akkaVersion,
"com.typesafe.akka" %% "akka-actor-typed" % akkaVersion)
Code to reproduce:
import java.io._
import akka.actor.typed._
import akka.actor.typed.scaladsl._
import akka.actor.typed.scaladsl.AskPattern._
import akka.util.Timeout
import scala.concurrent.Await
import scala.concurrent.duration._
object Main {
def main(args: Array[String]): Unit = {
val system = ActorSystem(SpawnProtocol.behavior, "def")
implicit val timeout: Timeout = Timeout(3.seconds)
implicit val scheduler: Scheduler = system .scheduler
val ref = system ? SpawnProtocol.Spawn(behavior = beh, name = "")
val a = Await.result(ref, 3.seconds)
val bs = new ByteArrayOutputStream()
val oos = new ObjectOutputStream(bs)
oos.writeObject(a)
}
def beh: Behavior[Int] = Behaviors.receiveMessage { msg =>
println(msg)
Behaviors.same
}
}
Expected result: Actor ref should be serializable.
Actual result:
Exception in thread "main" java.lang.NullPointerException: system must not be null!
at java.util.Objects.requireNonNull(Objects.java:228)
at akka.actor.ExtensionId.apply(Extension.scala:77)
at akka.actor.ExtensionId.apply$(Extension.scala:76)
at akka.actor.typed.scaladsl.adapter.AdapterExtension$.apply(AdapterExtension.scala:23)
at akka.actor.typed.scaladsl.adapter.package$UntypedActorSystemOps$.toTyped$extension(package.scala:70)
at akka.actor.typed.SerializedActorRef$.toAddress(ActorRef.scala:83)
at akka.actor.typed.SerializedActorRef.<init>(ActorRef.scala:98)
at akka.actor.typed.SerializedActorRef$.apply(ActorRef.scala:77)
at akka.actor.typed.internal.adapter.ActorRefAdapter.writeReplace(ActorRefAdapter.scala:42)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at java.io.ObjectStreamClass.invokeWriteReplace(ObjectStreamClass.java:1218)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1136)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at Main$.main(Main.scala:20)
at Main.main(Main.scala)