2016-05-20 8 views
0

以下のコードで次のエラーが発生しています。どんな洞察力も大いに感謝します。この現象の原因となっていないアプリケーション全体で、他にも多くのユーザー定義型が存在するため、これを引き起こしているものはあまりありません。スカラ型の差異json4sを使用したphantom-dslのJSONシリアライザでのエラー

ガイダンス/提案を提供するために必要な情報がもっと必要な場合はお知らせください。

[error] /Users/dan_mi_sun/projects/openblockchain/src/main/scala/org/dyne/danielsan/openblockchain/data/model/GenericVinModel.scala:35: type mismatch; 
    [error] found : org.dyne.danielsan.openblockchain.data.model.VinsModel 
    [error] required: com.websudos.phantom.CassandraTable[org.dyne.danielsan.openblockchain.data.model.VinsModel,org.dyne.danielsan.openblockchain.data.entity.Vin] 
    [error] Note: org.dyne.danielsan.openblockchain.data.model.ConcreteVinsModel <: org.dyne.danielsan.openblockchain.data.model.VinsModel (and org.dyne.danielsan.openblockchain.data.model.VinsModel <: com.websudos.phantom.CassandraTable[org.dyne.danielsan.openblockchain.data.model.ConcreteVinsModel,org.dyne.danielsan.openblockchain.data.entity.Vin]), but class CassandraTable is invariant in type T. 
    [error] You may wish to define T as +T instead. (SLS 4.5) 
    [error] object scriptsig extends JsonListColumn[VinsModel, Vin, ScriptSig](this) { 
    [error]                 ^
    [error] one error found 

import com.websudos.phantom.CassandraTable 
import com.websudos.phantom.dsl._ 
import org.json4s._ 
import org.json4s.jackson.JsonMethods._ 
import org.json4s.jackson.Serialization 
import org.json4s.jackson.Serialization.write 

import scala.concurrent.Future 

case class ScriptSig(asm: String, 
        hex: String) 

case class Vin(txid: String, 
       vout: Int, 
       scriptSig: List[ScriptSig], 
       sequence: Int) 

sealed class VinsModel extends CassandraTable[ConcreteVinsModel, Vin] { 

    implicit val formats = Serialization.formats(NoTypeHints) 

    override def fromRow(row: Row): Vin = { 
    Vin(
     txid(row), 
     vout(row), 
     scriptSig(row), 
     sequence(row) 
    ) 
    } 

    object txid extends StringColumn(this) 

    object vout extends IntColumn(this) 

    object scriptSig extends JsonListColumn[VinsModel, Vin, ScriptSig](this) { 
    override def fromJson(obj: String): ScriptSig = { 
     parse(obj).extract[ScriptSig] 
    } 

    override def toJson(obj: ScriptSig): String = { 
     write(obj) 
    } 

    } 

    object sequence extends IntColumn(this) 
} 

abstract class ConcreteVinsModel extends VinsModel with RootConnector { 

    override val tableName = "vins" 

    def insertNew(v: Vin): Future[ResultSet] = insertNewVin(v).future() 

    def insertNewVin(v: Vin) = { 
    insert 
     .value(_.txid, v.txid) 
     .value(_.vout, v.vout) 
     .value(_.scriptSig, v.scriptSig) 
     .value(_.sequence, v.sequence) 
    } 
} 
+1

すべきですか? –

+0

もっと最近のバージョンのファントムでは、 'JsonListColumn'に3つの引数を指定する必要がなくなりました。十分なはずです。それが本当でなくても、あなたが欠けているのは、 'JsonListColumn'の中に' ConcreteVinsModel'を置く必要があることです。 – flavian

答えて

0

このライン:

object scriptSig extends JsonListColumn[VinsModel, Vin, ScriptSig](this) 

あなたは何JSONのlibを使用している

object scriptSig extends JsonListColumn[ConcreteVinsModel, Vin, ScriptSig](this) 
関連する問題