【问题标题】:Corda 4.0 transaction serialization issueCorda 4.0 事务序列化问题
【发布时间】:2019-04-18 17:54:06
【问题描述】:

最近升级到 Corda 4.0 我们现在在尝试创建事务时看到序列化异常:

[错误] 10:09:49,500 [模拟网络] amqp.SerializationOutput。 - 序列化失败方向="Serialize", type="net.corda.core.transactions.TraversableTransaction", msg="为参数命令定义的getter返回类型 java.util.List> 尚未底层 类型是 java.util.List>", ClassChain="net.corda.core.transactions.TraversableTransaction" {actor_id=仅用于测试,actor_owning_identity=O=供应商 1, L=伦敦,C=GB,actor_store_id=TEST,fiber-id=10000001, 流量 ID=e61b7da7-6826-4410-9414-1c03bebbc3fe, invocation_id=58c5f5ff-09f8-4bfa-bbe5-cf6b0ef47d06, invocation_timestamp=2019-03-28T10:09:46.205Z, origin=Only For 测试,session_id=58c5f5ff-09f8-4bfa-bbe5-cf6b0ef47d06, session_timestamp=2019-03-28T10:09:46.205Z, thread-id=400}

任何想法是什么原因造成的?

【问题讨论】:

    标签: corda


    【解决方案1】:

    每当您在 Corda 4 上看到此表单的错误消息时:

    为参数 [参数名称] 定义的 getter 返回类型 [类型] 底层类型是[完全相同的类型]

    这是由某些 Guava 版本中的错误引起的。

    Corda 4 使用 Guava 版本 25.1-jre。但是,如果您的节点加载了覆盖 Corda 的 Java 版本的另一个版本的 Guava(例如 21.0),您将看到此错误。

    计划对 Corda 4.1 进行修复。

    【讨论】:

    • 我在 corda 4.3 中遇到了类似的错误。我尝试使用 oracle 为我的 cordapp 过滤交易,它工作正常。但是如果我在用 oracle 签署 tx 后使用 send 或 sendAndReceive 。我得到....序列化失败方向=“Deserialize”,类型=“java.util.List”,msg=“描述的类型与描述符net.corda:1f2tmsdgsu106jed1w0vJw==预计是接口java.util的类型。 List but was class com.insurance.state.MyState” 仅当我使用和 oracle 签署交易时才会发生这种情况。如果我不使用和甲骨文。我没有收到此错误。
    【解决方案2】:

    升级到 4.0 后我也遇到了这个问题。我的流程将事务作为输出返回,并且出现 TraversableTransaction 序列化异常。我没有解决它。我已经使用所有适当的数据、trxId 等创建了流响应 DTO...

    例子:

    SignedTransaction signedTransaction = subFlow(new FinalityFlow(signedTx, session));
    response.setTrxId(signedTransaction.getId().toString());
    return response;
    

    【讨论】:

      猜你喜欢
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 2014-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多