首页 > 解决方案 > Corda Enterprise 在运行测试用例时为自定义模式抛出“net.corda.core.node.services.VaultQueryException”

问题描述

根据 Corda 企业文档,我们添加了如下自定义模式

fun setup() {
        network = MockNetwork(cordappPackages = listOf("com.xxx.service", "com.xxx.yyy", "com.xxx.zzzz", "com.xxx.kkk", "com.xxx.ttt", "com.xxx.yyyy.schema"))
}

或者

fun setup() {
        network = MockNetwork(listOf("com.xxx.service", "com.xxx.yyy", "com.xxx.zzzz", "com.xxx.kkk", "com.xxx.ttt", "com.xxx.yyyy.schema"))
}

在运行测试用例时,我们面临以下问题,

[INFO] 12:11:35,213 [main] cordapp.CordappLoader.scanCordapp - Scanning CorDapp in file:/C:/Users/************/generated-test-cordapps/com.xxx.service-c7ab4ac5-fd21-40ae-86e6-18cc219b3179.jar
[INFO] 12:11:35,862 [main] hikari.HikariDataSource.<init> - HikariPool-1 - Started.
[WARN] 12:11:37,726 [main] persistence.SchemaMigration.doRunMigration - No migration defined for schema: com.xxx.yyy.schema.yyyy v1
[WARN] 12:11:37,733 [main] persistence.SchemaMigration.doRunMigration - No migration defined for schema: com.xxx.yyy.schema.xxxStateSchema v1
[INFO] 12:11:40,127 [main] persistence.SchemaMigration.doRunMigration - defaultSchemaName=PUBLIC



 net.corda.core.node.services.VaultQueryException: 
                    Please register the entity 'com.xxx.yyyy.schema.XXXXSchemaV1$XXXX'
                    See https://docs.corda.net/api-persistence.html#custom-schema-registration for more information

需要帮助。

标签: blockchaincorda

解决方案


在 Corda Enterprise 中,模式类需要具有相应的带有表定义的 Liquibase 迁移脚本。此脚本将创建后备表。错误

persistence.SchemaMigration.doRunMigration - No migration defined for schema: com.xxx.yyy.schema.yyyy v1* 

建议这样做,但您也可能错误地配置了脚本文件名。如果模式类没有覆盖migrationResource字段,那么具有 Liquibase 模式的文件名需要遵循模式大写更改为小写,前面带有连字符,例如类

com.example.MyMappedSchema

相关的脚本文件预计为

my-mapped-schema.changelog-master.XXX,其中 XXX 可以是xmlsqlymljson

该文件需要放在资源/迁移源文件夹中,以便在 Cordapp JAR 中复制(或用于测试)。如果您的架构类具有迁移资源,那么 Liquibase 脚本仍需要位于资源/迁移文件夹下。


推荐阅读