2017-07-14 43 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

當然,我會編輯上面的帖子。 –

相關問題