为第三方类扩展Corda序列化 TL;博士

为第三方类扩展Corda序列化 TL;博士,corda,Corda,我需要Corda从JDK序列化JSONObject。我想我可以为它添加一个自定义解析器,但我不知道如何添加 完整故事: 因此,我有一堆类,它们充当JSON api周围的semy类型安全包装器。例如: @CordaSerializable class ClaimReq(val json: JSONObject) { val proverDid: String = json.getString("prover_did") val credDefId: String = json.ge

我需要Corda从JDK序列化JSONObject。我想我可以为它添加一个自定义解析器,但我不知道如何添加

完整故事: 因此,我有一堆类,它们充当JSON api周围的semy类型安全包装器。例如:

@CordaSerializable
class ClaimReq(val json: JSONObject) {
    val proverDid: String = json.getString("prover_did")
    val credDefId: String = json.getString("cred_def_id")
}
当我试图通过Corda频道发送这样一个类时,问题出现了。系统序列化org.json.JSONObject时出现问题:

java.io.NotSerializableException:找不到类org.json.JSONObject的反序列化构造函数。 在net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.constructorForDeserialization(SerializationHelper.kt:50)~[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintForObject(Schema.kt:456)~[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.access$fingerprintForObject(Schema.kt:1)~[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt$fingerprintForType$3.invoke(Schema.kt:423)~[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt$fingerprintForType$3.invoke(Schema.kt)~[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintWithCustomSerializerOrElse(Schema.kt:345)~[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintForType(Schema.kt:417)[corda-node-api-3.1-corda.jar:?] 位于net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintForObject(Schema.kt:459)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.access$fingerprintForObject(Schema.kt:1)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt$fingerprintForType$3.invoke(Schema.kt:423)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt$fingerprintForType$3.invoke(Schema.kt)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintWithCustomSerializerOrElse(Schema.kt:345)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintForType(Schema.kt:417)[corda-node-api-3.1-corda.jar:?] net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintForType$default(Schema.kt:352)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SchemaKt.fingerprintForType(Schema.kt:328)[corda-node-api-3.1-corda.jar:?] 位于net.corda.nodeapi.internal.serialization.amqp.ObjectSerializer.(ObjectSerializer.kt:34)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializerFactory$makeClassSerializer$1.apply(SerializerFactory.kt:271)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializerFactory$makeClassSerializer$1.apply(SerializerFactory.kt:40)[corda-node-api-3.1-corda.jar:?] 位于java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1688)[?:1.8.0_171] 在net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.makeClassSerializer(SerializerFactory.kt:255)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializerFactory.get(SerializerFactory.kt:100)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api(SerializationOutput.kt:98)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api$default(SerializationOutput.kt:97)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.writeObject$node_api(SerializationOutput.kt:78)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialization$1$1.invoke(SerializationOutput.kt:64)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$_serialization$1$1.invoke(SerializationOutput.kt:22)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withList(SerializationHelper.kt:401)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$\ u serialization$1.invoke(SerializationOutput.kt:63)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput$\ u serialization$1.invoke(SerializationOutput.kt:22)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationHelperKt.withdescripted(SerializationHelper.kt:390)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.\u serialization$node\u api(SerializationOutput.kt:62)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.SerializationOutput.serialization(SerializationOutput.kt:36)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.amqp.abstractamqpsserializationscheme.serialization(amqpsserializationscheme.kt:128)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialization$1$1.invoke(SerializationScheme.kt:126)[corda-node-api-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialize$1$1.invoke(SerializationScheme.kt:86)[corda-node-api-3.1-corda.jar:?] 在net.corda.core.serialization.SerializationFactory.withCurrentContext(SerializationAPI.kt:66)[corda-core-3.1-corda.jar:?] 在net.corda.nodeapi.internal.serialization.SerializationFactoryImpl$serialization$1.invoke(SerializationScheme.kt:126)[corda-node-api-3.1-corda.jar:?] 位于net.corda.nodeapi.internal.ser
@CordaSerializable
class ClaimReq(val json: JSONObject) {
    val proverDid: String = json.getString("prover_did")
    val credDefId: String = json.getString("cred_def_id")

    @ConstructorForDeserialization constructor(str: String) : this(JSONObject(str))
    val str = json.toString()
}