我正在使用 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 进行这项工作的方法。有没有人有任何关于在这个响应上设置字符集的提示,所以我可以解析返回的内容?