我在 iPhone Conflunce 应用程序版本 1.37.0.1 和 Web 浏览器之间的不同行为上遇到了令人困惑的错误。
从技术上讲,宏从Redmine服务器接收数据(XML)。 XML 存储在 ByteArray 类中。
存储在 ByteArray 中可以缓存 Redmine 服务器响应一段时间。
为了解析它,它被 ByteArray Stream 包装:
public InputStream httpGetAsInputStream(String url) throws IOException {
byte[] result = httpGetAsString(url).getBytes(UTF_8);
return new ByteArrayInputStream(result);
}
private static void parse_xml(InputStream in, TicketState t) throws Exception {
try {
// ---> THIS FAILS on IPhone only
XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(in);
...
} ...
}
这就是方法的调用方式:
try {
InputStream strm = ....httpGetAsInputStream(tmpurl);
parse_xml(strm, t);
strm.close();
}
XML 输出被解析并呈现为 HTML 表格。
真正令我困惑的是,Web 浏览器按预期工作,但 iPhone 应用程序抛出异常:无法创建类 javax.xml.stream.XMLInputFactory 的提供程序。
嗯,那是服务器端……iPhone应用程序和浏览器之间应该没有区别。
我猜测编码存在问题(iPhone 使用不同的编码向浏览器发送响应)。
为什么要将 HTTP 响应读入字符串只是为了将其转换为字节数组?为什么不直接将响应字节读取到字节数组中?