使用Dispatch Databinder 0.10处理xml时设置charset

时间:2013-04-16 16:48:46

标签: scala scalatra scala-dispatch

我正在使用Scalatra应用程序包装上游API,并使用Dispatch进行异步请求。但是,我在使用Dispatch的内置XML处理支持将上游XML转换为xml.Elems时遇到了麻烦。

我正在尝试做一些与Dispatch文档中的内容非常相似的内容,即检索上游XML并进行一些重新处理。有问题的函数类似于:

  def facilitiesSvc = {
    val myhost = host("upstream.api.co.uk") / "organisations" / "foo" / "123" / "bar" / "core.xml"
    myhost.addQueryParameter("apikey", "123456")
    myhost
  }

  def facilitiesXml: Future[Either[String, xml.Elem]] = {
    val res: Future[Either[Throwable, xml.Elem]] = Http((facilitiesSvc) OK as.xml.Elem).either
    for(exc <- res.left)
      yield "Can't connect to facilities service: \n" +
        exc.getMessage
  }

这导致:

Left(Can't connect to facilities service: org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.)

上游API没有发送回字符集,并且在检索字符集时,Dispatch在XML开始之前使用字节顺序标记显示它:<?xml version="1.0" encoding="utf-8"?>

我可以看到早期版本的Dispatch解决了这个问题in the following way

new Http apply(url(uri.toString).copy(defaultCharset = "iso-8859-1") as_str)

但是我现在无法通过Dispatch 0.10看到这种方法。有没有人在这个响应中设置charset的任何提示,所以我可以解析返回的内容?

0 个答案:

没有答案