akka/akka-core

Better error message when JavaSerializer.currentSystem is not set

Open

#27,418 opened on Jul 25, 2019

View on GitHub
 (3 comments) (0 reactions) (0 assignees)Scala (3,547 forks)batch import
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)

Contributor guide