Corda-通过RPC传递匿名实现

Corda-通过RPC传递匿名实现,corda,Corda,是否可以通过Corda的RPC接口传递匿名对象实现例如: 工作流程 @cordaseriable 接口示例接口{ val编号:Int } @星表 类SquareFlow(私有值示例:ExampleInterface):FlowLogic(){ @暂停 重写趣味调用():Int=example.number*example.number } RPC客户端 val value=object:ExampleInterface{ 覆盖值编号:Int=5 } return rpc.startFlowDy

是否可以通过Corda的RPC接口传递匿名对象实现例如:

工作流程
@cordaseriable
接口示例接口{
val编号:Int
}
@星表
类SquareFlow(私有值示例:ExampleInterface):FlowLogic(){
@暂停
重写趣味调用():Int=example.number*example.number
}
RPC客户端
val value=object:ExampleInterface{
覆盖值编号:Int=5
}
return rpc.startFlowDynamic(SquareFlow::class.java,value).returnValue.getOrThrow()
例外情况 net.corda.client.rpc.RPCException:java.util.List->无法为类型类com.example.client.ExampleService$square$value$1创建对象序列化程序:无法识别唯一的反序列化构造函数

使用@ConstructorForDeserialization为该类型的构造函数添加注释,或者为其提供自定义序列化程序


虽然这是一个示例,但我实际上想做的是通过RPC传递
对象:TypeReference(){}

根据Corda的文档,AMQP不支持匿名对象 可读取的RPC客户端中使用的序列化。这可能是因为序列化和反序列化需要一个公共构造函数

此外,我假设您引用的是Jackson的
TypeReference
类,它使用的泛型仅在编译时可用。由于Corda的序列化工作方式,泛型在运行时不可用,因此当TypeReference从rpc应用程序传递到Corda节点时,Corda节点将不知道泛型是什么。我自己没有尝试过,但我相信每当流尝试挂起时,或者可能在RPC客户端中挂起之前,都会抛出一些异常

您可能可以将jackson
JavaType
类传递给流而不会出现问题,因为我相信它在Corda中默认被列为可序列化的白名单,如果不了解如何使用
SerializationWhitelist
将该类列为白名单的话。通过实例化
TypeFactory
并调用
constructType(newtypereference{})
可以获得
JavaType
。然后将JavaType传递给流构造函数