我正在使用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的任何提示,所以我可以解析返回的内容?