2

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

我正在尝试做一些与 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 通过以下方式解决了这个问题:

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

但是我目前看不到使用 Dispatch 0.10 进行这项工作的方法。有没有人有任何关于在这个响应上设置字符集的提示,所以我可以解析返回的内容?

4

0 回答 0