2017-07-14 16 views
1

我希望能够通过java.util.DateCORDA API端点在模型如何白名单类型的序列化与CORDA

示范

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序列化?

回答

1

随着你CorDapp可以亚类CordaPluginRegistry,其如琴弦M13的被定义为(在科特林)的一部分:

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

例子类(在科特林):

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(在上述情况下)。

就是这样!

VERSION 1

对于V1,你需要创建一个实现SerializationWhitelist接口的类。其定义为:

interface SerializationWhitelist { 
    val whitelist: List<Class<*>> 
} 

示例实现可能是:

class Plugin : SerializationWhitelist { 
    override val whitelist: List<Class<*>> get() = listOf(
     TransactionBuilder::class.java 
    ) 
} 

META-INF.services然后需要一个叫你把实现SerializationWhitelist类的完全限定类名net.corda.core.serialization.SerializationWhitelist文件。

干杯

+0

罗杰,你还介意添加Corda V1的答案吗? – series0ne

+0

当然,我会编辑上面的帖子。 –

相关问题