From 74e58c8a7594f2f02a9659e568bda60341f8aa1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Endre=20S=C3=A1ndor=20Varga?= Date: Wed, 3 Jul 2013 11:26:50 +0200 Subject: [PATCH] =actor: More descriptive error message when serializer with given ID is missing #3487 --- .../main/scala/akka/serialization/Serialization.scala | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/akka-actor/src/main/scala/akka/serialization/Serialization.scala b/akka-actor/src/main/scala/akka/serialization/Serialization.scala index 09099b1c66..af5f1441bb 100644 --- a/akka-actor/src/main/scala/akka/serialization/Serialization.scala +++ b/akka-actor/src/main/scala/akka/serialization/Serialization.scala @@ -10,7 +10,7 @@ import akka.event.Logging import java.util.concurrent.ConcurrentHashMap import scala.collection.mutable.ArrayBuffer import java.io.NotSerializableException -import scala.util.{ Try, DynamicVariable } +import scala.util.{ Try, DynamicVariable, Failure } import scala.collection.immutable import scala.util.control.NonFatal @@ -95,7 +95,14 @@ class Serialization(val system: ExtendedActorSystem) extends Extension { * Returns either the resulting object or an Exception if one was thrown. */ def deserialize[T](bytes: Array[Byte], serializerId: Int, clazz: Option[Class[_ <: T]]): Try[T] = - Try(serializerByIdentity(serializerId).fromBinary(bytes, clazz).asInstanceOf[T]) + Try { + val serializer = try serializerByIdentity(serializerId) catch { + case _: NoSuchElementException ⇒ throw new NotSerializableException( + s"Cannot find serializer with id [$serializerId]. The most probable reason is that the configuration entry " + + "akka.actor.serializers is not in synch between the two systems.") + } + serializer.fromBinary(bytes, clazz).asInstanceOf[T] + } /** * Deserializes the given array of bytes using the specified type to look up what Serializer should be used.