Getting a serialization error from Akka, like follows, how do you wrap around the offending non-serializable member/field of your Akka message? The exception does name the member value that can't serialize (below com.our.member.object
), but that object comprises many nested members itself, and the error message might seem to give little clue toward the offending nested object that can't be serialized:
2018-05-24T06:30:51.897Z ERROR VCA-akka.actor.default-dispatcher-4 akka.remote.EndpointWriter - Failed to serialize remote message [class akka.actor.ActorSelectionMessage] using serializer [class akka.remote.serialization.MessageContainerSerializer]. Transient association error (association remains live)akka.remote.MessageSerializer$SerializationException: Failed to serialize remote message [class akka.actor.ActorSelectionMessage] using serializer [class akka.remote.serialization.MessageContainerSerializer]. at akka.remote.MessageSerializer$.serialize(MessageSerializer.scala:62) at akka.remote.EndpointWriter.$anonfun$serializeMessage$1(Endpoint.scala:895) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58) at akka.remote.EndpointWriter.serializeMessage(Endpoint.scala:895) at akka.remote.EndpointWriter.writeSend(Endpoint.scala:786) at akka.remote.EndpointWriter$$anonfun$4.applyOrElse(Endpoint.scala:761) at akka.actor.Actor.aroundReceive(Actor.scala:513) at akka.actor.Actor.aroundReceive$(Actor.scala:511) at akka.remote.EndpointActor.aroundReceive(Endpoint.scala:452) at akka.actor.ActorCell.receiveMessage(ActorCell.scala:519) at akka.actor.ActorCell.invoke(ActorCell.scala:488) at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257) at akka.dispatch.Mailbox.run(Mailbox.scala:224) at akka.dispatch.Mailbox.exec(Mailbox.scala:234) at akka.dispatch.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at akka.dispatch.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at akka.dispatch.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at akka.dispatch.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)Caused by: java.io.NotSerializableException: com.our.member.object at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548) at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509) at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432) at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348) at akka.serialization.JavaSerializer.$anonfun$toBinary$1(Serializer.scala:313) at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:12) at scala.util.DynamicVariable.withValue(DynamicVariable.scala:58) at akka.serialization.JavaSerializer.toBinary(Serializer.scala:313) at akka.remote.serialization.MessageContainerSerializer.serializeSelection(MessageContainerSerializer.scala:37) at akka.remote.serialization.MessageContainerSerializer.toBinary(MessageContainerSerializer.scala:26) at akka.remote.MessageSerializer$.serialize(MessageSerializer.scala:47) ... 17 common frames omitted