Corda:在IDE中运行junit测试时出现异常

Corda:在IDE中运行junit测试时出现异常,corda,Corda,上周运行junit测试时突然发现奇怪的异常。鉴于我目前对Corda内部结构缺乏深入了解,这(有点尴尬!)需要一些时间才能解决,但我认为下面的注释可能会为其他人节省一些时间。有关的例外情况包括: 缺少reference.conf 类kotlin.collections.EmptyList未注释或不在白名单上,因此不能用于序列化 (经过大量的挠头、思考和尝试和错误,我确定这是由于缺少如下所述的依赖关系。但希望Corda开发团队提供意见。) 对下面的详细评论表示歉意。如果没有用处/违反StackO

上周运行junit测试时突然发现奇怪的异常。鉴于我目前对Corda内部结构缺乏深入了解,这(有点尴尬!)需要一些时间才能解决,但我认为下面的注释可能会为其他人节省一些时间。有关的例外情况包括:

  • 缺少reference.conf
  • 类kotlin.collections.EmptyList未注释或不在白名单上,因此不能用于序列化
(经过大量的挠头、思考和尝试和错误,我确定这是由于缺少如下所述的依赖关系。但希望Corda开发团队提供意见。)

对下面的详细评论表示歉意。如果没有用处/违反StackOverflow指南,则乐意删除

第一个异常(缺少reference.conf)是由于缺少对节点主模块的依赖关系。此模块包含reference.conf文本文件,该文件为节点提供默认配置。如果节点启动代码找不到它,将引发异常,并且节点未启动

第二个异常是由于缺少节点api模块。在仔细浏览了整个堆栈并理解了在我向下遍历各层时发生的事情之后,我发现在junit测试中运行时,没有调用DefaultCustomization代码,该代码将各种核心类型添加到Kyro序列化的白名单中。此异常在RPC客户端通过RPC代理与正在运行的节点进行第一次通信时引发。在这种情况下,在调用“protocolVersion”时,RPCClient类检查服务器RPC协议版本是否不低于RPC客户端配置中指定的版本。我假设DefaultCustomization应用于第一个联系人,在这种情况下,由于缺少模块依赖关系,节点api模块中存在的DefaultCustomization的基本列表没有被应用。这导致了上述例外情况。有一个关于话语论坛的讨论是非常密切相关的,关于这个问题的说明是有益的。然而,讨论的更改和随后应用的代码修复是为了确保在搜索插件注册表时使用DefaultKyroCustomizer实例化的类加载器。这会导致搜索客户端rpc应用程序的类路径,而不是defabstract类CordaPluginRegistry(?)的更有限的类路径。这并没有解决我的问题,因为异常是由于核心DefaultCustomization代码在运行时不可访问这一更基本的问题造成的

我怀疑这在开发一个完全依赖corda.jar的独特的CordaApp时不是问题,因为所有需要的模块都将自动从该jar加载(?)。通过确保IDE(通过IntelliJ IDEA.iml文件)加载有问题的两个Corda模块,junit测试将无异常运行

然而,一个潜在的、次要的建议可能是,Corda是否能够以与验证reference.conf的存在类似的方式验证所有DefaultSerialiser在节点启动期间是否存在、可访问和加载;与此相反,只有在第一次尝试RPC通信时问题才变得明显?可能是作为一种防御措施


如果您对以上内容有任何更正/进一步的评论,我们将不胜感激:-)

这是一个非常棒的细分,感谢您的分享

我可以把它分享给R3团队,深入研究,看看是否可以添加DefaultSerializer建议


祝你好运

这是一个可怕的崩溃,谢谢分享

我可以把它分享给R3团队,深入研究,看看是否可以添加DefaultSerializer建议

祝你好运