I have objects with traits and objects that implement it
trait Cowboy {
def code: String
}
object Cowboy {
case object Good extends Cowboy {
val code = "G"
}
case object Bad extends Cowboy {
val code = "B"
}
case object Ugly extends Cowboy {
val code = "U"
}
def fromString(code: String) = code match {
case Good.code => Good
case Bad.code => Bad
case Ugly.code => Ugly
}
}
I want to be able to serialize them. With the following serialization configurations
serializers {
cowboySerializer = "mypackage.CowboySerializer"
}
serialization-bindings {
"mypackage.Cowboy" = cowboySerializer
}
I get this warning:
Several serializers were found for the mypackage.Cowboy $ Ugly $ class, choosing first: Vector ((java.io.Serializable interface, akka.serialization.JavaSerializer @ 3fee36d8), (mypackage.Cowboy interface, brigadier.scraper.ScrapeStatusSerializer @ 10442350))
which means java serializer is selected instead of mine.
If I disable java serializer via
akka.actor.serialization-bindings {
"java.io.Serializable" = none
}
the following error occurs:
[mypackage.Cowboy $Ugly $] 1 persistenceId [XXX] - [mypackage.Cowboy $Ugly $ mypackage.Cowboy]
,
Cowboy.Ugly.asInstanceOf[Cowboy]
, .
Akka docs
Scala, , Java. Message, Wrapper Wrapper $Message Wrapper.Message.
serialization-bindings {
"mypackage.Cowboy$Good" = cowboySerializer
"mypackage.Cowboy$Bad" = cowboySerializer
"mypackage.Cowboy$Ugly" = cowboySerializer
}
ActorInitializationException, InvocationTargetException, ClassNotFoundException ( mypackage.Cowboy $Ugly).
?