Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Play2 Scala中的Web服务调用_Scala_Playframework_Playframework 2.0_Akka_Playframework 2.1 - Fatal编程技术网

Play2 Scala中的Web服务调用

Play2 Scala中的Web服务调用,scala,playframework,playframework-2.0,akka,playframework-2.1,Scala,Playframework,Playframework 2.0,Akka,Playframework 2.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.

我想做一些显然很简单的事情:调用一个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
  }
}
我如何解析身体?我试图在控制台上打印它,但没有得到成功

你知道吗,想?如何解析XML的数组、属性和元素


我正在玩2.1.0版的游戏

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

  • 一出戏《承诺》现在是一部Scala《未来》
  • 可赎回的剧本现在是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
的文档:

如果未来未完成,则返回的值将为“无”。如果未来已完成,则如果包含有效结果,则该值将为Some(成功(t)),如果包含异常,则该值将为Some(失败(错误))


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

  • 一出戏《承诺》现在是一部Scala《未来》
  • 可赎回的剧本现在是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
的文档:

如果未来未完成,则返回的值将为“无”。如果未来已完成,则如果包含有效结果,则该值将为Some(成功(t)),如果包含异常,则该值将为Some(失败(错误))


它工作起来很好,不用测试就可以很好地尝试!但问题的最后一部分没有提到。如何将一些(response.xml)转换为表示xml的Case类?这只是普通的Scala xml处理。也许这篇文章可以帮助你开始:它工作得很好,不用测试就可以尝试!但问题的最后一部分没有提到。如何将一些(response.xml)转换为表示xml的Case类?这只是普通的Scala xml处理。也许本文可以帮助您开始: