1

我想做一些顯然很簡單的事情:調用Web服務並將結果保存到數據庫中。Play2中的Webservice調用Scala

我是阿卡演員碼內,我要做的就是調用對象方法:

object Service { 
    def run { 
    val response = WS.url("http://api.server.com/rest/") 
    .withAuth("test", "test", com.ning.http.client.Realm.AuthScheme.BASIC) 
    .get.value.get.get.body 
    } 
} 

如何解析的身體嗎?我試圖在控制檯上打印它,但我得到了NotSuchElement異常。

有什麼想法,想過?如何解析XML的數組,屬性和元素?

我在打版自上一版本2.1.0

回答

4

事情已經改變了一點。播放2.1.0依賴於scala.concurrent包,而不是自己的類:

  • A回放Promise現在是斯卡拉Future
  • A回放Redeemable現在是斯卡拉Promise

我沒有有時間來測試它,但從我收集的文件應該是這樣的:

import play.api.libs.ws.WS 
import play.api.libs.concurrent.Execution.Implicits._ 
import scala.concurrent.Await 
import scala.concurrent.duration._ 
import scala.language.postfixOps 

object WebserviceCallParseXML { 

    val responseFuture = WS.url("http://api.server.com/rest/") 
    .withAuth("test", "test", com.ning.http.client.Realm.AuthScheme.BASIC) 
    .get() 

    val resultFuture = responseFuture map { response => 
    response.status match { 
     case 200 => Some(response.xml) 
     case _ => None 
    } 
    } 

    val result = Await.result(resultFuture, 5 seconds) 

    println(if (result.isDefined) result.get else "No result found") 

} 

關於Future.value的文檔:

如果未來未完成,返回值將爲無。如果未來完成,如果包含有效結果,則值爲Some(Success(t)),如果包含異常,則值爲Some(Failure(error))。

+0

它工作甜美,不錯的嘗試沒有測試!儘管如此,問題的最後部分仍然存在。如何將Some(response.xml)轉換爲表示XML的Case類? – 2013-02-18 14:54:16

+0

這只是普通的Scala xml處理。也許這篇文章可以幫助你開始:http://bcomposes.wordpress.com/2012/05/04/basic-xml-processing-with-scala/ – EECOLOR 2013-02-18 15:18:05