我之前使用原生的Java1.6StAX解析器用Java编写了一个库。但是,我现在想在Android上使用这个库,这意味着不支持这个解析器。我希望使用Woodstox,因为它实现了Stax 1.0 api,而且我不必重写任何当前代码,只需在依赖项中重写sub即可。
Android没有StAX1API,所以我意识到我必须添加它。现在,我已经将woodstox-core-asl-4.2.0.jar、stax-api-1.0-2.jar和stax2-api-3.1.3.jar添加到类路径中。一切都编译得很好,但是当我实际尝试运行一个依赖于这个库的Android应用程序时,我得到的运行时错误表明它没有使用Woodstox作为StAX1API的实现。
是不是有什么地方我误解了或者做错了?我是不是少了一个罐子?我已经彻底阅读了Woodstox help page,但找不到我遗漏的其他任何东西。
编辑:我开始怀疑是否真的可以在Android上使用Woodstox。问题出在对stax api的依赖上。经过一些研究后,我发现Dalvik VM似乎不适合使用javax.*名称空间中的那些包。
发布于 2013-12-05 04:17:30
如何传递XMLInputFactory / XMLOutputFactory实例?通常,直接构造( WstxInputFactory、WstxOutputFactory的)实例更好,因为调用XMLInputFactory.newInstance()并没有真正的好处:至多它增加了开销(扫描类路径要慢得多)。
您不会遗漏任何jar : core和stax2-api总是需要的;如果平台不包括Stax API jar( Android出于某种奇怪的原因不包括,尽管它是JDK 1.6的一部分),那么就是那个jar。
编辑
自动发现应该基于以下几点:
XMLInputFactory (etc)检查匹配的系统属性("javax.xml.stream.XMLInputFactory")是否有值;这是要使用的工厂的类名。因此,您可以使用特定Impl值设置系统属性META-INF/services/javax.xml.stream.XMLInputFactory;一行包含类名提供的(Sjsxp)的实现
Woodstox提供SPI信息(步骤2),以自动注册自身。但是,因为在Android上重新打包jars (作为Android包,APK?),所以资源文件可能不包含,也可能找不到。如果这是根本原因,您仍然可以设置匹配的系统属性。如果不是,则需要使用其他方式提供类名或工厂实例。
https://stackoverflow.com/questions/20365186
复制相似问题