如何将CORDA序列化的类型列入白名单

我希望能够将java.util.Date传递给模型java.util.Date的CORDA API端点

该模型

 public final class Message{ public Date birthday; public Message(Date birthday) { this.birthday = birthday; } private Message() { // This is only here so the serializer can spin up a new instance. } public Date getBirthday() { return birthday; } } 

API

 @Path("foo") public final class FooApi { @PUT @Path("bar") @Produces(MediaType.APPLICATION_JSON) public Response putBar(Message m) { // Some logic here return Response.ok("Successful").build(); } } 

问题是,当我提交一个Date ,我得到这个:

Classjava.util.Dateisnotannotatedoronthewhitelist,socannotbeusedinserializationSerializationtrace:closeDate(com.template.messages.Message)

如何将白名单序列化Date

作为您的CorDapp的一部分,您可以分类为Corda M13的CordaPluginRegistry ,它被定义为(在Kotlin中):

 abstract class CordaPluginRegistry { open fun customizeSerialization(custom: SerializationCustomization): Boolean = false open val requiredSchemas: Set<MappedSchema> get() = emptySet() // Omitted deprecated properties. } 

示例子类(在Kotlin中):

 package com.example class ExamplePlugin : CordaPluginRegistry() { override fun customizeSerialization(custom: SerializationCustomization): Boolean { custom.addToWhitelist(Date::class.java) return true } } 

然后,您必须确保在resources/META-INF/services/net.corda.core.node.CordaPluginRegistry存在对上述情况下CordaPluginRegistry子类com.example.ExamplePlugin的完全限定类名称的引用。

而已!

干杯