2016-04-03 17 views
1

için JsonWriter veya JsonFormat tipi sınıfı bulunamıyor Sınıfıma http İsteğini yerleştirdiğim yer var. Burası bir json'a ihtiyacım olan yer. Burada Püskürtme Json:

package com.webtrekk.cometd 
import com.webtrekk.json._ 
import spray.json._ 

import scala.concurrent.Future 
import scala.concurrent.duration._ 
import akka.util.Timeout 
import akka.pattern.ask 
import akka.io.IO 
import spray.can.Http 
import scala.util.{ Success, Failure } 

import akka.actor.ActorSystem 

import spray.http._ 
import HttpMethods._ 
import spray.http.HttpHeaders._ 
import spray.http.ContentTypes._ 
import spray.http.MediaTypes._ 


import scala.concurrent.Future 

class Handshake(var url:String, var token:String){ 
    val handshake = com.webtrekk.json.Handshake 
    implicit val system: ActorSystem = ActorSystem("salesforce") 
    implicit val timeout: Timeout = Timeout(15.seconds) 

    def execute() { 
    val contentType = new ContentType(MediaTypes.`application/json`, Option(HttpCharsets.`UTF-8`)) 

    val httpHeader = List(RawHeader("Authorization", "Bearer "+token)) 

    val httpEntity = HttpEntity(
     contentType, 
     handshake.toJson) 

    val responseFuture: Future[HttpResponse] = 
     (IO(Http) ? HttpRequest(
     method = POST, 
     uri = url, 
     entity = httpEntity, 
     headers = httpHeader)).mapTo[HttpResponse] 

    } 
} 

Ve

Ben de RootJsonFormat genişletilmiş Tokalaşma Json Protokolü

package com.webtrekk.json 
import spray.json._ 
import DefaultJsonProtocol._ 

class Handshake(
    val channel: String = "/meta/handshake", 
    val id: Int = 1, 
    val supportedConnectionTypes: Vector[String] = Vector("long-polling"), 
    val version: String = "1.0", 
    val minimumVersion: String = "1.0") { 
    var successful: Boolean = false 
    var clientId:String = "" 
} 

class HandshakeProtocol extends DefaultJsonProtocol { 
    implicit object HandshakeJsonFormat extends JsonFormat[Handshake] { 
    def write(h: Handshake): JsValue = 
     JsObject(
     "channel" -> JsString(h.channel), 
     "id" -> JsNumber(h.id), 
     "supportedConnectionTypes" -> JsArray(h.supportedConnectionTypes.map(value => JsString(value))), 
     "version" -> JsString(h.version), 
     "minimumVersion" -> JsString(h.minimumVersion) 
     ) 

    def read(value: JsValue): Handshake = 
     value.asJsObject.getFields(
     "channel", 
     "id", 
     "supportedConnectionTypes", 
     "version", 
     "minimumVersion", 
     "successful", 
     "cliendId" 
     ) match { 
      case Seq(
      JsString(channel), 
      JsNumber(id), 
      JsArray(supportedConnectionTypes), 
      JsString(version), 
      JsString(minimumVersion), 
      JsBoolean(successful), 
      JsString(clientId) 
      ) => { 
      var handshake = new Handshake(
       channel, 
       id.toInt, 
       supportedConnectionTypes.map(value => value.toString), 
       version, 
       minimumVersion) 

      handshake.successful = successful 
      handshake.clientId = clientId 
      handshake 
      } 
      case _ => throw new DeserializationException("JSON Error: Handshake Json Structure isn't correct!") 
     } 
    } 
} 

olduğunu. Ama bu da işe yaramıyor. toJson yönteminin neden çalışmadığı konusunda hiçbir fikrim yok. Ben Scala 2.11.7

+1

için teşekkürler Yazdıklarınız, 'toJson' olarak adlandırdığınız yerde olmayacaktır. Bunları doğrudan içe aktarmanız veya "El Sıkışma" nın eşlik eden nesnesine eklemeniz gerekir. – tryx

+0

Nesneye eklenmesiyle ne demek istiyorsunuz? Genişletme? –

+0

Tamam: Bende var: örtük val handshakeFormat = HandshakeJsonFormat el sıkışma sınıfına eklendi. Ve HandshakeJsonFormat nesnesinin dış sınıf HandshakeProtocol sildim. –

cevap

1

kullanmak Handshake.this.handshake.type

için JsonWriter veya JsonFormat tipi sınıf bulamıyor i tokalaşma sınıfına

implicit val handshakeFormat = HandshakeJsonFormat 

ekledi: yürütme anda i Hatası olsun. Bu çalışıyor. Bununla, HandhshakeJsonFormat el sıkışma kapsamındadır. tryx