1

我想做一些看似简单的事情:调用 Web 服务并将结果保存在数据库中。

我在 Akka Actor 代码中,我所做的是调用对象方法:

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 的数组、属性、元素?

我在play版本2.1.0

4

1 回答 1

4

与上一个版本相比,情况发生了一些变化。Play 2.1.0 依赖scala.concurrent包而不是自己的类:

  • PlayPromise现在是 ScalaFuture
  • PlayRedeemable现在是 ScalaPromise

我没有时间测试它,但从我收集的文档来看,它应该是这样的:

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

如果未来未完成,则返回值为 None。如果 future 完成,如果它包含有效结果,则值为 Some(Success(t)),如果它包含异常,则值为 Some(Failure(error))。

于 2013-02-18T00:20:46.680 回答