繁体   English   中英

在Play2 Scala中调用Webservice

[英]Webservice call in Play2 Scala

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

我在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的数组,属性和元素?

我在播放版本2.1.0

自上一版本以来,情况发生了一些变化。 Play 2.1.0取决于scala.concurrent包而不是它们自己的类:

  • Play Promise现在是Scala Future
  • Play Redeemable现在是Scala 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的文档:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM