gpt4 book ai didi

java - Akka Remote以及通过自定义反序列化拦截未知类

转载 作者:太空宇宙 更新时间:2023-11-04 12:57:20 24 4
gpt4 key购买 nike

问题/背景。我需要向远程 Actor 发送一些消息。这些消息可能包含接收方未知的类的对象。我需要拦截这种情况以避免出现 ClassNotFoundException。

一种解决方案可能包括在消息反序列化时拦截未知类。然后,该消息可能会被替换为不同的应用程序级消息,以便远程参与者可以向发送者传达它没有所需的类。

我不知道这样的拦截是否可能,因为自定义反/序列化器必须实现 akka.serialization.Serializer ,它具有以下方法

def fromBinary(bytes: Array[Byte],
clazz: Option[Class[_]]): AnyRef

现在,问题源于为未知类的对象构造 Class 对象(由 Akka 完成)。

有没有办法在较低级别自定义 Akka 反序列化以满足我的需求?

其他解决方案

  • 该问题与以下 SO 问题中描述的问题类似,但提出了不同的解决方案:Deserialize remote object to the narrowest accessible class在那里得到答案仍然很有用。然而,这个解决方案对我来说还不够,因为虽然限制接口(interface)是可以的,但我仍然需要一个带有额外方法的类实现。

最佳答案

事实1.实际上,我发现除了使用类类型提示进行反序列化之外,还有一种替代方法,即使用字符串 list 进行反序列化。引用:http://doc.akka.io/docs/akka/2.4.0/scala/serialization.html#Serializer_with_String_Manifest

注意:它不适用于 Akka < 2.4.0。这可能很重要,因为从 Akka 2.4.0 开始,不再支持 Java 1.6/1.7。这意味着要使用 Akka 2.4,您需要拥有 Java 8。

事实 2. 我还发现 Akka 不一定为您提供类型提示。您可以通过以下方式禁用类型提示

class MyOwnSerializer extends akka.serialization.Serializer {
override def includeManifest: Boolean = false // !!!

关于java - Akka Remote以及通过自定义反序列化拦截未知类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35265306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com