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