作者:手机用户2602908963 | 来源:互联网 | 2023-02-05 13:40
我有一个实现它的特征和案例对象
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
}
}
我希望能够序列化它们.使用以下序列化配置
serializers {
cowboySerializer = "mypackage.CowboySerializer"
}
serialization-bindings {
"mypackage.Cowboy" = cowboySerializer
}
我收到这个警告:
为mypackage.Cowboy $ Ugly $找到多个序列化器,首先选择:Vector((接口java.io.Serializable,akka.serialization.JavaSerializer @ 3fee36d8),(接口mypackage.Cowboy,brigadier.scraper.ScrapeStatusSerializer @ 10442350))
这意味着选择java序列化程序而不是我的.
如果我通过禁用java序列化程序
akka.actor.serialization-bindings {
"java.io.Serializable" = none
}
发生以下错误:
由于[mypackage.Cowboy $ Ugly $无法强制转换为mypackage.Cowboy],因为persistenceId [XXX] 拒绝持续事件类型[mypackage.Cowboy $ Ugly $],序列号为1
这对我来说似乎很奇怪因为施法
Cowboy.Ugly.asInstanceOf[Cowboy]
显然有效.
我也尝试将每个案例对象映射到序列化器,正如Akka docs所说
如果您的消息包含在Scala对象中,那么为了引用这些消息,您将需要使用完全限定的Java类名.对于名为Wrapper的对象中包含的名为Message的消息,您需要将其引用为Wrapper $ Message而不是Wrapper.Message.
serialization-bindings {
"mypackage.Cowboy$Good" = cowboySerializer
"mypackage.Cowboy$Bad" = cowboySerializer
"mypackage.Cowboy$Ugly" = cowboySerializer
}
并且得到了由ClassNotFoundException引起的InvocationTargetException引起的ActorInitializationException(无法找到mypackage.Cowboy $ Ugly类).
我究竟做错了什么?