Geronimo 叛逆者: 使用集成软件包:Codehaus 的 Woodstox
2010-04-06 00:00:00 来源:WEB开发网使用 Woodstox 作为 Geronimo 的 StAX 提供程序
现在您已经看到了 StAX 解析的优点。它被广泛公认为 XML 技术中的重大进步。因而,当它成为 Java EE 5 规范的一部分时并不令人惊讶(它甚至还包含在 Java Platform, Standard Edition [Java SE] 6 中)。由于它是 Java EE 5 的一部分,因此它必须由 Geronimo 2.0 来实现。
Geronimo 团队十分幸运,有若干个开源 StAX 实现可供选择。团队选取了 Woodstox 作为 Geronimo 所附带的 StAX 解析器。Woodstox 被视为执行效果最佳的 StAX 实现之一。此外,Woodstox 是在 Lesser General Public License (LGPL) 和 Apache 2.0 许可下双重授权的。因此您可以不受任何限制地将 Woodstox 及其源代码集成到 Geronimo 中。
应用程序性能调优:发挥 Woodstox 的最大功效
性能很明显是 Woodstox 带给 Geronimo 的优点之一。就像使用其他高性能技术一样,了解如何使用 Woodstox 才能获得最佳性能非常重要。清单 5 中的代码将使用 XMLEventReader 接口,这是 StAX 规范包含的一个高级 API。用于获得高性能的较低级 API 是 XMLStreamReader 接口。清单 6 显示了使用此接口的 StAX 解析器。
清单 6. 用 XMLStreamReader 进行 StAX 解析
Map<String,String> map = new HashMap<String,String>();
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
QName qId = new QName("id");
QName qTitle = new QName("title");
QName qPhoto = new QName("photo");
XMLStreamReader reader = inputFactory.createXMLStreamReader(input);
while (reader.hasNext()){
int event = reader.next();
if (event == START_ELEMENT){ // statically included constant from XMLStreamConstants
if (reader.getName().equals(qPhoto)){
String id = reader.getAttributeValue(null, qId.getLocalPart());
String title = reader.getAttributeValue(null, qTitle.getLocalPart());
map.put(id,title);
}
}
}
reader.close();
清单 6 中的代码类似于 清单 5 中的代码;虽然它很明显有些低级,但是您将获得很大的性能提高。
结束语
您已经了解了使用 StAX 解析器解析 XML 文档的一些优点。StAX 在 SAX 与 DOM 之间提供了很好的折衷。您可以通过使用它作为 Geronimo 2.0 的一部分立即利用 StAX。您不但将开始使用 StAX 的直观 pull API,而且将获得在 Woodstox 中使用 StAX 的高性能实现的额外优势。
本文示例源代码或素材下载
更多精彩
赞助商链接